Class: Convert2Ascii::MultiTasker
- Inherits:
-
Object
- Object
- Convert2Ascii::MultiTasker
- Defined in:
- lib/convert2ascii/multi-tasker.rb
Instance Method Summary collapse
-
#initialize(proc_tasks) ⇒ MultiTasker
constructor
A new instance of MultiTasker.
- #progress(index) ⇒ Object
- #run ⇒ Object
- #set_threads_count ⇒ Object
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 |
#run ⇒ Object
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_count ⇒ Object
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 |