Class: Convert2Ascii::MultiTasker

Inherits:
Object
  • Object
show all
Defined in:
lib/convert2ascii/multi-tasker.rb

Instance Method Summary collapse

Constructor Details

#initialize(proc_tasks) ⇒ MultiTasker

Returns a new instance of MultiTasker.



7
8
9
10
11
12
# File 'lib/convert2ascii/multi-tasker.rb', line 7

def initialize(proc_tasks)
  @proc_tasks = proc_tasks
  @count = set_threads_count
  @finished = []
  @time_start = nil
end

Instance Method Details

#progress(index) ⇒ Object



20
21
22
23
# File 'lib/convert2ascii/multi-tasker.rb', line 20

def progress(index)
  @finished << index
  print(Rainbow("\rprocessing...  #{sprintf("%.2f", (1.0 * @finished.length / @proc_tasks.length) * 100)} % (time: #{sprintf("%.2f", Time.now - @time_start)} s)").green)
end

#runObject



25
26
27
28
29
30
31
32
# File 'lib/convert2ascii/multi-tasker.rb', line 25

def run
  @time_start = Time.now
  results = Parallel.map(@proc_tasks, in_processes: @count, finish: ->(item, index, result) { progress(index) }, finish_in_order: true) do |task|
    task && task.call
  end

  results
end

#set_threads_countObject



14
15
16
17
18
# File 'lib/convert2ascii/multi-tasker.rb', line 14

def set_threads_count
  cpu_threads = (Etc.nprocessors || 1)
  cpu_threads = cpu_threads > 4 ? cpu_threads - 2 : 1
  cpu_threads
end