epitools 0.5.128 → 0.5.129
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/VERSION +1 -1
- data/lib/epitools/autoloads.rb +15 -14
- data/lib/epitools/job_runner.rb +97 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 74b341f10e9697a2d9e93aad5aa91b7f799e75a3cd817d712bce3e15cd18428d
|
4
|
+
data.tar.gz: bce241006bd3b743410e3b6833145a5e72052637d7e918caa2562564b6ad4f5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef8edebf3480e814c17e90f5c200fe1dc70a45827d8c2e52d2d7834291f61fb67824c5c5b6f869805f8751ea53d0eb95aa83e86daba42eb748d34ea66061ad6a
|
7
|
+
data.tar.gz: 38abf237811351f91306dd1d1e66e9104040645aa3ff743d13609a155853aa6ffa80b9967961edda5f20e1ad67068ffc298beafac47857210eca9ebb6a4ec87f
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.129
|
data/lib/epitools/autoloads.rb
CHANGED
@@ -65,19 +65,20 @@ autoload :IPAddr, 'ipaddr'
|
|
65
65
|
|
66
66
|
## Nonstandard library (epitools)
|
67
67
|
|
68
|
-
autoload :Path,
|
69
|
-
autoload :Ezdb,
|
70
|
-
autoload :Browser,
|
71
|
-
autoload :Rash,
|
72
|
-
autoload :Ratio,
|
73
|
-
autoload :ProgressBar,
|
74
|
-
autoload :Trie,
|
75
|
-
autoload :MimeMagic,
|
76
|
-
autoload :Term,
|
77
|
-
autoload :Iter,
|
78
|
-
autoload :WM,
|
79
|
-
autoload :TypedStruct,
|
80
|
-
autoload :Sys,
|
68
|
+
autoload :Path, 'epitools/path'
|
69
|
+
autoload :Ezdb, 'epitools/ezdb'
|
70
|
+
autoload :Browser, 'epitools/browser'
|
71
|
+
autoload :Rash, 'epitools/rash'
|
72
|
+
autoload :Ratio, 'epitools/ratio'
|
73
|
+
autoload :ProgressBar, 'epitools/progressbar'
|
74
|
+
autoload :Trie, 'epitools/trie'
|
75
|
+
autoload :MimeMagic, 'epitools/mimemagic'
|
76
|
+
autoload :Term, 'epitools/term'
|
77
|
+
autoload :Iter, 'epitools/iter'
|
78
|
+
autoload :WM, 'epitools/wm'
|
79
|
+
autoload :TypedStruct, 'epitools/typed_struct'
|
80
|
+
autoload :Sys, 'epitools/sys'
|
81
|
+
autoload :JobRunner, 'epitools/job_runner'
|
81
82
|
autoload :SemanticVersion, 'epitools/semantic_version'
|
82
83
|
|
83
84
|
autoload :Matrix, 'epitools/core_ext/matrix'
|
@@ -87,7 +88,7 @@ autoreq(:Vector) { Matrix }
|
|
87
88
|
module Epi
|
88
89
|
autoload :Slop, 'epitools/slop'
|
89
90
|
end
|
90
|
-
autoreq(:Slop) do
|
91
|
+
autoreq(:Slop) do
|
91
92
|
Slop = Epi::Slop
|
92
93
|
end
|
93
94
|
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#
|
2
|
+
# Runs many jobs in parallel, and returns their interleaved results.
|
3
|
+
# (NOTE: The JobRunner can be run multiple times; each time the blocks
|
4
|
+
# will be executed again.)
|
5
|
+
#
|
6
|
+
# Examples:
|
7
|
+
#
|
8
|
+
# JobRunner.new do |jr|
|
9
|
+
# jr.add { 3 }
|
10
|
+
# jr.add { sleep 0.1; 2 }
|
11
|
+
# jr.add { sleep 0.2; 1 }
|
12
|
+
#
|
13
|
+
# jr.each_result do |result|
|
14
|
+
# p result
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# jr = JobRunner.new(
|
19
|
+
# proc { 1 },
|
20
|
+
# proc { 2 },
|
21
|
+
# proc { 3 }
|
22
|
+
# )
|
23
|
+
#
|
24
|
+
# 2.times do
|
25
|
+
# jr.each_result { |result| p result }
|
26
|
+
# end
|
27
|
+
#
|
28
|
+
class JobRunner
|
29
|
+
def initialize(*blocks)
|
30
|
+
@threads = []
|
31
|
+
@results = Thread::Queue.new
|
32
|
+
@jobs = []
|
33
|
+
@started = false
|
34
|
+
|
35
|
+
if blocks.any?
|
36
|
+
blocks.each { |block| add &block }
|
37
|
+
else
|
38
|
+
yield self if block_given?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def add(&block)
|
43
|
+
@jobs << block
|
44
|
+
end
|
45
|
+
|
46
|
+
def reap!
|
47
|
+
@threads.delete_if { |t| not t.alive? } if @threads.any?
|
48
|
+
end
|
49
|
+
|
50
|
+
def go!
|
51
|
+
raise "Error: already started" if @started
|
52
|
+
@started = true
|
53
|
+
@jobs.each do |job|
|
54
|
+
@threads << Thread.new do
|
55
|
+
@results << job.call
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def each_result
|
61
|
+
go! unless @started
|
62
|
+
|
63
|
+
loop do
|
64
|
+
yield @results.pop
|
65
|
+
reap!
|
66
|
+
break if @threads.empty? and @results.empty?
|
67
|
+
end
|
68
|
+
|
69
|
+
@started = false
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
|
74
|
+
if __FILE__ == $0
|
75
|
+
JobRunner.new do |jr|
|
76
|
+
jr.add { 3 }
|
77
|
+
jr.add { sleep 0.1; 2 }
|
78
|
+
jr.add { sleep 0.2; 1 }
|
79
|
+
|
80
|
+
jr.each_result do |result|
|
81
|
+
p result
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
puts
|
86
|
+
|
87
|
+
jr = JobRunner.new(
|
88
|
+
proc { 1 },
|
89
|
+
proc { 2 },
|
90
|
+
proc { 3 }
|
91
|
+
)
|
92
|
+
|
93
|
+
2.times do
|
94
|
+
jr.each_result { |r| p r }
|
95
|
+
puts
|
96
|
+
end
|
97
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: epitools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.129
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- epitron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- lib/epitools/hexdump.rb
|
73
73
|
- lib/epitools/iter.rb
|
74
74
|
- lib/epitools/its.rb
|
75
|
+
- lib/epitools/job_runner.rb
|
75
76
|
- lib/epitools/lcs.rb
|
76
77
|
- lib/epitools/mimemagic.rb
|
77
78
|
- lib/epitools/mimemagic_tables.rb
|