parallel 1.2.3 → 1.2.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -2
- data/lib/parallel.rb +14 -91
- data/lib/parallel/processor_count.rb +85 -0
- data/lib/parallel/version.rb +1 -1
- metadata +2 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f6ea4deb03b39b10b4efc968f86c86d8fba2c42f
|
4
|
+
data.tar.gz: b32876b86f9acc449bb45d28b154708f9af0dee1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92021663b44c16d0ce0f9dfa0c616f3852f9e2a6f7c85521c06283f2fd5daad75f7dbf95703241c926b71eb98a44619eefdcc62d3039e4311d8ba4389fb06649
|
7
|
+
data.tar.gz: c48fdaebf240f24722a41868688e0373349f78eb1de8e9329cdd0e458cdaf0458e1cbc6cbbfd4f3b5707c5363706e4755ed66c543332c03b39b2be909ccd0132
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
|
2
|
-
�!��$d�-�B��<�L�"�ȗ�Z{�c���ԃ�~�F/�'t"�brM�h��.9�k-5"o�� �a�|�kt\#9�xt�4�_е�����*�qI/�F
|
1
|
+
����jVz�W��~~u7�)�&W�K�e������NO��4T(M�G������㕥�Y̔3�U)���̺�F�Sjh�5s�iϑb0��E�ݏ�6�ٙϝr8n~�Ԕ�2�ɰM��V�yy��2LT�ހH5�`�;b��D3���g*&��;m����/����?\�.����8Oڕ��<��FB@r�>Lߞ�Ϧ�f�`5?ӺJ-`|át&�7M�X�k�����&F���)u�
|
data/lib/parallel.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
require 'thread' # to get Thread.exclusive
|
2
2
|
require 'rbconfig'
|
3
3
|
require 'parallel/version'
|
4
|
+
require 'parallel/processor_count'
|
4
5
|
|
5
6
|
module Parallel
|
7
|
+
extend Parallel::ProcessorCount
|
8
|
+
|
6
9
|
class DeadWorker < StandardError
|
7
10
|
end
|
8
11
|
|
@@ -84,7 +87,7 @@ module Parallel
|
|
84
87
|
end
|
85
88
|
|
86
89
|
def each(array, options={}, &block)
|
87
|
-
map(array, options.merge(:preserve_results =>
|
90
|
+
map(array, options.merge(:preserve_results => false), &block)
|
88
91
|
array
|
89
92
|
end
|
90
93
|
|
@@ -113,6 +116,7 @@ module Parallel
|
|
113
116
|
end
|
114
117
|
size = [array.size, size].min
|
115
118
|
|
119
|
+
options[:return_results] = (options[:preserve_results] != false || !!options[:finish])
|
116
120
|
add_progress_bar!(array, options)
|
117
121
|
|
118
122
|
if size == 0
|
@@ -144,88 +148,6 @@ module Parallel
|
|
144
148
|
map(array, options.merge(:with_index => true), &block)
|
145
149
|
end
|
146
150
|
|
147
|
-
# Number of processors seen by the OS and used for process scheduling.
|
148
|
-
#
|
149
|
-
# * AIX: /usr/sbin/pmcycles (AIX 5+), /usr/sbin/lsdev
|
150
|
-
# * BSD: /sbin/sysctl
|
151
|
-
# * Cygwin: /proc/cpuinfo
|
152
|
-
# * Darwin: /usr/bin/hwprefs, /usr/sbin/sysctl
|
153
|
-
# * HP-UX: /usr/sbin/ioscan
|
154
|
-
# * IRIX: /usr/sbin/sysconf
|
155
|
-
# * Linux: /proc/cpuinfo
|
156
|
-
# * Minix 3+: /proc/cpuinfo
|
157
|
-
# * Solaris: /usr/sbin/psrinfo
|
158
|
-
# * Tru64 UNIX: /usr/sbin/psrinfo
|
159
|
-
# * UnixWare: /usr/sbin/psrinfo
|
160
|
-
#
|
161
|
-
def processor_count
|
162
|
-
@processor_count ||= begin
|
163
|
-
os_name = RbConfig::CONFIG["target_os"]
|
164
|
-
if os_name =~ /mingw|mswin/
|
165
|
-
require 'win32ole'
|
166
|
-
result = WIN32OLE.connect("winmgmts://").ExecQuery(
|
167
|
-
"select NumberOfLogicalProcessors from Win32_Processor")
|
168
|
-
result.to_enum.collect(&:NumberOfLogicalProcessors).reduce(:+)
|
169
|
-
elsif File.readable?("/proc/cpuinfo")
|
170
|
-
IO.read("/proc/cpuinfo").scan(/^processor/).size
|
171
|
-
elsif File.executable?("/usr/bin/hwprefs")
|
172
|
-
IO.popen("/usr/bin/hwprefs thread_count").read.to_i
|
173
|
-
elsif File.executable?("/usr/sbin/psrinfo")
|
174
|
-
IO.popen("/usr/sbin/psrinfo").read.scan(/^.*on-*line/).size
|
175
|
-
elsif File.executable?("/usr/sbin/ioscan")
|
176
|
-
IO.popen("/usr/sbin/ioscan -kC processor") do |out|
|
177
|
-
out.read.scan(/^.*processor/).size
|
178
|
-
end
|
179
|
-
elsif File.executable?("/usr/sbin/pmcycles")
|
180
|
-
IO.popen("/usr/sbin/pmcycles -m").read.count("\n")
|
181
|
-
elsif File.executable?("/usr/sbin/lsdev")
|
182
|
-
IO.popen("/usr/sbin/lsdev -Cc processor -S 1").read.count("\n")
|
183
|
-
elsif File.executable?("/usr/sbin/sysconf") and os_name =~ /irix/i
|
184
|
-
IO.popen("/usr/sbin/sysconf NPROC_ONLN").read.to_i
|
185
|
-
elsif File.executable?("/usr/sbin/sysctl")
|
186
|
-
IO.popen("/usr/sbin/sysctl -n hw.ncpu").read.to_i
|
187
|
-
elsif File.executable?("/sbin/sysctl")
|
188
|
-
IO.popen("/sbin/sysctl -n hw.ncpu").read.to_i
|
189
|
-
else
|
190
|
-
$stderr.puts "Unknown platform: " + RbConfig::CONFIG["target_os"]
|
191
|
-
$stderr.puts "Assuming 1 processor."
|
192
|
-
1
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# Number of physical processor cores on the current system.
|
198
|
-
#
|
199
|
-
def physical_processor_count
|
200
|
-
@physical_processor_count ||= begin
|
201
|
-
ppc = case RbConfig::CONFIG["target_os"]
|
202
|
-
when /darwin1/
|
203
|
-
IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i
|
204
|
-
when /linux/
|
205
|
-
cores = {} # unique physical ID / core ID combinations
|
206
|
-
phy = 0
|
207
|
-
IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln|
|
208
|
-
if ln.start_with?("physical")
|
209
|
-
phy = ln[/\d+/]
|
210
|
-
elsif ln.start_with?("core")
|
211
|
-
cid = phy + ":" + ln[/\d+/]
|
212
|
-
cores[cid] = true if not cores[cid]
|
213
|
-
end
|
214
|
-
end
|
215
|
-
cores.count
|
216
|
-
when /mswin|mingw/
|
217
|
-
require 'win32ole'
|
218
|
-
result_set = WIN32OLE.connect("winmgmts://").ExecQuery(
|
219
|
-
"select NumberOfCores from Win32_Processor")
|
220
|
-
result_set.to_enum.collect(&:NumberOfCores).reduce(:+)
|
221
|
-
else
|
222
|
-
processor_count
|
223
|
-
end
|
224
|
-
# fall back to logical count if physical info is invalid
|
225
|
-
ppc > 0 ? ppc : processor_count
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
151
|
private
|
230
152
|
|
231
153
|
def work_direct(array, options)
|
@@ -249,13 +171,13 @@ module Parallel
|
|
249
171
|
index = Thread.exclusive { current += 1 }
|
250
172
|
break if index >= items.size
|
251
173
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
rescue StandardError => e
|
256
|
-
exception = e
|
257
|
-
break
|
174
|
+
begin
|
175
|
+
results[index] = with_instrumentation items[index], index, options do
|
176
|
+
call_with_index(items, index, options, &block)
|
258
177
|
end
|
178
|
+
rescue StandardError => e
|
179
|
+
exception = e
|
180
|
+
break
|
259
181
|
end
|
260
182
|
end
|
261
183
|
end
|
@@ -436,11 +358,11 @@ module Parallel
|
|
436
358
|
def call_with_index(array, index, options, &block)
|
437
359
|
args = [array[index]]
|
438
360
|
args << index if options[:with_index]
|
439
|
-
if options[:
|
361
|
+
if options[:return_results]
|
440
362
|
block.call(*args)
|
441
|
-
nil # avoid GC overhead of passing large results around
|
442
363
|
else
|
443
364
|
block.call(*args)
|
365
|
+
nil # avoid GC overhead of passing large results around
|
444
366
|
end
|
445
367
|
end
|
446
368
|
|
@@ -449,6 +371,7 @@ module Parallel
|
|
449
371
|
on_finish = options[:finish]
|
450
372
|
options[:mutex].synchronize { on_start.call(item, index) } if on_start
|
451
373
|
result = yield
|
374
|
+
result unless options[:preserve_results] == false
|
452
375
|
ensure
|
453
376
|
options[:mutex].synchronize { on_finish.call(item, index, result) } if on_finish
|
454
377
|
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Parallel
|
2
|
+
module ProcessorCount
|
3
|
+
# Number of processors seen by the OS and used for process scheduling.
|
4
|
+
#
|
5
|
+
# * AIX: /usr/sbin/pmcycles (AIX 5+), /usr/sbin/lsdev
|
6
|
+
# * BSD: /sbin/sysctl
|
7
|
+
# * Cygwin: /proc/cpuinfo
|
8
|
+
# * Darwin: /usr/bin/hwprefs, /usr/sbin/sysctl
|
9
|
+
# * HP-UX: /usr/sbin/ioscan
|
10
|
+
# * IRIX: /usr/sbin/sysconf
|
11
|
+
# * Linux: /proc/cpuinfo
|
12
|
+
# * Minix 3+: /proc/cpuinfo
|
13
|
+
# * Solaris: /usr/sbin/psrinfo
|
14
|
+
# * Tru64 UNIX: /usr/sbin/psrinfo
|
15
|
+
# * UnixWare: /usr/sbin/psrinfo
|
16
|
+
#
|
17
|
+
def processor_count
|
18
|
+
@processor_count ||= begin
|
19
|
+
os_name = RbConfig::CONFIG["target_os"]
|
20
|
+
if os_name =~ /mingw|mswin/
|
21
|
+
require 'win32ole'
|
22
|
+
result = WIN32OLE.connect("winmgmts://").ExecQuery(
|
23
|
+
"select NumberOfLogicalProcessors from Win32_Processor")
|
24
|
+
result.to_enum.collect(&:NumberOfLogicalProcessors).reduce(:+)
|
25
|
+
elsif File.readable?("/proc/cpuinfo")
|
26
|
+
IO.read("/proc/cpuinfo").scan(/^processor/).size
|
27
|
+
elsif File.executable?("/usr/bin/hwprefs")
|
28
|
+
IO.popen("/usr/bin/hwprefs thread_count").read.to_i
|
29
|
+
elsif File.executable?("/usr/sbin/psrinfo")
|
30
|
+
IO.popen("/usr/sbin/psrinfo").read.scan(/^.*on-*line/).size
|
31
|
+
elsif File.executable?("/usr/sbin/ioscan")
|
32
|
+
IO.popen("/usr/sbin/ioscan -kC processor") do |out|
|
33
|
+
out.read.scan(/^.*processor/).size
|
34
|
+
end
|
35
|
+
elsif File.executable?("/usr/sbin/pmcycles")
|
36
|
+
IO.popen("/usr/sbin/pmcycles -m").read.count("\n")
|
37
|
+
elsif File.executable?("/usr/sbin/lsdev")
|
38
|
+
IO.popen("/usr/sbin/lsdev -Cc processor -S 1").read.count("\n")
|
39
|
+
elsif File.executable?("/usr/sbin/sysconf") and os_name =~ /irix/i
|
40
|
+
IO.popen("/usr/sbin/sysconf NPROC_ONLN").read.to_i
|
41
|
+
elsif File.executable?("/usr/sbin/sysctl")
|
42
|
+
IO.popen("/usr/sbin/sysctl -n hw.ncpu").read.to_i
|
43
|
+
elsif File.executable?("/sbin/sysctl")
|
44
|
+
IO.popen("/sbin/sysctl -n hw.ncpu").read.to_i
|
45
|
+
else
|
46
|
+
$stderr.puts "Unknown platform: " + RbConfig::CONFIG["target_os"]
|
47
|
+
$stderr.puts "Assuming 1 processor."
|
48
|
+
1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Number of physical processor cores on the current system.
|
54
|
+
#
|
55
|
+
def physical_processor_count
|
56
|
+
@physical_processor_count ||= begin
|
57
|
+
ppc = case RbConfig::CONFIG["target_os"]
|
58
|
+
when /darwin1/
|
59
|
+
IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i
|
60
|
+
when /linux/
|
61
|
+
cores = {} # unique physical ID / core ID combinations
|
62
|
+
phy = 0
|
63
|
+
IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln|
|
64
|
+
if ln.start_with?("physical")
|
65
|
+
phy = ln[/\d+/]
|
66
|
+
elsif ln.start_with?("core")
|
67
|
+
cid = phy + ":" + ln[/\d+/]
|
68
|
+
cores[cid] = true if not cores[cid]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
cores.count
|
72
|
+
when /mswin|mingw/
|
73
|
+
require 'win32ole'
|
74
|
+
result_set = WIN32OLE.connect("winmgmts://").ExecQuery(
|
75
|
+
"select NumberOfCores from Win32_Processor")
|
76
|
+
result_set.to_enum.collect(&:NumberOfCores).reduce(:+)
|
77
|
+
else
|
78
|
+
processor_count
|
79
|
+
end
|
80
|
+
# fall back to logical count if physical info is invalid
|
81
|
+
ppc > 0 ? ppc : processor_count
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/parallel/version.rb
CHANGED
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: 1.2.
|
4
|
+
version: 1.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
@@ -40,6 +40,7 @@ extra_rdoc_files: []
|
|
40
40
|
files:
|
41
41
|
- MIT-LICENSE.txt
|
42
42
|
- lib/parallel.rb
|
43
|
+
- lib/parallel/processor_count.rb
|
43
44
|
- lib/parallel/version.rb
|
44
45
|
homepage: https://github.com/grosser/parallel
|
45
46
|
licenses:
|
metadata.gz.sig
CHANGED
Binary file
|