forkandreturn 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 0.2.1 (06-10-2008)
2
+
3
+ * Fixed a bug concerning single-core machines.
4
+
5
+ * Introduced ThreadLimiter.handle_clusters.
6
+
1
7
  0.2.0 (27-07-2008)
2
8
 
3
9
  * Removed Enumerable#concurrent() and
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.2.1
@@ -23,7 +23,7 @@ module Enumerable
23
23
  # concurrent_collect() is suitable for handling a couple of very CPU intensive jobs, like parsing large XML files.
24
24
 
25
25
  def concurrent_collect(max_concurrent_workers=-1, &block)
26
- max_concurrent_workers = 0 unless ForkAndReturn::Util.multi_core? and ForkAndReturn::Util.forkable?
26
+ max_concurrent_workers = 0 unless ForkAndReturn::Util.forkable?
27
27
 
28
28
  case
29
29
  when max_concurrent_workers < 0 # No limit.
@@ -69,34 +69,12 @@ module Enumerable
69
69
  # clustered_concurrent_collect() is suitable for handling a lot of not too CPU intensive jobs.
70
70
 
71
71
  def clustered_concurrent_collect(number_of_clusters=ForkAndReturn::Util.cores, &block)
72
- number_of_clusters = 0 unless ForkAndReturn::Util.multi_core? and ForkAndReturn::Util.forkable?
72
+ number_of_clusters = 0 unless ForkAndReturn::Util.forkable?
73
73
 
74
74
  if number_of_clusters < 1
75
75
  self.concurrent_collect(number_of_clusters, &block)
76
76
  else
77
- clusters = [] # One cluster per fork.
78
- last_pos = -1
79
- res = []
80
-
81
- self.each do |object|
82
- last_pos += 1
83
-
84
- (clusters[last_pos%number_of_clusters] ||= []) << object
85
- end
86
-
87
- clusters.concurrent_collect(-1) do |cluster|
88
- cluster.collect do |object|
89
- if block.arity > 1 and object.kind_of?(Enumerable)
90
- yield(*object.to_a)
91
- else
92
- yield(object)
93
- end
94
- end + (cluster.length == clusters[0].length ? [] : [nil]) # Add padding nil, in order to be able to transpose
95
- end.transpose.each do |array|
96
- res.concat(array)
97
- end
98
-
99
- res[0..last_pos] # Remove padding nil.
77
+ ThreadLimiter.handle_clusters(self, number_of_clusters, :concurrent_collect, &block)
100
78
  end
101
79
  end
102
80
 
data/test/test.rb CHANGED
@@ -232,7 +232,6 @@ class ForkAndReturnEnumerableTest < Test::Unit::TestCase
232
232
  result = data.collect(&block)
233
233
 
234
234
  assert_equal(3, data.clustered_concurrent_collect(3, &block).sort.uniq.length)
235
-
236
235
  assert_equal(result, data.clustered_concurrent_collect(0, &block))
237
236
  assert_not_equal(result, data.clustered_concurrent_collect(3, &block))
238
237
  assert_not_equal(result, data.clustered_concurrent_collect(-1, &block))
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forkandreturn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Veenstra
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-07-27 00:00:00 +02:00
12
+ date: 2008-10-06 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: "0"
23
+ version: 0.1.2
24
24
  version:
25
25
  description: Runs a block of code in a seperate process and collects the result later. Includes a lot of convenient methods on Enumerable.
26
26
  email: forkandreturn@erikveen.dds.nl
@@ -52,7 +52,7 @@ rdoc_options:
52
52
  - CHANGELOG
53
53
  - example.txt
54
54
  - --title
55
- - forkandreturn (0.2.0)
55
+ - forkandreturn (0.2.1)
56
56
  - --main
57
57
  - README
58
58
  require_paths: