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