thread_puddle 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/thread_puddle.rb +32 -6
- metadata +2 -2
data/lib/thread_puddle.rb
CHANGED
@@ -1,17 +1,24 @@
|
|
1
1
|
require 'thread'
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
class ThreadPuddle
|
4
|
-
attr_reader :size
|
5
|
+
attr_reader :size, :state
|
5
6
|
|
6
7
|
def initialize size = 24
|
7
8
|
@size = size
|
9
|
+
@state = :running
|
8
10
|
@queue = Queue.new
|
9
11
|
@pool = size.times.map do
|
10
12
|
Thread.new do
|
11
13
|
catch :exit do
|
12
14
|
loop do
|
13
|
-
job, args = queue.deq
|
14
|
-
|
15
|
+
job, args, result_queue = queue.deq
|
16
|
+
|
17
|
+
if result_queue
|
18
|
+
result_queue.enq job.call *args
|
19
|
+
else # async
|
20
|
+
job.call *args
|
21
|
+
end
|
15
22
|
end
|
16
23
|
end
|
17
24
|
end
|
@@ -19,10 +26,27 @@ class ThreadPuddle
|
|
19
26
|
end
|
20
27
|
|
21
28
|
def submit *args, &block
|
22
|
-
|
29
|
+
if state == :running
|
30
|
+
queue.enq [block, args]
|
31
|
+
else
|
32
|
+
raise "thread pool has been shutdown"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def perform *args, &block
|
37
|
+
if state == :running
|
38
|
+
result_queue = Queue.new
|
39
|
+
queue.enq [block, args, result_queue]
|
40
|
+
|
41
|
+
result_queue.deq
|
42
|
+
else
|
43
|
+
raise "thread pool has been shutdown"
|
44
|
+
end
|
23
45
|
end
|
24
46
|
|
25
47
|
def shutdown timeout = nil
|
48
|
+
state = :shutting_down
|
49
|
+
|
26
50
|
size.times do
|
27
51
|
submit do
|
28
52
|
throw :exit
|
@@ -36,12 +60,14 @@ class ThreadPuddle
|
|
36
60
|
end
|
37
61
|
|
38
62
|
queue.clear
|
39
|
-
|
63
|
+
state = :terminated
|
64
|
+
size = 0
|
40
65
|
end
|
41
66
|
|
42
67
|
def status
|
43
68
|
{
|
44
69
|
:size => size,
|
70
|
+
:state => state,
|
45
71
|
:threads => pool.map(&:status),
|
46
72
|
:queue => {
|
47
73
|
:size => queue.size,
|
@@ -60,4 +86,4 @@ class ThreadPuddle
|
|
60
86
|
rescue Timeout::Error
|
61
87
|
pool.each &:kill
|
62
88
|
end
|
63
|
-
end
|
89
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thread_puddle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-05-02 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: puddles of threads
|
15
15
|
email:
|