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 +1 -0
- data/VERSION +1 -1
- data/lib/parallel.rb +6 -19
- data/parallel.gemspec +22 -20
- data/spec/cases/parallel_map_complex_objects.rb +8 -0
- data/spec/parallel_spec.rb +4 -0
- metadata +23 -21
data/Readme.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.15
|
data/lib/parallel.rb
CHANGED
@@ -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
|
-
|
161
|
-
output =
|
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
|
225
|
-
index =
|
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
|
-
|
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 =
|
282
|
+
dumpable = Marshal.dump(exception) rescue nil
|
296
283
|
unless dumpable
|
297
284
|
exception = RuntimeError.new("Undumpable Exception -- #{exception.inspect}")
|
298
285
|
end
|
data/parallel.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "parallel"
|
8
|
-
s.version = "0.5.
|
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-
|
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/
|
57
|
-
"spec/
|
58
|
-
"spec/cases/
|
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/
|
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/
|
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/
|
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
|
data/spec/parallel_spec.rb
CHANGED
@@ -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:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
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-
|
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/
|
98
|
-
- spec/
|
99
|
-
- spec/cases/
|
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/
|
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/
|
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
|