parallel 0.5.14 → 0.5.15

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/Readme.md CHANGED
@@ -63,6 +63,7 @@ Authors
63
63
  - [brian p o'rourke](https://github.com/bpo)
64
64
  - [Norio Sato]
65
65
  - [Neal Stewart](https://github.com/n-time)
66
+ - [Jurriaan Pruis](http://github.com/jurriaan)
66
67
 
67
68
  [Michael Grosser](http://grosser.it)<br/>
68
69
  michael@grosser.it<br/>
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.14
1
+ 0.5.15
@@ -1,5 +1,4 @@
1
1
  require 'thread' # to get Thread.exclusive
2
- require 'base64'
3
2
  require 'rbconfig'
4
3
 
5
4
  class Parallel
@@ -157,8 +156,8 @@ class Parallel
157
156
  index = Thread.exclusive{ current_index += 1 }
158
157
  break if index >= items.size
159
158
 
160
- write_to_pipe(worker[:write], index)
161
- output = decode(worker[:read].gets.chomp)
159
+ Marshal.dump(index, worker[:write])
160
+ output = Marshal.load(worker[:read])
162
161
 
163
162
  if ExceptionWrapper === output
164
163
  exception = output.exception
@@ -221,22 +220,18 @@ class Parallel
221
220
  end
222
221
 
223
222
  def self.process_incoming_jobs(read, write, items, options, &block)
224
- while input = read.gets and input != "\n"
225
- index = decode(input.chomp)
223
+ while !read.eof?
224
+ index = Marshal.load(read)
226
225
  begin
227
226
  result = call_with_index(items, index, options, &block)
228
227
  result = nil if options[:preserve_results] == false
229
228
  rescue Exception => e
230
229
  result = ExceptionWrapper.new(e)
231
230
  end
232
- write_to_pipe(write, result)
231
+ Marshal.dump(result, write)
233
232
  end
234
233
  end
235
234
 
236
- def self.write_to_pipe(pipe, item)
237
- pipe.write(encode(item))
238
- end
239
-
240
235
  def self.wait_for_threads(threads)
241
236
  threads.compact.each do |t|
242
237
  begin
@@ -255,14 +250,6 @@ class Parallel
255
250
  end
256
251
  end
257
252
 
258
- def self.encode(obj)
259
- Base64.encode64(Marshal.dump(obj)).split("\n").join + "\n"
260
- end
261
-
262
- def self.decode(str)
263
- Marshal.load(Base64.decode64(str))
264
- end
265
-
266
253
  # options is either a Integer or a Hash with :count
267
254
  def self.extract_count_from_options(options)
268
255
  if options.is_a?(Hash)
@@ -292,7 +279,7 @@ class Parallel
292
279
  class ExceptionWrapper
293
280
  attr_reader :exception
294
281
  def initialize(exception)
295
- dumpable = Parallel.encode(exception) rescue nil
282
+ dumpable = Marshal.dump(exception) rescue nil
296
283
  unless dumpable
297
284
  exception = RuntimeError.new("Undumpable Exception -- #{exception.inspect}")
298
285
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "parallel"
8
- s.version = "0.5.14"
8
+ s.version = "0.5.15"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = "2012-02-07"
12
+ s.date = "2012-02-24"
13
13
  s.email = "grosser.michael@gmail.com"
14
14
  s.files = [
15
15
  "Gemfile",
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "spec/cases/parallel_high_fork_rate.rb",
34
34
  "spec/cases/parallel_influence_outside_data.rb",
35
35
  "spec/cases/parallel_map.rb",
36
+ "spec/cases/parallel_map_complex_objects.rb",
36
37
  "spec/cases/parallel_map_range.rb",
37
38
  "spec/cases/parallel_map_sleeping.rb",
38
39
  "spec/cases/parallel_map_uneven.rb",
@@ -53,32 +54,33 @@ Gem::Specification.new do |s|
53
54
  s.rubygems_version = "1.8.15"
54
55
  s.summary = "Run any kind of code in parallel processes"
55
56
  s.test_files = [
56
- "spec/spec_helper.rb",
57
- "spec/parallel_spec.rb",
58
- "spec/cases/map_with_index_empty.rb",
59
- "spec/cases/parallel_map_range.rb",
60
- "spec/cases/map_with_threads_and_exceptions.rb",
57
+ "spec/cases/host_os_override_processor_count.rb",
58
+ "spec/cases/parallel_raise_undumpable.rb",
59
+ "spec/cases/parallel_map_complex_objects.rb",
61
60
  "spec/cases/parallel_influence_outside_data.rb",
62
- "spec/cases/count_open_pipes.rb",
63
- "spec/cases/parallel_with_set_processes.rb",
64
- "spec/cases/parallel_with_detected_cpus.rb",
65
61
  "spec/cases/parallel_start_and_kill.rb",
66
- "spec/cases/parallel_raise_undumpable.rb",
67
- "spec/cases/parallel_sleeping_2.rb",
68
- "spec/cases/host_os_override_processor_count.rb",
69
62
  "spec/cases/map_with_index.rb",
63
+ "spec/cases/each.rb",
70
64
  "spec/cases/map_with_nested_arrays_and_nil.rb",
71
- "spec/cases/parallel_map_uneven.rb",
72
- "spec/cases/parallel_map_sleeping.rb",
73
- "spec/cases/each_with_index.rb",
74
65
  "spec/cases/map_with_processes_and_exceptions.rb",
75
- "spec/cases/no_dump_with_each.rb",
66
+ "spec/cases/parallel_map_sleeping.rb",
76
67
  "spec/cases/parallel_raise.rb",
68
+ "spec/cases/parallel_map_range.rb",
69
+ "spec/cases/each_with_index.rb",
70
+ "spec/cases/map_with_threads_and_exceptions.rb",
71
+ "spec/cases/parallel_sleeping_2.rb",
72
+ "spec/cases/parallel_map_uneven.rb",
77
73
  "spec/cases/parallel_high_fork_rate.rb",
78
- "spec/cases/parallel_map.rb",
79
- "spec/cases/each.rb",
74
+ "spec/cases/parallel_with_set_processes.rb",
80
75
  "spec/cases/closes_processes_at_runtime.rb",
81
- "spec/cases/parallel_with_nil_uses_detected_cpus.rb"
76
+ "spec/cases/parallel_with_detected_cpus.rb",
77
+ "spec/cases/map_with_index_empty.rb",
78
+ "spec/cases/parallel_with_nil_uses_detected_cpus.rb",
79
+ "spec/cases/parallel_map.rb",
80
+ "spec/cases/no_dump_with_each.rb",
81
+ "spec/cases/count_open_pipes.rb",
82
+ "spec/parallel_spec.rb",
83
+ "spec/spec_helper.rb"
82
84
  ]
83
85
 
84
86
  if s.respond_to? :specification_version then
@@ -0,0 +1,8 @@
1
+ require File.expand_path('spec/spec_helper')
2
+
3
+ object = ["\nasd#{File.read('Gemfile')}--#{File.read('Rakefile')}"*100, 12345, {:b=>:a}]
4
+
5
+ result = Parallel.map([1,2]) do |x|
6
+ object
7
+ end
8
+ print 'YES' if result.inspect == [object, object].inspect
@@ -131,6 +131,10 @@ describe Parallel do
131
131
  `ruby spec/cases/parallel_map.rb`.should == "-a- -b- -c- -d-"
132
132
  end
133
133
 
134
+ it "can dump/load complex objects" do
135
+ `ruby spec/cases/parallel_map_complex_objects.rb`.should == "YES"
136
+ end
137
+
134
138
  it "starts new process imediatly when old exists" do
135
139
  time_taken{
136
140
  `ruby spec/cases/parallel_map_uneven.rb`
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: parallel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 14
10
- version: 0.5.14
9
+ - 15
10
+ version: 0.5.15
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Grosser
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-07 00:00:00 Z
18
+ date: 2012-02-24 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description:
@@ -48,6 +48,7 @@ files:
48
48
  - spec/cases/parallel_high_fork_rate.rb
49
49
  - spec/cases/parallel_influence_outside_data.rb
50
50
  - spec/cases/parallel_map.rb
51
+ - spec/cases/parallel_map_complex_objects.rb
51
52
  - spec/cases/parallel_map_range.rb
52
53
  - spec/cases/parallel_map_sleeping.rb
53
54
  - spec/cases/parallel_map_uneven.rb
@@ -94,29 +95,30 @@ signing_key:
94
95
  specification_version: 3
95
96
  summary: Run any kind of code in parallel processes
96
97
  test_files:
97
- - spec/spec_helper.rb
98
- - spec/parallel_spec.rb
99
- - spec/cases/map_with_index_empty.rb
100
- - spec/cases/parallel_map_range.rb
101
- - spec/cases/map_with_threads_and_exceptions.rb
98
+ - spec/cases/host_os_override_processor_count.rb
99
+ - spec/cases/parallel_raise_undumpable.rb
100
+ - spec/cases/parallel_map_complex_objects.rb
102
101
  - spec/cases/parallel_influence_outside_data.rb
103
- - spec/cases/count_open_pipes.rb
104
- - spec/cases/parallel_with_set_processes.rb
105
- - spec/cases/parallel_with_detected_cpus.rb
106
102
  - spec/cases/parallel_start_and_kill.rb
107
- - spec/cases/parallel_raise_undumpable.rb
108
- - spec/cases/parallel_sleeping_2.rb
109
- - spec/cases/host_os_override_processor_count.rb
110
103
  - spec/cases/map_with_index.rb
104
+ - spec/cases/each.rb
111
105
  - spec/cases/map_with_nested_arrays_and_nil.rb
112
- - spec/cases/parallel_map_uneven.rb
113
- - spec/cases/parallel_map_sleeping.rb
114
- - spec/cases/each_with_index.rb
115
106
  - spec/cases/map_with_processes_and_exceptions.rb
116
- - spec/cases/no_dump_with_each.rb
107
+ - spec/cases/parallel_map_sleeping.rb
117
108
  - spec/cases/parallel_raise.rb
109
+ - spec/cases/parallel_map_range.rb
110
+ - spec/cases/each_with_index.rb
111
+ - spec/cases/map_with_threads_and_exceptions.rb
112
+ - spec/cases/parallel_sleeping_2.rb
113
+ - spec/cases/parallel_map_uneven.rb
118
114
  - spec/cases/parallel_high_fork_rate.rb
119
- - spec/cases/parallel_map.rb
120
- - spec/cases/each.rb
115
+ - spec/cases/parallel_with_set_processes.rb
121
116
  - spec/cases/closes_processes_at_runtime.rb
117
+ - spec/cases/parallel_with_detected_cpus.rb
118
+ - spec/cases/map_with_index_empty.rb
122
119
  - spec/cases/parallel_with_nil_uses_detected_cpus.rb
120
+ - spec/cases/parallel_map.rb
121
+ - spec/cases/no_dump_with_each.rb
122
+ - spec/cases/count_open_pipes.rb
123
+ - spec/parallel_spec.rb
124
+ - spec/spec_helper.rb