Module: Omnizip::Parallel

Defined in:
lib/omnizip/parallel.rb,
lib/omnizip/parallel/job_queue.rb,
lib/omnizip/parallel/worker_pool.rb,
lib/omnizip/parallel/job_scheduler.rb,
lib/omnizip/parallel/parallel_extractor.rb,
lib/omnizip/parallel/parallel_compressor.rb

Overview

Parallel processing module for multi-threaded compression/extraction

Leverages Fractor for parallel processing to utilize multi-core CPUs. Provides high-level APIs for parallel compression and extraction operations.

Examples:

Auto-detect CPU count and compress in parallel

Omnizip::Parallel.compress_directory('files/', 'backup.zip')

Custom thread count

Omnizip::Parallel.compress_directory('files/', 'backup.zip', threads: 8)

Parallel extraction

Omnizip::Parallel.extract_archive('large.zip', 'output/', threads: 4)

Configure globally

Omnizip::Parallel.configure do |config|
  config.default_threads = 8
  config.queue_size = 100
  config.load_balancing = :dynamic
end

Defined Under Namespace

Classes: ClosedQueueError, JobQueue, JobScheduler, ParallelCompressor, ParallelExtractor, WorkerPool

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configObject

Global configuration



34
35
36
# File 'lib/omnizip/parallel.rb', line 34

def config
  @config
end

Class Method Details

.compress_directory(dir, output, **options) ⇒ String

Compress directory in parallel

Examples:

Omnizip::Parallel.compress_directory('files/', 'backup.zip')
Omnizip::Parallel.compress_directory('files/', 'backup.zip', threads: 8)

Parameters:

  • dir (String)

    directory path

  • output (String)

    output archive path

  • options (Hash)

    compression options

Options Hash (**options):

  • :threads (Integer)

    number of threads

  • :compression (Symbol)

    compression method

  • :level (Integer)

    compression level

  • :recursive (Boolean)

    include subdirectories

  • :progress (Proc)

    progress callback

Returns:

  • (String)

    path to created archive



70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/omnizip/parallel.rb', line 70

def compress_directory(dir, output, **options)
  threads = options.delete(:threads) || @config&.threads

  compressor = ParallelCompressor.new(@config, threads: threads)
  result = compressor.compress(dir, output, **options)

  # Print stats if verbose
  if options[:verbose] || @config&.verbose
    stats = compressor.statistics
    print_stats("Compression", stats)
  end

  result
end

.configure {|config| ... } ⇒ void

This method returns an undefined value.

Configure parallel processing globally

Examples:

Omnizip::Parallel.configure do |config|
  config.threads = 8
  config.queue_size = 100
  config.strategy = :dynamic
end

Yields:

  • (config)

    Configuration block

Yield Parameters:



48
49
50
51
52
53
# File 'lib/omnizip/parallel.rb', line 48

def configure
  @config ||= Omnizip::Models::ParallelOptions.new
  yield @config if block_given?
  @config.validate!
  @config
end

.default_configOmnizip::Models::ParallelOptions

Get default configuration

Returns:



116
117
118
# File 'lib/omnizip/parallel.rb', line 116

def default_config
  @default_config ||= Omnizip::Models::ParallelOptions.new
end

.extract_archive(archive, dest, **options) ⇒ Array<String>

Extract archive in parallel

Examples:

Omnizip::Parallel.extract_archive('large.zip', 'output/')
Omnizip::Parallel.extract_archive('large.zip', 'output/', threads: 4)

Parameters:

  • archive (String)

    archive path

  • dest (String)

    destination directory

  • options (Hash)

    extraction options

Options Hash (**options):

  • :threads (Integer)

    number of threads

  • :overwrite (Boolean)

    overwrite existing files

  • :progress (Proc)

    progress callback

Returns:

  • (Array<String>)

    extracted file paths



98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/omnizip/parallel.rb', line 98

def extract_archive(archive, dest, **options)
  threads = options.delete(:threads) || @config&.threads

  extractor = ParallelExtractor.new(@config, threads: threads)
  result = extractor.extract(archive, dest, **options)

  # Print stats if verbose
  if options[:verbose] || @config&.verbose
    stats = extractor.statistics
    print_stats("Extraction", stats)
  end

  result
end

.reset_configvoid

This method returns an undefined value.

Reset configuration to defaults



123
124
125
# File 'lib/omnizip/parallel.rb', line 123

def reset_config
  @config = Omnizip::Models::ParallelOptions.new
end

.setup_default_configObject

Initialize default configuration



148
149
150
# File 'lib/omnizip/parallel.rb', line 148

def self.setup_default_config
  @config = Omnizip::Models::ParallelOptions.new
end