hq-tools 0.7.0 → 0.8.0
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/lib/hq/tools/future.rb +79 -0
- data/lib/hq/tools/thread-pool.rb +77 -0
- metadata +35 -19
- checksums.yaml +0 -7
@@ -0,0 +1,79 @@
|
|
1
|
+
module HQ
|
2
|
+
module Tools
|
3
|
+
|
4
|
+
class Future
|
5
|
+
|
6
|
+
def initialize thread_pool, *args, &block
|
7
|
+
|
8
|
+
@mutex =
|
9
|
+
Mutex.new
|
10
|
+
|
11
|
+
@resource =
|
12
|
+
ConditionVariable.new
|
13
|
+
|
14
|
+
@result =
|
15
|
+
nil
|
16
|
+
|
17
|
+
thread_pool.schedule do
|
18
|
+
|
19
|
+
begin
|
20
|
+
|
21
|
+
@result =
|
22
|
+
block.call *args
|
23
|
+
|
24
|
+
@result_type =
|
25
|
+
:return
|
26
|
+
|
27
|
+
rescue => exception
|
28
|
+
|
29
|
+
@result =
|
30
|
+
exception
|
31
|
+
|
32
|
+
@result_type =
|
33
|
+
:exception
|
34
|
+
|
35
|
+
ensure
|
36
|
+
|
37
|
+
@mutex.synchronize do
|
38
|
+
@resource.broadcast
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
def get
|
48
|
+
|
49
|
+
@mutex.synchronize do
|
50
|
+
|
51
|
+
loop do
|
52
|
+
|
53
|
+
case @result_type
|
54
|
+
|
55
|
+
when :return
|
56
|
+
|
57
|
+
return @result
|
58
|
+
|
59
|
+
when :exception
|
60
|
+
|
61
|
+
raise @result
|
62
|
+
|
63
|
+
else
|
64
|
+
|
65
|
+
@resource.wait \
|
66
|
+
@mutex
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module HQ
|
2
|
+
module Tools
|
3
|
+
|
4
|
+
class ThreadPool
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
require "thread"
|
8
|
+
@tasks = Queue.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def worker_init
|
12
|
+
return unless @init_hook
|
13
|
+
@init_hook.call
|
14
|
+
end
|
15
|
+
|
16
|
+
def worker_run
|
17
|
+
|
18
|
+
catch :exit do
|
19
|
+
|
20
|
+
loop do
|
21
|
+
task, args = @tasks.pop
|
22
|
+
task.call *args
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def worker_deinit
|
30
|
+
return unless @deinit_hook
|
31
|
+
@deinit_hook.call
|
32
|
+
end
|
33
|
+
|
34
|
+
def schedule *args, &block
|
35
|
+
@tasks << [ block, args ]
|
36
|
+
end
|
37
|
+
|
38
|
+
def init_hook &block
|
39
|
+
@init_hook = block
|
40
|
+
end
|
41
|
+
|
42
|
+
def deinit_hook &block
|
43
|
+
@deinit_hook = block
|
44
|
+
end
|
45
|
+
|
46
|
+
def start threads
|
47
|
+
|
48
|
+
@threads =
|
49
|
+
Array.new threads do
|
50
|
+
|
51
|
+
Thread.new do
|
52
|
+
worker_init
|
53
|
+
worker_run
|
54
|
+
worker_deinit
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def stop
|
62
|
+
|
63
|
+
@threads.size.times do
|
64
|
+
schedule { throw :exit }
|
65
|
+
end
|
66
|
+
|
67
|
+
@threads.each do
|
68
|
+
|thread|
|
69
|
+
thread.join
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
end
|
metadata
CHANGED
@@ -1,97 +1,110 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hq-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- James Pharaoh
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: cucumber
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- - '>='
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 1.2.1
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
|
-
- - '>='
|
27
|
+
- - ! '>='
|
25
28
|
- !ruby/object:Gem::Version
|
26
29
|
version: 1.2.1
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: libxml-ruby
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: 2.6.0
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: 2.6.0
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: rake
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: 10.0.3
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: 10.0.3
|
55
62
|
- !ruby/object:Gem::Dependency
|
56
63
|
name: rspec
|
57
64
|
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
58
66
|
requirements:
|
59
|
-
- - '>='
|
67
|
+
- - ! '>='
|
60
68
|
- !ruby/object:Gem::Version
|
61
69
|
version: 2.12.0
|
62
70
|
type: :development
|
63
71
|
prerelease: false
|
64
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
65
74
|
requirements:
|
66
|
-
- - '>='
|
75
|
+
- - ! '>='
|
67
76
|
- !ruby/object:Gem::Version
|
68
77
|
version: 2.12.0
|
69
78
|
- !ruby/object:Gem::Dependency
|
70
79
|
name: rspec_junit_formatter
|
71
80
|
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
72
82
|
requirements:
|
73
|
-
- - '>='
|
83
|
+
- - ! '>='
|
74
84
|
- !ruby/object:Gem::Version
|
75
85
|
version: '0'
|
76
86
|
type: :development
|
77
87
|
prerelease: false
|
78
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
79
90
|
requirements:
|
80
|
-
- - '>='
|
91
|
+
- - ! '>='
|
81
92
|
- !ruby/object:Gem::Version
|
82
93
|
version: '0'
|
83
94
|
- !ruby/object:Gem::Dependency
|
84
95
|
name: simplecov
|
85
96
|
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
86
98
|
requirements:
|
87
|
-
- - '>='
|
99
|
+
- - ! '>='
|
88
100
|
- !ruby/object:Gem::Version
|
89
101
|
version: '0'
|
90
102
|
type: :development
|
91
103
|
prerelease: false
|
92
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
93
106
|
requirements:
|
94
|
-
- - '>='
|
107
|
+
- - ! '>='
|
95
108
|
- !ruby/object:Gem::Version
|
96
109
|
version: '0'
|
97
110
|
description: HQ common library
|
@@ -105,8 +118,10 @@ files:
|
|
105
118
|
- lib/hq/tools/cron.rb
|
106
119
|
- lib/hq/tools/lock.rb
|
107
120
|
- lib/hq/tools/escape.rb
|
121
|
+
- lib/hq/tools/thread-pool.rb
|
108
122
|
- lib/hq/tools/check-script.rb
|
109
123
|
- lib/hq/tools/libxml-ruby.rb
|
124
|
+
- lib/hq/tools/future.rb
|
110
125
|
- spec/hq/tools/libxml-ruby-spec.rb
|
111
126
|
- spec/hq/tools/lock-spec.rb
|
112
127
|
- spec/hq/tools/getopt-spec.rb
|
@@ -114,26 +129,27 @@ files:
|
|
114
129
|
- spec/hq/tools/check-script-spec.rb
|
115
130
|
homepage: https://github.com/jamespharaoh/hq-tools
|
116
131
|
licenses: []
|
117
|
-
metadata: {}
|
118
132
|
post_install_message:
|
119
133
|
rdoc_options: []
|
120
134
|
require_paths:
|
121
135
|
- lib
|
122
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
123
138
|
requirements:
|
124
|
-
- - '>='
|
139
|
+
- - ! '>='
|
125
140
|
- !ruby/object:Gem::Version
|
126
141
|
version: '0'
|
127
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
none: false
|
128
144
|
requirements:
|
129
|
-
- - '>='
|
145
|
+
- - ! '>='
|
130
146
|
- !ruby/object:Gem::Version
|
131
147
|
version: 1.3.6
|
132
148
|
requirements: []
|
133
149
|
rubyforge_project: hq-tools
|
134
|
-
rubygems_version:
|
150
|
+
rubygems_version: 1.8.23
|
135
151
|
signing_key:
|
136
|
-
specification_version:
|
152
|
+
specification_version: 3
|
137
153
|
summary: HQ tools
|
138
154
|
test_files:
|
139
155
|
- spec/hq/tools/libxml-ruby-spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 535a0e8a9328942e9dd4610baa66baf2842627d5
|
4
|
-
data.tar.gz: 0634470c166d2ac7ce77b9177999e8d862eda827
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: eeb856df02859e81279f1e64e14672e5db793b0921ec977dda05c31785b2492d152f33c46486db40951fa8ea6e0933f8519722986ee0daa03bbc26fd425469ac
|
7
|
-
data.tar.gz: 8e6ff89cff18247a61fab54af608890641f9784afca4fe7a61ae29966f73b2d3bbbc9e88305758263b74d69f903f2f785b0d8c6e2c2f603bff72199d723ad051
|