rbbt-util 5.17.35 → 5.17.37
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.
- checksums.yaml +4 -4
- data/lib/rbbt/tsv/parallel/traverse.rb +16 -1
- data/lib/rbbt/util/concurrency/processes/worker.rb +14 -4
- data/lib/rbbt/util/concurrency/processes.rb +7 -1
- data/lib/rbbt/util/log/progress/report.rb +12 -2
- data/lib/rbbt/util/log/progress/util.rb +8 -0
- data/lib/rbbt/util/log/progress.rb +6 -0
- data/lib/rbbt/util/misc/development.rb +7 -4
- data/lib/rbbt/workflow/step/run.rb +8 -0
- data/test/rbbt/util/test_misc.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 018ff5d75579a0f9063037ef20da554b396daa92
|
4
|
+
data.tar.gz: fbaa875c7332df4f9a5da2511e85df9e2a3fc938
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0b6ca146e9d06f87d73136afdbcc7f816e2ad333453310a633932f5f798ac810cbe97a1634949c8a3307c9acf35cab928f99830766c6c8cd9bcf67f8cf259e7
|
7
|
+
data.tar.gz: 8a25f98e0b3d4ed21571fc438433a2374f8903d0363663ef6f71bb4afce88af19909419122b98507af90ba86330f6125ec88930c285fa7d2013f3ceb1bd73541
|
@@ -66,6 +66,7 @@ module TSV
|
|
66
66
|
callback, bar, join = Misc.process_options options, :callback, :bar, :join
|
67
67
|
|
68
68
|
if callback
|
69
|
+
bar.init if bar
|
69
70
|
tsv.through options[:key_field], options[:fields] do |k,v|
|
70
71
|
begin
|
71
72
|
callback.call yield(k,v)
|
@@ -74,6 +75,7 @@ module TSV
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
else
|
78
|
+
bar.init if bar
|
77
79
|
tsv.through options[:key_field], options[:fields] do |k,v|
|
78
80
|
begin
|
79
81
|
yield k,v
|
@@ -114,6 +116,7 @@ module TSV
|
|
114
116
|
callback, bar, join = Misc.process_options options, :callback, :bar, :join
|
115
117
|
|
116
118
|
if callback
|
119
|
+
bar.init if bar
|
117
120
|
array.each do |e|
|
118
121
|
begin
|
119
122
|
callback.call yield(e)
|
@@ -122,9 +125,13 @@ module TSV
|
|
122
125
|
end
|
123
126
|
end
|
124
127
|
else
|
128
|
+
bar.init if bar
|
125
129
|
array.each do |e|
|
126
130
|
begin
|
127
131
|
yield e
|
132
|
+
rescue Exception
|
133
|
+
Log.exception $!
|
134
|
+
raise $!
|
128
135
|
ensure
|
129
136
|
bar.tick if bar
|
130
137
|
end
|
@@ -147,6 +154,7 @@ module TSV
|
|
147
154
|
end
|
148
155
|
|
149
156
|
if callback
|
157
|
+
bar.init if bar
|
150
158
|
while line = io.gets
|
151
159
|
if line[-1] != "\n"
|
152
160
|
while c = io.getc
|
@@ -161,6 +169,7 @@ module TSV
|
|
161
169
|
end
|
162
170
|
end
|
163
171
|
else
|
172
|
+
bar.init if bar
|
164
173
|
while line = io.gets
|
165
174
|
begin
|
166
175
|
yield line.strip
|
@@ -186,6 +195,7 @@ module TSV
|
|
186
195
|
end
|
187
196
|
|
188
197
|
if callback
|
198
|
+
bar.init if bar
|
189
199
|
TSV::Parser.traverse(io, options) do |k,v|
|
190
200
|
begin
|
191
201
|
callback.call yield k, v
|
@@ -333,19 +343,22 @@ module TSV
|
|
333
343
|
|
334
344
|
def self.traverse_cpus(num, obj, options, &block)
|
335
345
|
begin
|
336
|
-
callback, cleanup, join, respawn = Misc.process_options options, :callback, :cleanup, :join, :respawn
|
346
|
+
callback, cleanup, join, respawn, bar = Misc.process_options options, :callback, :cleanup, :join, :respawn, :bar
|
337
347
|
respawn = true if ENV["RBBT_RESPAWN"] and ENV["RBBT_RESPAWN"] == "true"
|
338
348
|
|
339
349
|
Log.low "Traversing in #{ num } cpus: #{respawn ? "respawn" : "no respawn"}"
|
340
350
|
q = RbbtProcessQueue.new num, cleanup, join, respawn
|
351
|
+
callback = Proc.new{ bar.tick } if callback.nil? and bar
|
341
352
|
q.callback &callback
|
342
353
|
q.init &block
|
343
354
|
|
355
|
+
bar.init if bar
|
344
356
|
traverse_obj(obj, options) do |*p|
|
345
357
|
q.process *p
|
346
358
|
end
|
347
359
|
|
348
360
|
q.join
|
361
|
+
|
349
362
|
rescue Interrupt, Aborted
|
350
363
|
q.abort
|
351
364
|
Log.medium{"Aborted traversal in CPUs for #{stream_name(obj) || Misc.fingerprint(obj)}: #{$!.backtrace*","}"}
|
@@ -364,6 +377,7 @@ module TSV
|
|
364
377
|
raise $!
|
365
378
|
ensure
|
366
379
|
q.clean
|
380
|
+
Log::ProgressBar.remove_bar(bar) if bar
|
367
381
|
end
|
368
382
|
end
|
369
383
|
|
@@ -586,6 +600,7 @@ module TSV
|
|
586
600
|
end
|
587
601
|
end
|
588
602
|
|
603
|
+
bar.init if bar
|
589
604
|
case into
|
590
605
|
when TSV::Dumper, IO
|
591
606
|
traverse_stream(obj, threads, cpus, options, &block)
|
@@ -3,7 +3,12 @@ class RbbtProcessQueue
|
|
3
3
|
class RbbtProcessQueueWorker
|
4
4
|
attr_reader :pid, :queue, :callback_queue, :cleanup, :block
|
5
5
|
|
6
|
-
class Respawn < Exception
|
6
|
+
class Respawn < Exception
|
7
|
+
attr_accessor :payload
|
8
|
+
def initialize(payload)
|
9
|
+
@payload = payload
|
10
|
+
end
|
11
|
+
end
|
7
12
|
|
8
13
|
def run
|
9
14
|
begin
|
@@ -20,9 +25,14 @@ class RbbtProcessQueue
|
|
20
25
|
p = @queue.pop
|
21
26
|
next if p.nil?
|
22
27
|
raise p if Exception === p
|
23
|
-
raise p.first if Exception === p.first
|
24
|
-
|
25
|
-
|
28
|
+
raise p.first if Array === p and Exception === p.first
|
29
|
+
begin
|
30
|
+
res = @block.call *p
|
31
|
+
@callback_queue.push res if @callback_queue
|
32
|
+
rescue Respawn
|
33
|
+
@callback_queue.push $!.payload
|
34
|
+
raise $!
|
35
|
+
end
|
26
36
|
raise Respawn if @stop
|
27
37
|
end
|
28
38
|
Kernel.exit! 0
|
@@ -16,6 +16,7 @@ class RbbtProcessQueue
|
|
16
16
|
attr_accessor :callback, :callback_queue, :callback_thread
|
17
17
|
def callback(&block)
|
18
18
|
if block_given?
|
19
|
+
|
19
20
|
@callback = block
|
20
21
|
|
21
22
|
@callback_queue = RbbtProcessSocket.new
|
@@ -31,7 +32,11 @@ class RbbtProcessQueue
|
|
31
32
|
raise e
|
32
33
|
end
|
33
34
|
|
34
|
-
@callback.
|
35
|
+
if @callback.arity == 0
|
36
|
+
@callback.call
|
37
|
+
else
|
38
|
+
@callback.call p
|
39
|
+
end
|
35
40
|
end
|
36
41
|
rescue Aborted
|
37
42
|
Log.warn "Callback thread aborted"
|
@@ -43,6 +48,7 @@ class RbbtProcessQueue
|
|
43
48
|
@process_monitor.raise $!
|
44
49
|
raise $!
|
45
50
|
ensure
|
51
|
+
|
46
52
|
@callback_queue.sread.close unless @callback_queue.sread.closed?
|
47
53
|
end
|
48
54
|
end
|
@@ -80,7 +80,13 @@ module Log
|
|
80
80
|
|
81
81
|
def report_msg
|
82
82
|
str = Log.color :magenta, desc
|
83
|
-
|
83
|
+
if @ticks == 0
|
84
|
+
if @max
|
85
|
+
return str << " " << Log.color(:yellow, "waiting on #{@max} - #{Process.pid}")
|
86
|
+
else
|
87
|
+
return str << " " << Log.color(:yellow, "waiting - #{Process.pid}")
|
88
|
+
end
|
89
|
+
end
|
84
90
|
str << " " << thr_msg
|
85
91
|
if max
|
86
92
|
str << Log.color(:blue, " -- ") << eta_msg
|
@@ -101,7 +107,11 @@ module Log
|
|
101
107
|
bars = BARS
|
102
108
|
print(io, Log.color(:yellow, "...Progress\n"))
|
103
109
|
bars.sort_by{|b| b.depth }.reverse.each do |bar|
|
104
|
-
|
110
|
+
if SILENCED.include? bar
|
111
|
+
print(io, Log.color(:yellow ,bar.report_msg) << "\n")
|
112
|
+
else
|
113
|
+
print(io, "\n")
|
114
|
+
end
|
105
115
|
end
|
106
116
|
else
|
107
117
|
bars = BARS
|
@@ -3,6 +3,7 @@ module Log
|
|
3
3
|
BAR_MUTEX = Mutex.new
|
4
4
|
BARS = []
|
5
5
|
REMOVE = []
|
6
|
+
SILENCED = []
|
6
7
|
|
7
8
|
def self.new_bar(max, options = {})
|
8
9
|
cleanup_bars
|
@@ -24,6 +25,13 @@ module Log
|
|
24
25
|
bar.depth = i
|
25
26
|
end
|
26
27
|
end
|
28
|
+
index = SILENCED.index bar
|
29
|
+
if index
|
30
|
+
SILENCED.delete_at index
|
31
|
+
SILENCED.each_with_index do |bar,i|
|
32
|
+
bar.depth = i
|
33
|
+
end
|
34
|
+
end
|
27
35
|
end
|
28
36
|
REMOVE.clear
|
29
37
|
BARS.length
|
@@ -9,6 +9,7 @@ module Misc
|
|
9
9
|
Persist::CONNECTIONS.values.each do |db|
|
10
10
|
db.close if db.write?
|
11
11
|
end
|
12
|
+
Log::ProgressBar::BARS.clear
|
12
13
|
ObjectSpace.each_object(Mutex) do |m|
|
13
14
|
begin
|
14
15
|
m.unlock
|
@@ -297,7 +298,8 @@ module Misc
|
|
297
298
|
end
|
298
299
|
|
299
300
|
|
300
|
-
options = Misc.add_defaults options, :respawn => true, :cpus => cpus, :into => Set.new
|
301
|
+
#options = Misc.add_defaults options, :respawn => true, :cpus => cpus, :into => Set.new
|
302
|
+
options = Misc.add_defaults options, :respawn => true, :cpus => cpus
|
301
303
|
options = Misc.add_defaults options, :bar => "Bootstrap in #{ options[:cpus] } cpus: #{ Misc.fingerprint Annotated.purge(elems) }"
|
302
304
|
respawn = options[:respawn] and options[:cpus] and options[:cpus].to_i > 1
|
303
305
|
|
@@ -306,12 +308,13 @@ module Misc
|
|
306
308
|
elem = elems[pos.to_i]
|
307
309
|
elems.annotate elem if elems.respond_to? :annotate
|
308
310
|
begin
|
309
|
-
yield elem
|
311
|
+
res = yield elem
|
310
312
|
rescue Interrupt
|
311
313
|
Log.warn "Process #{Process.pid} was aborted"
|
312
314
|
end
|
313
|
-
|
314
|
-
|
315
|
+
res = nil unless options[:into]
|
316
|
+
raise RbbtProcessQueue::RbbtProcessQueueWorker::Respawn, res if respawn == :always and cpus > 1
|
317
|
+
res
|
315
318
|
end
|
316
319
|
end
|
317
320
|
|
@@ -279,6 +279,14 @@ class Step
|
|
279
279
|
end
|
280
280
|
end
|
281
281
|
|
282
|
+
def produce
|
283
|
+
return if done? and not dirty?
|
284
|
+
clean if dirty?
|
285
|
+
run(true) unless started?
|
286
|
+
join unless done?
|
287
|
+
self
|
288
|
+
end
|
289
|
+
|
282
290
|
def fork(semaphore = nil)
|
283
291
|
raise "Can not fork: Step is waiting for proces #{@pid} to finish" if not @pid.nil? and not Process.pid == @pid and Misc.pid_exists?(@pid) and not done? and info[:forked]
|
284
292
|
@pid = Process.fork do
|
data/test/rbbt/util/test_misc.rb
CHANGED
@@ -458,4 +458,12 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
458
458
|
ppp Misc.snake_case("KinaseSARfari")
|
459
459
|
end
|
460
460
|
|
461
|
+
def test_bootstrap
|
462
|
+
Log.severity = 0
|
463
|
+
res = Misc.bootstrap((1..10).to_a, 2, :bar => "Test bootstrap ticks", :respawn => :always, :into => []) do |num|
|
464
|
+
sleep 1 + rand(2)
|
465
|
+
num
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
461
469
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.17.
|
4
|
+
version: 5.17.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|