diff --git a/spec/cases/count_open_pipes.rb b/spec/cases/count_open_pipes.rb index 2649966..7565e66 100644 --- a/spec/cases/count_open_pipes.rb +++ b/spec/cases/count_open_pipes.rb @@ -1,6 +1,21 @@ # frozen_string_literal: true require './spec/cases/helper' -count = ->(*) { `lsof -l | grep pipe | wc -l`.to_i } +count = ->(*) { Dir.children("/dev/fd").size } + +if ENV["SELF_TEST"] + # verify that count detects newly opened pipes + create = 5 + before = count.call + pipes = create.times.map { IO.pipe } + after = count.call + expected = before + (create * 2) + raise "expected #{expected} fds but got #{after}" unless after == expected + pipes.each do |r, w| + r.close + w.close + end +end + start = count.call results = Parallel.map(Array.new(20), in_processes: 20, &count) puts results.max - start diff --git a/spec/cases/helper.rb b/spec/cases/helper.rb index b2f9b92..ac223e4 100644 --- a/spec/cases/helper.rb +++ b/spec/cases/helper.rb @@ -10,7 +10,7 @@ def process_diff yield - sleep 1 + sleep 0.5 processes_after = `#{cmd}`.to_i diff --git a/spec/cases/parallel_high_fork_rate.rb b/spec/cases/parallel_high_fork_rate.rb index 1f3b4e7..4b93b23 100644 --- a/spec/cases/parallel_high_fork_rate.rb +++ b/spec/cases/parallel_high_fork_rate.rb @@ -2,6 +2,6 @@ require './spec/cases/helper' Parallel.each((0..200).to_a, in_processes: 200) do |_x| - sleep 1 + sleep 0.1 end print 'OK' diff --git a/spec/cases/parallel_map_uneven.rb b/spec/cases/parallel_map_uneven.rb index cb18f9e..4ef073d 100644 --- a/spec/cases/parallel_map_uneven.rb +++ b/spec/cases/parallel_map_uneven.rb @@ -2,5 +2,5 @@ require './spec/cases/helper' Parallel.map([1, 2, 1, 2]) do |x| - sleep 2 if x == 1 + sleep 1 if x == 1 end diff --git a/spec/cases/parallel_sleeping_2.rb b/spec/cases/parallel_sleeping_2.rb index c2c42c3..051b676 100644 --- a/spec/cases/parallel_sleeping_2.rb +++ b/spec/cases/parallel_sleeping_2.rb @@ -2,5 +2,5 @@ require './spec/cases/helper' Parallel.in_processes(5) do - sleep 2 + sleep 1 end diff --git a/spec/cases/progress.rb b/spec/cases/progress.rb index 5f98f1d..a324660 100644 --- a/spec/cases/progress.rb +++ b/spec/cases/progress.rb @@ -2,6 +2,6 @@ require './spec/cases/helper' title = (ENV["TITLE"] == "true" ? true : "Doing stuff") -Parallel.map(1..50, progress: title) do +Parallel.map(1..10, progress: title) do sleep 1 if $stdout.tty? # for debugging end diff --git a/spec/cases/progress_with_finish.rb b/spec/cases/progress_with_finish.rb index 0aed71f..437f520 100644 --- a/spec/cases/progress_with_finish.rb +++ b/spec/cases/progress_with_finish.rb @@ -4,7 +4,7 @@ sum = 0 finish = ->(_item, _index, result) { sum += result } -Parallel.map(1..50, progress: "Doing stuff", finish: finish) do +Parallel.map(1..10, progress: "Doing stuff", finish: finish) do sleep 1 if $stdout.tty? # for debugging 2 end diff --git a/spec/cases/with_worker_number.rb b/spec/cases/with_worker_number.rb index 8a9976e..f7fdff8 100644 --- a/spec/cases/with_worker_number.rb +++ b/spec/cases/with_worker_number.rb @@ -4,7 +4,7 @@ method = ENV.fetch('METHOD') in_worker_type = :"in_#{ENV.fetch('WORKER_TYPE')}" -Parallel.public_send(method, 1..100, in_worker_type => 4) do - sleep 0.1 # so all workers get started +Parallel.public_send(method, 1..20, in_worker_type => 4) do + sleep 0.02 # so all workers get started print Parallel.worker_number end diff --git a/spec/parallel_spec.rb b/spec/parallel_spec.rb index d2093fa..fcb330a 100644 --- a/spec/parallel_spec.rb +++ b/spec/parallel_spec.rb @@ -161,7 +161,7 @@ def cpus it "saves time" do time_taken do ruby("spec/cases/parallel_sleeping_2.rb") - end.should < 3.5 + end.should < 2.5 end it "raises when one of the processes raises" do @@ -203,12 +203,12 @@ def cpus describe ".in_threads" do it "saves time" do time_taken do - Parallel.in_threads(3) { sleep 2 } - end.should < 3 + Parallel.in_threads(3) { sleep 1 } + end.should < 2 end it "does not create new processes" do - -> { Thread.new { Parallel.in_threads(2) { sleep 1 } } }.should_not(change { `ps`.split("\n").size }) + -> { Thread.new { Parallel.in_threads(2) { sleep 0.5 } } }.should_not(change { `ps`.split("\n").size }) end it "returns results as array" do @@ -245,7 +245,7 @@ def cpus it "starts new process immediately when old exists" do time_taken do ruby("spec/cases/parallel_map_uneven.rb") - end.should <= 3.5 + end.should <= 2.5 end it "does not flatten results" do @@ -661,7 +661,7 @@ def cpus ruby("spec/cases/progress_with_finish.rb 2>&1").strip.sub(/=+/, '==').gsub( /\n+/, "\n" - ).should == "Doing stuff: |==|\n100" + ).should == "Doing stuff: |==|\n20" end it "takes the title from :progress[:title] and passes options along" do