thread_puddle 0.1.0 → 0.1.1

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.
Files changed (2) hide show
  1. data/lib/thread_puddle.rb +32 -6
  2. 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
- job.call *args
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
- queue.enq [block, args]
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
- size = 0
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.0
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: 2013-10-15 00:00:00.000000000 Z
12
+ date: 2014-05-02 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: puddles of threads
15
15
  email: