actory 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/Gemfile +6 -0
- data/LICENSE +202 -0
- data/README.md +361 -0
- data/actory.gemspec +25 -0
- data/bin/actory-receiver +22 -0
- data/config/global.yml +2 -0
- data/config/receiver.yml.example +8 -0
- data/config/sender.yml.example +14 -0
- data/example/fibonacci.rb +28 -0
- data/example/fibonacci_parallel_in_processes.rb +39 -0
- data/example/fibonacci_parallel_in_threads.rb +39 -0
- data/example/fibonacci_single.rb +39 -0
- data/example/lib/benchmark.rb +11 -0
- data/example/pi.rb +28 -0
- data/example/pi_parallel_in_processes.rb +39 -0
- data/example/pi_parallel_in_threads.rb +39 -0
- data/example/pi_single.rb +39 -0
- data/example/prime.rb +28 -0
- data/example/prime_parallel_in_processes.rb +39 -0
- data/example/prime_parallel_in_threads.rb +39 -0
- data/example/prime_single.rb +39 -0
- data/lib/actory.rb +66 -0
- data/lib/actory/error.rb +7 -0
- data/lib/actory/errors/generator.rb +13 -0
- data/lib/actory/receiver.rb +17 -0
- data/lib/actory/receiver/event_handler.rb +17 -0
- data/lib/actory/receiver/plugin/auth.rb +15 -0
- data/lib/actory/receiver/plugin/example_fibonacci.rb +17 -0
- data/lib/actory/receiver/plugin/example_pi.rb +20 -0
- data/lib/actory/receiver/plugin/example_prime.rb +18 -0
- data/lib/actory/receiver/plugin/processor_count.rb +15 -0
- data/lib/actory/receiver/plugin/reload.rb +16 -0
- data/lib/actory/receiver/plugin/system_info.rb +31 -0
- data/lib/actory/receiver/worker.rb +43 -0
- data/lib/actory/sender.rb +14 -0
- data/lib/actory/sender/dispatcher.rb +172 -0
- data/log/.keep +0 -0
- metadata +195 -0
data/actory.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "actory"
|
6
|
+
s.version = "0.0.2"
|
7
|
+
s.summary = %q{Actor model like, concurrent and distributed framework for Ruby.}
|
8
|
+
s.description = %q{Actor model like, concurrent and distributed framework for Ruby.}
|
9
|
+
s.authors = ["Keisuke Takahashi"]
|
10
|
+
s.email = ["keithseahus@gmail.com"]
|
11
|
+
s.files = `git ls-files`.split($\)
|
12
|
+
s.homepage = "https://github.com/keithseahus/actory"
|
13
|
+
|
14
|
+
s.license = "Apache 2.0"
|
15
|
+
s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
16
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
requires = []
|
20
|
+
requires += ['msgpack-rpc', 'parallel', 'facter', 'progressbar']
|
21
|
+
requires.each do |name|
|
22
|
+
s.add_development_dependency name
|
23
|
+
s.add_runtime_dependency name
|
24
|
+
end
|
25
|
+
end
|
data/bin/actory-receiver
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
require_relative '../lib/actory'
|
5
|
+
|
6
|
+
options = {}
|
7
|
+
OptionParser.new do |opts|
|
8
|
+
opts.banner = "Usage: receiver.rb [options]"
|
9
|
+
|
10
|
+
opts.on("-d", "--daemon", "Run as daemon") do |o|
|
11
|
+
options[:daemon] = o
|
12
|
+
end
|
13
|
+
end.parse!
|
14
|
+
|
15
|
+
begin
|
16
|
+
puts "Starting Actory Receiver (PID = #{Process.pid}, PGROUP = #{Process.getpgrp})"
|
17
|
+
Process.daemon if options[:daemon]
|
18
|
+
Actory::Receiver::Worker.new
|
19
|
+
rescue
|
20
|
+
retry
|
21
|
+
end
|
22
|
+
|
data/config/global.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
actors:
|
2
|
+
- "127.0.0.1:18800"
|
3
|
+
policy: "even" #even,random,safe-random
|
4
|
+
timeout: 3600
|
5
|
+
get_interval: 0.2
|
6
|
+
auth:
|
7
|
+
shared_key: "a pre-shared key"
|
8
|
+
timeout: 30
|
9
|
+
show_progress: true
|
10
|
+
reload_receiver_plugins: true
|
11
|
+
log:
|
12
|
+
type: "stdout" #stdout,file,both
|
13
|
+
level: "info" #fatal,error,warn,info,debug
|
14
|
+
target: "/var/log/actory/sender.log"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/actory'
|
4
|
+
require_relative './lib/benchmark'
|
5
|
+
|
6
|
+
METHOD = "fibonacci"
|
7
|
+
ARGS = (1..34).to_a
|
8
|
+
|
9
|
+
ret, time = Benchmark.measure do
|
10
|
+
begin
|
11
|
+
dispatcher = Actory::Sender::Dispatcher.new
|
12
|
+
res = dispatcher.message(METHOD, ARGS)
|
13
|
+
res.each do |r|
|
14
|
+
r.each do |k,v|
|
15
|
+
puts "#{k} returned #{v}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
rescue => e
|
19
|
+
@num == nil ? @num = 0 : @num += 1
|
20
|
+
puts e
|
21
|
+
puts $@
|
22
|
+
sleep 1
|
23
|
+
retry if @num < 2
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
puts " => #{ret}"
|
28
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "fibonacci"
|
7
|
+
ARGS = (1..34).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, processor_count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << Parallel.map(ARGS, :in_processes => processor_count) do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= processor_count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "fibonacci"
|
7
|
+
ARGS = (1..34).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, processor_count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << Parallel.map(ARGS, :in_threads => processor_count) do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= processor_count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "fibonacci"
|
7
|
+
ARGS = (1..34).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, ARGS.count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << ARGS.map do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= ARGS.count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|
data/example/pi.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/actory'
|
4
|
+
require_relative './lib/benchmark'
|
5
|
+
|
6
|
+
METHOD = "pi"
|
7
|
+
ARGS = (1..1000).to_a
|
8
|
+
|
9
|
+
ret, time = Benchmark.measure do
|
10
|
+
begin
|
11
|
+
dispatcher = Actory::Sender::Dispatcher.new
|
12
|
+
res = dispatcher.message(METHOD, ARGS)
|
13
|
+
res.each do |r|
|
14
|
+
r.each do |k,v|
|
15
|
+
puts "#{k} returned #{v}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
rescue => e
|
19
|
+
@num == nil ? @num = 0 : @num += 1
|
20
|
+
puts e
|
21
|
+
puts $@
|
22
|
+
sleep 1
|
23
|
+
retry if @num < 2
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
puts " => #{ret}"
|
28
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "pi"
|
7
|
+
ARGS = (1..1000).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, processor_count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << Parallel.map(ARGS, :in_processes => processor_count) do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= processor_count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "pi"
|
7
|
+
ARGS = (1..1000).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, processor_count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << Parallel.map(ARGS, :in_threads => processor_count) do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= processor_count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "pi"
|
7
|
+
ARGS = (1..1000).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, ARGS.count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << ARGS.map do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= ARGS.count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|
data/example/prime.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative '../lib/actory'
|
4
|
+
require_relative './lib/benchmark'
|
5
|
+
|
6
|
+
METHOD = "prime"
|
7
|
+
ARGS = (1..1000).to_a
|
8
|
+
|
9
|
+
ret, time = Benchmark.measure do
|
10
|
+
begin
|
11
|
+
dispatcher = Actory::Sender::Dispatcher.new
|
12
|
+
res = dispatcher.message(METHOD, ARGS)
|
13
|
+
res.each do |r|
|
14
|
+
r.each do |k,v|
|
15
|
+
puts "#{k} returned #{v}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
rescue => e
|
19
|
+
@num == nil ? @num = 0 : @num += 1
|
20
|
+
puts e
|
21
|
+
puts $@
|
22
|
+
sleep 1
|
23
|
+
retry if @num < 2
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
puts " => #{ret}"
|
28
|
+
puts " => time = #{time} sec"
|
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'progressbar'
|
5
|
+
|
6
|
+
METHOD = "prime"
|
7
|
+
ARGS = (1..1000).to_a
|
8
|
+
|
9
|
+
require_relative "../lib/actory/receiver/plugin/example_#{METHOD}"
|
10
|
+
require_relative './lib/benchmark'
|
11
|
+
|
12
|
+
res = []
|
13
|
+
processor_count = Parallel.processor_count
|
14
|
+
pbar = ProgressBar.new(METHOD, processor_count)
|
15
|
+
|
16
|
+
ret, time = Benchmark.measure do
|
17
|
+
begin
|
18
|
+
plugin = Actory::Receiver::Plugin.new
|
19
|
+
res << Parallel.map(ARGS, :in_processes => processor_count) do |arg|
|
20
|
+
begin
|
21
|
+
pbar.set pbar.current + 1 if pbar.current <= processor_count
|
22
|
+
rescue
|
23
|
+
end
|
24
|
+
plugin.send(METHOD, arg)
|
25
|
+
end
|
26
|
+
res.each do |v|
|
27
|
+
puts "returned #{v}"
|
28
|
+
end
|
29
|
+
rescue => e
|
30
|
+
@num == nil ? @num = 0 : @num += 1
|
31
|
+
puts e
|
32
|
+
puts $@
|
33
|
+
sleep 1
|
34
|
+
retry if @num < 2
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
puts " => #{ret}"
|
39
|
+
puts " => time = #{time} sec"
|