parallel 0.5.14 → 0.5.15

Sign up to get free protection for your applications and to get access to all the features.
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