work_queue 2.5.2 → 2.5.3
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.
- data/README.rdoc +1 -1
- data/lib/test.rb +12 -0
- data/lib/work_queue.rb +5 -5
- data/test/tc_work_queue.rb +12 -12
- metadata +5 -4
data/README.rdoc
CHANGED
data/lib/test.rb
ADDED
data/lib/work_queue.rb
CHANGED
@@ -5,7 +5,7 @@ require 'monitor'
|
|
5
5
|
# A tunable work queue, designed to coordinate work between a producer and a pool of worker threads.
|
6
6
|
#
|
7
7
|
class WorkQueue
|
8
|
-
VERSION = "2.5.
|
8
|
+
VERSION = "2.5.3"
|
9
9
|
|
10
10
|
##
|
11
11
|
# Creates an empty work queue with the desired parameters.
|
@@ -138,7 +138,7 @@ class WorkQueue
|
|
138
138
|
|
139
139
|
##
|
140
140
|
# Halt all worker threads immediately, aborting any ongoing tasks.
|
141
|
-
# Resets all
|
141
|
+
# Resets all
|
142
142
|
#
|
143
143
|
# ==== Example(s)
|
144
144
|
# wq = WorkQueue.new
|
@@ -185,7 +185,7 @@ class WorkQueue
|
|
185
185
|
@task_dequeued.wait_until { @tasks.size < @max_tasks }
|
186
186
|
@tasks << [proc, params]
|
187
187
|
@tasks_pending += 1
|
188
|
-
@task_enqueued.
|
188
|
+
@task_enqueued.broadcast
|
189
189
|
end
|
190
190
|
spawn_thread
|
191
191
|
end
|
@@ -233,7 +233,7 @@ class WorkQueue
|
|
233
233
|
@task_enqueued.wait_while { @tasks.empty? }
|
234
234
|
@threads_waiting -= 1
|
235
235
|
task = @tasks.shift
|
236
|
-
@task_dequeued.
|
236
|
+
@task_dequeued.broadcast
|
237
237
|
return task
|
238
238
|
end
|
239
239
|
end
|
@@ -244,7 +244,7 @@ class WorkQueue
|
|
244
244
|
def conclude
|
245
245
|
@tasks.synchronize do
|
246
246
|
@tasks_pending -= 1
|
247
|
-
@task_completed.
|
247
|
+
@task_completed.broadcast
|
248
248
|
end
|
249
249
|
end
|
250
250
|
end
|
data/test/tc_work_queue.rb
CHANGED
@@ -9,7 +9,7 @@ class TC_WorkQueue < Test::Unit::TestCase
|
|
9
9
|
wq.join
|
10
10
|
assert_equal "Hello Proc", s
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def test_enqueue_block
|
14
14
|
s = String.new
|
15
15
|
wq = WorkQueue.new
|
@@ -17,7 +17,7 @@ class TC_WorkQueue < Test::Unit::TestCase
|
|
17
17
|
wq.join
|
18
18
|
assert_equal "Hello Block", s
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def test_inner_enqueue
|
22
22
|
s = String.new
|
23
23
|
wq = WorkQueue.new
|
@@ -27,9 +27,9 @@ class TC_WorkQueue < Test::Unit::TestCase
|
|
27
27
|
sleep 0.01
|
28
28
|
end
|
29
29
|
wq.join
|
30
|
-
assert_equal "Hello Inner", s
|
30
|
+
assert_equal "Hello Inner", s
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def test_threads_recycle
|
34
34
|
wq = WorkQueue.new
|
35
35
|
wq.enqueue_b { sleep 0.01 }
|
@@ -51,7 +51,7 @@ class TC_WorkQueue < Test::Unit::TestCase
|
|
51
51
|
assert_equal 1, wq.cur_threads
|
52
52
|
wq.join
|
53
53
|
end
|
54
|
-
|
54
|
+
|
55
55
|
def test_max_threads_validation
|
56
56
|
assert_raise(ArgumentError) { WorkQueue.new 0, nil }
|
57
57
|
assert_raise(ArgumentError) { WorkQueue.new -1, nil }
|
@@ -66,7 +66,7 @@ class TC_WorkQueue < Test::Unit::TestCase
|
|
66
66
|
assert_equal 1, wq.cur_tasks
|
67
67
|
wq.join
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
def test_max_tasks_validation
|
71
71
|
assert_raise(ArgumentError) { WorkQueue.new nil, 0 }
|
72
72
|
assert_raise(ArgumentError) { WorkQueue.new nil, -1 }
|
@@ -76,34 +76,34 @@ class TC_WorkQueue < Test::Unit::TestCase
|
|
76
76
|
i = 0
|
77
77
|
m = Mutex.new
|
78
78
|
wq = WorkQueue.new 100, 200
|
79
|
-
(1..
|
79
|
+
(1..1000).each do
|
80
80
|
wq.enqueue_b {
|
81
81
|
sleep 0.01
|
82
82
|
m.synchronize { i += 1 }
|
83
83
|
}
|
84
84
|
end
|
85
85
|
wq.join
|
86
|
-
assert_equal
|
86
|
+
assert_equal 1000, i
|
87
87
|
end
|
88
|
-
|
88
|
+
|
89
89
|
def test_stress_prolonged
|
90
90
|
i = 0
|
91
91
|
m = Mutex.new
|
92
92
|
wq = WorkQueue.new 100, 200
|
93
|
-
(1..
|
93
|
+
(1..1000).each do
|
94
94
|
wq.enqueue_b {
|
95
95
|
sleep rand(5)
|
96
96
|
m.synchronize { i += 1 }
|
97
97
|
}
|
98
98
|
end
|
99
99
|
wq.join
|
100
|
-
assert_equal
|
100
|
+
assert_equal 1000, i
|
101
101
|
end
|
102
102
|
|
103
103
|
def test_kill
|
104
104
|
s = String.new
|
105
105
|
wq = WorkQueue.new
|
106
|
-
wq.enqueue_b(s) { |str|
|
106
|
+
wq.enqueue_b(s) { |str|
|
107
107
|
sleep 0.1
|
108
108
|
str.replace "Hello"
|
109
109
|
}
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: work_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 2.5.
|
9
|
+
- 3
|
10
|
+
version: 2.5.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Miguel Fonseca
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-02-23 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description:
|
@@ -32,6 +32,7 @@ files:
|
|
32
32
|
- Rakefile
|
33
33
|
- README.rdoc
|
34
34
|
- tasks/test.rake
|
35
|
+
- lib/test.rb
|
35
36
|
- lib/work_queue.rb
|
36
37
|
- test/tc_work_queue.rb
|
37
38
|
homepage: http://github.com/fmmfonseca/work_queue
|