parallel 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data.tar.gz.sig CHANGED
Binary file
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- parallel (0.6.3)
4
+ parallel (0.6.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -19,7 +19,9 @@ GEM
19
19
  rspec-mocks (2.12.0)
20
20
 
21
21
  PLATFORMS
22
+ java
22
23
  ruby
24
+ x86-mingw32
23
25
 
24
26
  DEPENDENCIES
25
27
  bump
data/Readme.md CHANGED
@@ -51,6 +51,14 @@ Parallel.each(User.all, :in_processes => 8) do |user|
51
51
  end
52
52
  ```
53
53
 
54
+ ### Break
55
+
56
+ ```Ruby
57
+ Parallel.map(User.all) do |user|
58
+ raise Parallel::Break # -> stop all execution
59
+ end
60
+ ```
61
+
54
62
  Processes/Threads are workers, they grab the next piece of work when they finish
55
63
 
56
64
  ### Progress / ETA
@@ -90,6 +98,7 @@ Authors
90
98
  - [Jurriaan Pruis](http://github.com/jurriaan)
91
99
  - [Rob Worley](http://github.com/robworley)
92
100
  - [Tasveer Singh](https://github.com/tazsingh)
101
+ - [Joachim](https://github.com/jmozmoz)
93
102
 
94
103
  [Michael Grosser](http://grosser.it)<br/>
95
104
  michael@grosser.it<br/>
data/lib/parallel.rb CHANGED
@@ -6,6 +6,9 @@ module Parallel
6
6
  class DeadWorker < Exception
7
7
  end
8
8
 
9
+ class Break < Exception
10
+ end
11
+
9
12
  class ExceptionWrapper
10
13
  attr_reader :exception
11
14
  def initialize(exception)
@@ -185,9 +188,7 @@ module Parallel
185
188
  end
186
189
  end
187
190
 
188
- raise exception if exception
189
-
190
- results
191
+ handle_exception(exception, results)
191
192
  end
192
193
 
193
194
  def work_in_processes(items, options, &blk)
@@ -221,9 +222,7 @@ module Parallel
221
222
  end
222
223
  end
223
224
 
224
- raise exception if exception
225
-
226
- results
225
+ handle_exception(exception, results)
227
226
  end
228
227
 
229
228
  def create_workers(items, options, &block)
@@ -286,6 +285,12 @@ module Parallel
286
285
  end
287
286
  end
288
287
 
288
+ def handle_exception(exception, results)
289
+ return nil if exception.class == Parallel::Break
290
+ raise exception if exception
291
+ results
292
+ end
293
+
289
294
  # options is either a Integer or a Hash with :count
290
295
  def extract_count_from_options(options)
291
296
  if options.is_a?(Hash)
@@ -1,3 +1,3 @@
1
1
  module Parallel
2
- VERSION = Version = '0.6.3'
2
+ VERSION = Version = '0.6.4'
3
3
  end
data/parallel.gemspec CHANGED
@@ -9,6 +9,9 @@ Gem::Specification.new name, Parallel::VERSION do |s|
9
9
  s.homepage = "https://github.com/grosser/#{name}"
10
10
  s.files = `git ls-files`.split("\n")
11
11
  s.license = "MIT"
12
- s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem")
13
- s.cert_chain = ["gem-public_cert.pem"]
12
+ key = File.expand_path("~/.ssh/gem-private_key.pem")
13
+ if File.exist?(key)
14
+ s.signing_key = key
15
+ s.cert_chain = ["gem-public_cert.pem"]
16
+ end
14
17
  end
@@ -0,0 +1,10 @@
1
+ require File.expand_path('spec/spec_helper')
2
+
3
+ result = Parallel.map(1..100, :in_processes => 4) do |x|
4
+ sleep 0.1 # so all processes get started
5
+ print x
6
+ raise Parallel::Break if x == 1
7
+ sleep 0.1 # so no now work gets queued before Parallel::Break is raised
8
+ x
9
+ end
10
+ print " Parallel::Break raised - result #{result.inspect}"
@@ -0,0 +1,9 @@
1
+ require File.expand_path('spec/spec_helper')
2
+
3
+ result = Parallel.map(1..100, :in_threads => 4) do |x|
4
+ sleep 0.1 # so all threads get started
5
+ print x
6
+ raise Parallel::Break if x == 1
7
+ sleep 0.1 # so no now work gets queued before Parallel::Break is raised
8
+ end
9
+ print " Parallel::Break raised - result #{result.inspect}"
@@ -165,6 +165,14 @@ describe Parallel do
165
165
  `ruby spec/cases/map_with_threads_and_exceptions.rb 2>&1`.should =~ /^\d{0,4} raised$/
166
166
  end
167
167
 
168
+ it 'stops all workers when one raises Break in process' do
169
+ `ruby spec/cases/map_with_processes_and_break.rb 2>&1`.should =~ /^\d{4} Parallel::Break raised - result nil$/
170
+ end
171
+
172
+ it 'stops all workers when one raises Break in thread' do
173
+ `ruby spec/cases/map_with_threads_and_break.rb 2>&1`.should =~ /^\d{4} Parallel::Break raised - result nil$/
174
+ end
175
+
168
176
  it "can run with 0 threads" do
169
177
  Thread.should_not_receive(:exclusive)
170
178
  Parallel.map([1,2,3,4,5,6,7,8,9], :in_threads => 0){|x| x+2 }.should == [3,4,5,6,7,8,9,10,11]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 0.6.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,7 +36,7 @@ cert_chain:
36
36
  VHNmKzZNYWVud0FNa0FnSGRzd0dzSnp0T25ObkJhM0YKeTBrQ1NXbUs2RCt4
37
37
  L1NiZlM2cjdLZTA3TVJxemlKZEI5R3VFMSswY0lSdUZoOEVRK0xONkhYQ0tN
38
38
  NXBvbi9HVQp5Y3dNWGZsMAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
39
- date: 2013-03-19 00:00:00.000000000 Z
39
+ date: 2013-03-30 00:00:00.000000000 Z
40
40
  dependencies: []
41
41
  description:
42
42
  email: michael@grosser.it
@@ -63,7 +63,9 @@ files:
63
63
  - spec/cases/map_with_killed_worker_before_read.rb
64
64
  - spec/cases/map_with_killed_worker_before_write.rb
65
65
  - spec/cases/map_with_nested_arrays_and_nil.rb
66
+ - spec/cases/map_with_processes_and_break.rb
66
67
  - spec/cases/map_with_processes_and_exceptions.rb
68
+ - spec/cases/map_with_threads_and_break.rb
67
69
  - spec/cases/map_with_threads_and_exceptions.rb
68
70
  - spec/cases/no_dump_with_each.rb
69
71
  - spec/cases/parallel_high_fork_rate.rb
@@ -97,7 +99,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
97
99
  version: '0'
98
100
  segments:
99
101
  - 0
100
- hash: -2048790517211853939
102
+ hash: -2205036652942743668
101
103
  required_rubygems_version: !ruby/object:Gem::Requirement
102
104
  none: false
103
105
  requirements:
@@ -106,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
108
  version: '0'
107
109
  segments:
108
110
  - 0
109
- hash: -2048790517211853939
111
+ hash: -2205036652942743668
110
112
  requirements: []
111
113
  rubyforge_project:
112
114
  rubygems_version: 1.8.25
metadata.gz.sig CHANGED
Binary file