parallel 0.8.4 → 0.9.0
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 +1 -0
- data.tar.gz.sig +0 -0
- data/lib/parallel.rb +78 -37
- data/lib/parallel/version.rb +1 -1
- metadata +24 -3
- 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: 6c50a58c0a8fadc833892eba309cad741926e435
|
4
|
+
data.tar.gz: 54c53c532e86976aa6e478a16a74216793929669
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8cde8af228e3aa3b16be2d510de4332e61e6c569dd3dd927b8c87640b625fc8416962d9344a83e408578de14d5370d4b9b4c043a2e165cf395d9835be4c0f7e1
|
7
|
+
data.tar.gz: 342c63a9672f02c3b46cb30fffb72f646a98d49f3041611a128139a4ea4333b0c0143e2f0340577cec576a4b779fdd5aafcb58ec738078bd919b62506917fdb7
|
checksums.yaml.gz.sig
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
����[ő6£�&�ɠ�
|
data.tar.gz.sig
ADDED
Binary file
|
data/lib/parallel.rb
CHANGED
@@ -48,7 +48,7 @@ module Parallel
|
|
48
48
|
begin
|
49
49
|
Marshal.load(read)
|
50
50
|
rescue EOFError
|
51
|
-
raise
|
51
|
+
raise DeadWorker
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -89,18 +89,26 @@ module Parallel
|
|
89
89
|
def map(array, options = {}, &block)
|
90
90
|
array = array.to_a # turn Range and other Enumerable-s into an Array
|
91
91
|
|
92
|
-
if options[:
|
92
|
+
if RUBY_PLATFORM =~ /java/ and not options[:in_processes]
|
93
|
+
method = :in_threads
|
94
|
+
size = options[method] || processor_count
|
95
|
+
elsif options[:in_threads]
|
93
96
|
method = :in_threads
|
94
97
|
size = options[method]
|
95
98
|
else
|
96
99
|
method = :in_processes
|
97
|
-
|
100
|
+
if Process.respond_to?(:fork)
|
101
|
+
size = options[method] || processor_count
|
102
|
+
else
|
103
|
+
$stderr.puts "Warning: Process.fork is not supported by this Ruby"
|
104
|
+
size = 0
|
105
|
+
end
|
98
106
|
end
|
99
107
|
size = [array.size, size].min
|
100
108
|
|
101
|
-
|
102
|
-
|
103
|
-
|
109
|
+
if size == 0
|
110
|
+
work_direct(array, options, &block)
|
111
|
+
elsif method == :in_threads
|
104
112
|
work_in_threads(array, options.merge(:count => size), &block)
|
105
113
|
else
|
106
114
|
work_in_processes(array, options.merge(:count => size), &block)
|
@@ -111,43 +119,80 @@ module Parallel
|
|
111
119
|
map(array, options.merge(:with_index => true), &block)
|
112
120
|
end
|
113
121
|
|
122
|
+
# Number of processors seen by the OS and used for process scheduling.
|
123
|
+
#
|
124
|
+
# * AIX: /usr/sbin/pmcycles (AIX 5+), /usr/sbin/lsdev
|
125
|
+
# * BSD: /sbin/sysctl
|
126
|
+
# * Cygwin: /proc/cpuinfo
|
127
|
+
# * Darwin: /usr/bin/hwprefs, /usr/sbin/sysctl
|
128
|
+
# * HP-UX: /usr/sbin/ioscan
|
129
|
+
# * IRIX: /usr/sbin/sysconf
|
130
|
+
# * Linux: /proc/cpuinfo
|
131
|
+
# * Minix 3+: /proc/cpuinfo
|
132
|
+
# * Solaris: /usr/sbin/psrinfo
|
133
|
+
# * Tru64 UNIX: /usr/sbin/psrinfo
|
134
|
+
# * UnixWare: /usr/sbin/psrinfo
|
135
|
+
#
|
114
136
|
def processor_count
|
115
|
-
@processor_count ||=
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
137
|
+
@processor_count ||= begin
|
138
|
+
os_name = RbConfig::CONFIG["target_os"]
|
139
|
+
if os_name =~ /mingw|mswin/
|
140
|
+
require 'win32ole'
|
141
|
+
result = WIN32OLE.connect("winmgmts://").ExecQuery(
|
142
|
+
"select NumberOfLogicalProcessors from Win32_Processor")
|
143
|
+
result.to_enum.collect(&:NumberOfLogicalProcessors).reduce(:+)
|
144
|
+
elsif File.readable?("/proc/cpuinfo")
|
145
|
+
IO.read("/proc/cpuinfo").scan(/^processor/).size
|
146
|
+
elsif File.executable?("/usr/bin/hwprefs")
|
147
|
+
IO.popen(%w[/usr/bin/hwprefs thread_count]).read.to_i
|
148
|
+
elsif File.executable?("/usr/sbin/psrinfo")
|
149
|
+
IO.popen("/usr/sbin/psrinfo").read.scan(/^.*on-*line/).size
|
150
|
+
elsif File.executable?("/usr/sbin/ioscan")
|
151
|
+
IO.popen(%w[/usr/sbin/ioscan -kC processor]) do |out|
|
152
|
+
out.read.scan(/^.*processor/).size
|
153
|
+
end
|
154
|
+
elsif File.executable?("/usr/sbin/pmcycles")
|
155
|
+
IO.popen(%w[/usr/sbin/pmcycles -m]).read.count("\n")
|
156
|
+
elsif File.executable?("/usr/sbin/lsdev")
|
157
|
+
IO.popen(%w[/usr/sbin/lsdev -Cc processor -S 1]).read.count("\n")
|
158
|
+
elsif File.executable?("/usr/sbin/sysconf") and os_name =~ /irix/i
|
159
|
+
IO.popen(%w[/usr/sbin/sysconf NPROC_ONLN]).read.to_i
|
160
|
+
elsif File.executable?("/usr/sbin/sysctl")
|
161
|
+
IO.popen(%w[/usr/sbin/sysctl -n hw.ncpu]).read.to_i
|
162
|
+
elsif File.executable?("/sbin/sysctl")
|
163
|
+
IO.popen(%w[/sbin/sysctl -n hw.ncpu]).read.to_i
|
164
|
+
else
|
165
|
+
$stderr.puts "Unknown platform: " + RbConfig::CONFIG["target_os"]
|
166
|
+
$stderr.puts "Assuming 1 processor."
|
167
|
+
1
|
168
|
+
end
|
134
169
|
end
|
135
170
|
end
|
136
171
|
|
172
|
+
# Number of physical processor cores on the current system.
|
173
|
+
#
|
137
174
|
def physical_processor_count
|
138
175
|
@physical_processor_count ||= begin
|
139
|
-
ppc = case RbConfig::CONFIG[
|
176
|
+
ppc = case RbConfig::CONFIG["target_os"]
|
140
177
|
when /darwin1/
|
141
|
-
|
178
|
+
IO.popen(%w[/usr/sbin/sysctl -n hw.physicalcpu]).read.to_i
|
142
179
|
when /linux/
|
143
|
-
|
144
|
-
|
145
|
-
|
180
|
+
cores = {} # unique physical ID / core ID combinations
|
181
|
+
phy = 0
|
182
|
+
IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln|
|
183
|
+
if ln.start_with?("physical")
|
184
|
+
phy = ln[/\d+/]
|
185
|
+
elsif ln.start_with?("core")
|
186
|
+
cid = phy + ":" + ln[/\d+/]
|
187
|
+
cores[cid] = true if not cores[cid]
|
188
|
+
end
|
189
|
+
end
|
190
|
+
cores.count
|
146
191
|
when /mswin|mingw/
|
147
192
|
require 'win32ole'
|
148
|
-
|
149
|
-
|
150
|
-
|
193
|
+
result_set = WIN32OLE.connect("winmgmts://").ExecQuery(
|
194
|
+
"select NumberOfCores from Win32_Processor")
|
195
|
+
result_set.to_enum.collect(&:NumberOfCores).reduce(:+)
|
151
196
|
else
|
152
197
|
processor_count
|
153
198
|
end
|
@@ -166,10 +211,6 @@ module Parallel
|
|
166
211
|
results
|
167
212
|
end
|
168
213
|
|
169
|
-
def hwprefs_available?
|
170
|
-
`which hwprefs` != ''
|
171
|
-
end
|
172
|
-
|
173
214
|
def work_in_threads(items, options, &block)
|
174
215
|
results = []
|
175
216
|
current = -1
|
data/lib/parallel/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parallel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Grosser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDMjCCAhqgAwIBAgIBADANBgkqhkiG9w0BAQUFADA/MRAwDgYDVQQDDAdtaWNo
|
14
|
+
YWVsMRcwFQYKCZImiZPyLGQBGRYHZ3Jvc3NlcjESMBAGCgmSJomT8ixkARkWAml0
|
15
|
+
MB4XDTEzMDIwMzE4MTMxMVoXDTE0MDIwMzE4MTMxMVowPzEQMA4GA1UEAwwHbWlj
|
16
|
+
aGFlbDEXMBUGCgmSJomT8ixkARkWB2dyb3NzZXIxEjAQBgoJkiaJk/IsZAEZFgJp
|
17
|
+
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMorXo/hgbUq97+kII9H
|
18
|
+
MsQcLdC/7wQ1ZP2OshVHPkeP0qH8MBHGg6eYisOX2ubNagF9YTCZWnhrdKrwpLOO
|
19
|
+
cPLaZbjUjljJ3cQR3B8Yn1veV5IhG86QseTBjymzJWsLpqJ1UZGpfB9tXcsFtuxO
|
20
|
+
6vHvcIHdzvc/OUkICttLbH+1qb6rsHUceqh+JrH4GrsJ5H4hAfIdyS2XMK7YRKbh
|
21
|
+
h+IBu6dFWJJByzFsYmV1PDXln3UBmgAt65cmCu4qPfThioCGDzbSJrGDGLmw/pFX
|
22
|
+
FPpVCm1zgYSb1v6Qnf3cgXa2f2wYGm17+zAVyIDpwryFru9yF/jJxE38z/DRsd9R
|
23
|
+
/88CAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQUsiNnXHtKeMYYcr4yJVmQ
|
24
|
+
WONL+IwwCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQAlyN7kKo/NQCQ0
|
25
|
+
AOzZLZ3WAePvStkCFIJ53tsv5Kyo4pMAllv+BgPzzBt7qi605mFSL6zBd9uLou+W
|
26
|
+
Co3s48p1dy7CjjAfVQdmVNHF3MwXtfC2OEyvSQPi4xKR8iba8wa3xp9LVo1PuLpw
|
27
|
+
/6DsrChWw74HfsJN6qJOK684hJeT8lBYAUfiC3wD0owoPSg+XtyAAddisR+KV5Y1
|
28
|
+
NmVHuLtQcNTZy+gRht3ahJRMuC6QyLmkTsf+6MaenwAMkAgHdswGsJztOnNnBa3F
|
29
|
+
y0kCSWmK6D+x/SbfS6r7Ke07MRqziJdB9GuE1+0cIRuFh8EQ+LN6HXCKM5pon/GU
|
30
|
+
ycwMXfl0
|
31
|
+
-----END CERTIFICATE-----
|
32
|
+
date: 2013-10-16 00:00:00.000000000 Z
|
12
33
|
dependencies: []
|
13
34
|
description:
|
14
35
|
email: michael@grosser.it
|
metadata.gz.sig
ADDED
Binary file
|