parallel 1.6.0 → 1.6.1
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.
- checksums.yaml +4 -4
- data/lib/parallel.rb +9 -2
- data/lib/parallel/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 70d72f94264963ccffda50fb09447556b91cb288
|
4
|
+
data.tar.gz: 5941637ecb8f9252001ac5e73fee8abd038dddb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 307b3c2200b61a209480844057b2778bd53c342af0ef63adb922daeb145ebeba0af27cf8fc826d90d126dca4e293b80c88fe8e7e496c7e91aea3dfb74e550a1f
|
7
|
+
data.tar.gz: b4a12fcac78745faa6027000375e4f395f9b478fe912d18baefdc584152198e3e97fba56020f8a7cfac0f66c59f8eb05ec65fd8019275e4a4bad3232ea4aaa07
|
data/lib/parallel.rb
CHANGED
@@ -99,10 +99,13 @@ module Parallel
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
+
# generate item that is sent to workers
|
103
|
+
# just index is faster + less likely to blow up with unserializable errors
|
102
104
|
def pack(item, index)
|
103
105
|
producer? ? [item, index] : index
|
104
106
|
end
|
105
107
|
|
108
|
+
# unpack item that is sent to workers
|
106
109
|
def unpack(data)
|
107
110
|
producer? ? data : [@source[data], data]
|
108
111
|
end
|
@@ -273,6 +276,7 @@ module Parallel
|
|
273
276
|
def work_in_threads(job_factory, options, &block)
|
274
277
|
raise "interrupt_signal is no longer supported for threads" if options[:interrupt_signal]
|
275
278
|
results = []
|
279
|
+
results_mutex = Mutex.new # arrays are not thread-safe on jRuby
|
276
280
|
exception = nil
|
277
281
|
|
278
282
|
in_threads(options) do
|
@@ -280,9 +284,10 @@ module Parallel
|
|
280
284
|
while !exception && set = job_factory.next
|
281
285
|
begin
|
282
286
|
item, index = set
|
283
|
-
|
287
|
+
result = with_instrumentation item, index, options do
|
284
288
|
call_with_index(item, index, options, &block)
|
285
289
|
end
|
290
|
+
results_mutex.synchronize { results[index] = result }
|
286
291
|
rescue StandardError => e
|
287
292
|
exception = e
|
288
293
|
end
|
@@ -295,6 +300,7 @@ module Parallel
|
|
295
300
|
def work_in_processes(job_factory, options, &blk)
|
296
301
|
workers = create_workers(job_factory, options, &blk)
|
297
302
|
results = []
|
303
|
+
results_mutex = Mutex.new # arrays are not thread-safe
|
298
304
|
exception = nil
|
299
305
|
|
300
306
|
UserInterruptHandler.kill_on_ctrl_c(workers.map(&:pid), options) do
|
@@ -309,9 +315,10 @@ module Parallel
|
|
309
315
|
break unless index
|
310
316
|
|
311
317
|
begin
|
312
|
-
|
318
|
+
result = with_instrumentation item, index, options do
|
313
319
|
worker.work(job_factory.pack(item, index))
|
314
320
|
end
|
321
|
+
results_mutex.synchronize { results[index] = result } # arrays are not threads safe on jRuby
|
315
322
|
rescue StandardError => e
|
316
323
|
exception = e
|
317
324
|
if Parallel::Kill === exception
|
data/lib/parallel/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: michael@grosser.it
|