tpool 0.0.1 → 0.0.2
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/VERSION +1 -1
- data/lib/tpool.rb +10 -0
- data/lib/tpool_block.rb +3 -1
- data/spec/tpool_spec.rb +14 -1
- data/tpool.gemspec +2 -2
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/tpool.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require "thread"
|
2
2
|
|
3
3
|
class Tpool
|
4
|
+
attr_reader :args
|
5
|
+
|
6
|
+
ARGS_VALID = [:threads, :priority, :on_error]
|
7
|
+
|
4
8
|
def self.const_missing(name)
|
5
9
|
require "#{File.dirname(__FILE__)}/tpool_#{name.to_s.downcase}.rb"
|
6
10
|
raise "Still not defined: '#{name}'." if !Tpool.const_defined?(name)
|
@@ -15,10 +19,15 @@ class Tpool
|
|
15
19
|
|
16
20
|
def initialize(args)
|
17
21
|
@args = args
|
22
|
+
@args.each do |key, val|
|
23
|
+
raise "Invalid argument given: '#{key}'." if Tpool::ARGS_VALID.index(key) == nil
|
24
|
+
end
|
25
|
+
|
18
26
|
@queue = Queue.new
|
19
27
|
self.start
|
20
28
|
end
|
21
29
|
|
30
|
+
#Starts the thread-pool. This is automatically called on initialization.
|
22
31
|
def start
|
23
32
|
raise "Already started." if @pool and !@pool.empty?
|
24
33
|
|
@@ -57,6 +66,7 @@ class Tpool
|
|
57
66
|
block = Tpool::Block.new(
|
58
67
|
:args => args,
|
59
68
|
:blk => blk,
|
69
|
+
:tpool => self,
|
60
70
|
:thread_starts => [Thread.current]
|
61
71
|
)
|
62
72
|
@queue << block
|
data/lib/tpool_block.rb
CHANGED
@@ -5,6 +5,7 @@ class Tpool::Block
|
|
5
5
|
def initialize(args)
|
6
6
|
@args = args
|
7
7
|
|
8
|
+
@tpool = @args[:tpool]
|
8
9
|
@running = false
|
9
10
|
@done = false
|
10
11
|
@error = nil
|
@@ -13,13 +14,14 @@ class Tpool::Block
|
|
13
14
|
#Starts running whatever block it is holding.
|
14
15
|
def run
|
15
16
|
@thread_running = Thread.current
|
17
|
+
@thread_running.priority = @tpool.args[:priority] if @tpool.args.key?(:priority)
|
16
18
|
@running = true
|
17
19
|
|
18
20
|
begin
|
19
21
|
@res = @args[:blk].call(*@args[:args], &@args[:blk])
|
20
22
|
rescue Exception => e
|
21
23
|
@error = e
|
22
|
-
@args[:tpool].on_error_call(:
|
24
|
+
@args[:tpool].on_error_call(:error => e, :block => self)
|
23
25
|
ensure
|
24
26
|
@running = false
|
25
27
|
@done = true
|
data/spec/tpool_spec.rb
CHANGED
@@ -2,11 +2,22 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "Tpool" do
|
4
4
|
it "should work" do
|
5
|
-
|
5
|
+
errs = []
|
6
|
+
|
7
|
+
tp = Tpool.new(
|
8
|
+
:threads => 4,
|
9
|
+
:priority => -3,
|
10
|
+
:on_error => lambda{|data|
|
11
|
+
errs << data[:error]
|
12
|
+
}
|
13
|
+
)
|
14
|
+
|
6
15
|
res = tp.run do
|
16
|
+
errs << "Expected thread priority to be -3 but it wasnt: '#{Thread.current.priority}'." if Thread.current.priority != -3
|
7
17
|
"kasper"
|
8
18
|
end
|
9
19
|
|
20
|
+
raise errs.first if !errs.empty?
|
10
21
|
raise "Expected result to be 'kasper' but it wasnt: '#{res}'." if res != "kasper"
|
11
22
|
|
12
23
|
|
@@ -34,5 +45,7 @@ describe "Tpool" do
|
|
34
45
|
end
|
35
46
|
|
36
47
|
raise "Expected error but didnt get one." if !error
|
48
|
+
|
49
|
+
raise errs.first if !errs.empty?
|
37
50
|
end
|
38
51
|
end
|
data/tpool.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tpool}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date = %q{2012-08-
|
12
|
+
s.date = %q{2012-08-27}
|
13
13
|
s.description = %q{A thread-pool for Ruby that supports joining, status-checking, stopping jobs and more.}
|
14
14
|
s.email = %q{k@spernj.org}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tpool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-08-
|
13
|
+
date: 2012-08-27 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -94,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
94
|
requirements:
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
hash:
|
97
|
+
hash: -3322771653679867598
|
98
98
|
segments:
|
99
99
|
- 0
|
100
100
|
version: "0"
|