hustle 0.0.3 → 0.0.4
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/hustle.rb +3 -86
- data/lib/hustle/hustler.rb +85 -0
- data/lib/hustle/runner.rb +0 -2
- data/lib/hustle/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8fb122e01f5a7a7434a81d4407794b313cd36a4
|
4
|
+
data.tar.gz: f90f07d87d1b73ccdd480a0de9be5fbab9c4db2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f393b3dfc7c25a44434bc342a33d56a6434d70a7e806083de142eaeaa1c5bb79ad4b56f4e65136e49d2e151a11db05d127dc1e275657c6a547c3744d3fda14a3
|
7
|
+
data.tar.gz: f48ebf55c0f69ad9f64917ebfe8ddea5e3446647ac2e7e89e9dd442760e51bab96b179d3ac8522195428bcc00b77a43b41bc2d5dce028412b9c88d9e205ad4f9
|
data/lib/hustle.rb
CHANGED
@@ -1,97 +1,14 @@
|
|
1
|
-
require_relative "hustle/version"
|
2
|
-
require_relative "hustle/runner"
|
3
|
-
require "os"
|
4
|
-
require "socket"
|
5
1
|
require "drb"
|
6
|
-
require "thread"
|
7
|
-
require "singleton"
|
8
2
|
require "forwardable"
|
9
|
-
|
3
|
+
require_relative "hustle/version"
|
4
|
+
require_relative "hustle/runner"
|
5
|
+
require_relative "hustle/hustler"
|
10
6
|
|
11
7
|
module Hustle
|
12
8
|
class << self
|
13
9
|
extend Forwardable
|
14
10
|
def_delegators :"Hustle::Hustler.instance", :go, :wait
|
15
11
|
end
|
16
|
-
|
17
|
-
class Hustler
|
18
|
-
include Singleton
|
19
|
-
include MonitorMixin
|
20
|
-
|
21
|
-
def cores
|
22
|
-
@cores ||= OS.cpu_count
|
23
|
-
end
|
24
|
-
|
25
|
-
def active_runners
|
26
|
-
@active_runners ||= {}
|
27
|
-
end
|
28
|
-
|
29
|
-
def start_drb
|
30
|
-
@drb ||= begin
|
31
|
-
DRb.start_service
|
32
|
-
sleep 0 while server.is_a?(DRb::DRbServerNotFound)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def stop_drb
|
37
|
-
synchronize do
|
38
|
-
if active_runners.empty?
|
39
|
-
DRb.stop_service
|
40
|
-
@drb = nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def go(callback: -> (val) {}, &block)
|
46
|
-
start_drb
|
47
|
-
sleep 0 while active_runners.size >= cores.size
|
48
|
-
uri = "druby://127.0.0.1:#{random_port}"
|
49
|
-
runner = Runner.new(uri)
|
50
|
-
runner.start_remote_instance
|
51
|
-
synchronize do
|
52
|
-
active_runners[runner.pid] = runner
|
53
|
-
end
|
54
|
-
finish runner, callback, &block
|
55
|
-
end
|
56
|
-
|
57
|
-
def wait
|
58
|
-
active_runners.each do |_, runner|
|
59
|
-
runner.callback_thread.join
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
|
65
|
-
def random_port
|
66
|
-
socket = Socket.new(:INET, :STREAM, 0)
|
67
|
-
socket.bind(Addrinfo.tcp("127.0.0.1", 0))
|
68
|
-
port = socket.local_address.ip_port
|
69
|
-
socket.close
|
70
|
-
port
|
71
|
-
end
|
72
|
-
|
73
|
-
def finish(runner, callback, &block)
|
74
|
-
runner.callback_thread = Thread.new do
|
75
|
-
value = runner.run_remote(&block)
|
76
|
-
runner.stop_remote_instance
|
77
|
-
synchronize do
|
78
|
-
active_runners.delete(runner.pid)
|
79
|
-
end
|
80
|
-
stop_drb
|
81
|
-
callback.call value
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def server
|
86
|
-
begin
|
87
|
-
DRb.current_server
|
88
|
-
rescue DRb::DRbServerNotFound => e
|
89
|
-
e
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
12
|
end
|
96
13
|
|
97
14
|
Signal.trap(0) do
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require "os"
|
2
|
+
require "socket"
|
3
|
+
require "thread"
|
4
|
+
require "singleton"
|
5
|
+
require "monitor"
|
6
|
+
|
7
|
+
module Hustle
|
8
|
+
class Hustler
|
9
|
+
include Singleton
|
10
|
+
include MonitorMixin
|
11
|
+
|
12
|
+
def cores
|
13
|
+
@cores ||= OS.cpu_count
|
14
|
+
end
|
15
|
+
|
16
|
+
def active_runners
|
17
|
+
@active_runners ||= {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def start_drb
|
21
|
+
@drb ||= begin
|
22
|
+
DRb.start_service
|
23
|
+
sleep 0 while server.is_a?(DRb::DRbServerNotFound)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def stop_drb
|
28
|
+
synchronize do
|
29
|
+
if active_runners.empty?
|
30
|
+
DRb.stop_service
|
31
|
+
@drb = nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def go(callback: -> (val) {}, &block)
|
37
|
+
start_drb
|
38
|
+
sleep 0 while active_runners.size >= cores.size
|
39
|
+
uri = "druby://127.0.0.1:#{random_port}"
|
40
|
+
runner = Runner.new(uri)
|
41
|
+
runner.start_remote_instance
|
42
|
+
synchronize do
|
43
|
+
active_runners[runner.pid] = runner
|
44
|
+
end
|
45
|
+
finish runner, callback, &block
|
46
|
+
end
|
47
|
+
|
48
|
+
def wait
|
49
|
+
active_runners.each do |_, runner|
|
50
|
+
runner.callback_thread.join
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def random_port
|
57
|
+
socket = Socket.new(:INET, :STREAM, 0)
|
58
|
+
socket.bind(Addrinfo.tcp("127.0.0.1", 0))
|
59
|
+
port = socket.local_address.ip_port
|
60
|
+
socket.close
|
61
|
+
port
|
62
|
+
end
|
63
|
+
|
64
|
+
def finish(runner, callback, &block)
|
65
|
+
runner.callback_thread = Thread.new do
|
66
|
+
value = runner.run_remote(&block)
|
67
|
+
runner.stop_remote_instance
|
68
|
+
synchronize do
|
69
|
+
active_runners.delete(runner.pid)
|
70
|
+
end
|
71
|
+
stop_drb
|
72
|
+
callback.call value
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def server
|
77
|
+
begin
|
78
|
+
DRb.current_server
|
79
|
+
rescue DRb::DRbServerNotFound => e
|
80
|
+
e
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
data/lib/hustle/runner.rb
CHANGED
data/lib/hustle/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hustle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Hopkins
|
@@ -88,6 +88,7 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- lib/hustle.rb
|
91
|
+
- lib/hustle/hustler.rb
|
91
92
|
- lib/hustle/runner.rb
|
92
93
|
- lib/hustle/version.rb
|
93
94
|
- test/hustle_test.rb
|