open4 0.5.0 → 0.5.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.
- data/a.rb +64 -0
- data/lib/{open4-0.5.0.rb → open4-0.5.1.rb} +29 -28
- data/lib/open4.rb +29 -28
- data/open4-0.5.1.gem +0 -0
- metadata +5 -3
data/a.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'thread'
|
2
|
+
|
3
|
+
class ThreadEnsemble
|
4
|
+
#--{{{
|
5
|
+
attr 'threads'
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@threads, @argv, @done, @running = [], [], Queue.new, false
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_thread *a, &b
|
12
|
+
@running ? raise : (@argv << [a, b])
|
13
|
+
end
|
14
|
+
|
15
|
+
def killall
|
16
|
+
(@threads - [Thread.current]).each{|t| t.kill rescue nil} if @running
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
@running = true
|
21
|
+
|
22
|
+
begin
|
23
|
+
@argv.each do |a, b|
|
24
|
+
@threads << Thread.new(*a) do |*a|
|
25
|
+
begin
|
26
|
+
b[*a]
|
27
|
+
ensure
|
28
|
+
killall rescue nil if $!
|
29
|
+
@done.push Thread.current
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
rescue
|
34
|
+
killall
|
35
|
+
raise
|
36
|
+
ensure
|
37
|
+
all_done
|
38
|
+
end
|
39
|
+
|
40
|
+
@threads.map{|t| t.value}
|
41
|
+
end
|
42
|
+
|
43
|
+
def all_done
|
44
|
+
@threads.size.times{ @done.pop }
|
45
|
+
end
|
46
|
+
#--}}}
|
47
|
+
end
|
48
|
+
|
49
|
+
loop do
|
50
|
+
te = ThreadEnsemble.new
|
51
|
+
|
52
|
+
1000.times do
|
53
|
+
te.add_thread do
|
54
|
+
raise
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
begin
|
59
|
+
te.run
|
60
|
+
rescue
|
61
|
+
running = te.threads.select{|t| t.status}
|
62
|
+
abort running.inspect if running.size > 0
|
63
|
+
end
|
64
|
+
end
|
@@ -4,7 +4,7 @@ require 'thread'
|
|
4
4
|
|
5
5
|
module Open4
|
6
6
|
#--{{{
|
7
|
-
VERSION = '0.5.
|
7
|
+
VERSION = '0.5.1'
|
8
8
|
def self.version() VERSION end
|
9
9
|
|
10
10
|
class Error < ::StandardError; end
|
@@ -101,45 +101,46 @@ module Open4
|
|
101
101
|
|
102
102
|
class ThreadEnsemble
|
103
103
|
#--{{{
|
104
|
+
attr 'threads'
|
105
|
+
|
104
106
|
def initialize
|
105
|
-
@
|
106
|
-
@kill = Queue.new
|
107
|
-
@killer = Thread.new{ k = @kill.pop and others.map{|t| t.kill unless t == k rescue next}}
|
108
|
-
@running = false
|
107
|
+
@threads, @argv, @done, @running = [], [], Queue.new, false
|
109
108
|
end
|
110
109
|
|
111
110
|
def add_thread *a, &b
|
112
|
-
raise
|
113
|
-
@group.add(Thread.new(*a) do |*a|
|
114
|
-
Thread.stop
|
115
|
-
begin
|
116
|
-
b[*a]
|
117
|
-
ensure
|
118
|
-
kill if $!
|
119
|
-
end
|
120
|
-
end)
|
111
|
+
@running ? raise : (@argv << [a, b])
|
121
112
|
end
|
122
113
|
|
123
|
-
def
|
124
|
-
@
|
114
|
+
def killall
|
115
|
+
(@threads - [Thread.current]).each{|t| t.kill rescue nil} if @running
|
125
116
|
end
|
126
117
|
|
127
|
-
def
|
128
|
-
|
129
|
-
end
|
118
|
+
def run
|
119
|
+
@running = true
|
130
120
|
|
131
|
-
|
132
|
-
|
133
|
-
|
121
|
+
begin
|
122
|
+
@argv.each do |a, b|
|
123
|
+
@threads << Thread.new(*a) do |*a|
|
124
|
+
begin
|
125
|
+
b[*a]
|
126
|
+
ensure
|
127
|
+
killall rescue nil if $!
|
128
|
+
@done.push Thread.current
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
rescue
|
133
|
+
killall
|
134
|
+
raise
|
135
|
+
ensure
|
136
|
+
all_done
|
137
|
+
end
|
134
138
|
|
135
|
-
|
136
|
-
others.map{|t| t.value}
|
139
|
+
@threads.map{|t| t.value}
|
137
140
|
end
|
138
141
|
|
139
|
-
def
|
140
|
-
@
|
141
|
-
others.map{|t| t.wakeup}
|
142
|
-
value
|
142
|
+
def all_done
|
143
|
+
@threads.size.times{ @done.pop }
|
143
144
|
end
|
144
145
|
#--}}}
|
145
146
|
end
|
data/lib/open4.rb
CHANGED
@@ -4,7 +4,7 @@ require 'thread'
|
|
4
4
|
|
5
5
|
module Open4
|
6
6
|
#--{{{
|
7
|
-
VERSION = '0.5.
|
7
|
+
VERSION = '0.5.1'
|
8
8
|
def self.version() VERSION end
|
9
9
|
|
10
10
|
class Error < ::StandardError; end
|
@@ -101,45 +101,46 @@ module Open4
|
|
101
101
|
|
102
102
|
class ThreadEnsemble
|
103
103
|
#--{{{
|
104
|
+
attr 'threads'
|
105
|
+
|
104
106
|
def initialize
|
105
|
-
@
|
106
|
-
@kill = Queue.new
|
107
|
-
@killer = Thread.new{ k = @kill.pop and others.map{|t| t.kill unless t == k rescue next}}
|
108
|
-
@running = false
|
107
|
+
@threads, @argv, @done, @running = [], [], Queue.new, false
|
109
108
|
end
|
110
109
|
|
111
110
|
def add_thread *a, &b
|
112
|
-
raise
|
113
|
-
@group.add(Thread.new(*a) do |*a|
|
114
|
-
Thread.stop
|
115
|
-
begin
|
116
|
-
b[*a]
|
117
|
-
ensure
|
118
|
-
kill if $!
|
119
|
-
end
|
120
|
-
end)
|
111
|
+
@running ? raise : (@argv << [a, b])
|
121
112
|
end
|
122
113
|
|
123
|
-
def
|
124
|
-
@
|
114
|
+
def killall
|
115
|
+
(@threads - [Thread.current]).each{|t| t.kill rescue nil} if @running
|
125
116
|
end
|
126
117
|
|
127
|
-
def
|
128
|
-
|
129
|
-
end
|
118
|
+
def run
|
119
|
+
@running = true
|
130
120
|
|
131
|
-
|
132
|
-
|
133
|
-
|
121
|
+
begin
|
122
|
+
@argv.each do |a, b|
|
123
|
+
@threads << Thread.new(*a) do |*a|
|
124
|
+
begin
|
125
|
+
b[*a]
|
126
|
+
ensure
|
127
|
+
killall rescue nil if $!
|
128
|
+
@done.push Thread.current
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
rescue
|
133
|
+
killall
|
134
|
+
raise
|
135
|
+
ensure
|
136
|
+
all_done
|
137
|
+
end
|
134
138
|
|
135
|
-
|
136
|
-
others.map{|t| t.value}
|
139
|
+
@threads.map{|t| t.value}
|
137
140
|
end
|
138
141
|
|
139
|
-
def
|
140
|
-
@
|
141
|
-
others.map{|t| t.wakeup}
|
142
|
-
value
|
142
|
+
def all_done
|
143
|
+
@threads.size.times{ @done.pop }
|
143
144
|
end
|
144
145
|
#--}}}
|
145
146
|
end
|
data/open4-0.5.1.gem
ADDED
File without changes
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: open4
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.5.
|
7
|
-
date: 2006-08-
|
6
|
+
version: 0.5.1
|
7
|
+
date: 2006-08-22 00:00:00.000000 -06:00
|
8
8
|
summary: open4
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -36,6 +36,8 @@ files:
|
|
36
36
|
- build
|
37
37
|
- install
|
38
38
|
- gemspec.rb
|
39
|
+
- a.rb
|
40
|
+
- open4-0.5.1.gem
|
39
41
|
- sample/block.rb
|
40
42
|
- sample/simple.rb
|
41
43
|
- sample/exception.rb
|
@@ -44,7 +46,7 @@ files:
|
|
44
46
|
- sample/timeout.rb
|
45
47
|
- sample/stdin_timeout.rb
|
46
48
|
- lib/open4.rb
|
47
|
-
- lib/open4-0.5.
|
49
|
+
- lib/open4-0.5.1.rb
|
48
50
|
test_files: []
|
49
51
|
rdoc_options: []
|
50
52
|
extra_rdoc_files: []
|