actory 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +202 -0
  5. data/README.md +361 -0
  6. data/actory.gemspec +25 -0
  7. data/bin/actory-receiver +22 -0
  8. data/config/global.yml +2 -0
  9. data/config/receiver.yml.example +8 -0
  10. data/config/sender.yml.example +14 -0
  11. data/example/fibonacci.rb +28 -0
  12. data/example/fibonacci_parallel_in_processes.rb +39 -0
  13. data/example/fibonacci_parallel_in_threads.rb +39 -0
  14. data/example/fibonacci_single.rb +39 -0
  15. data/example/lib/benchmark.rb +11 -0
  16. data/example/pi.rb +28 -0
  17. data/example/pi_parallel_in_processes.rb +39 -0
  18. data/example/pi_parallel_in_threads.rb +39 -0
  19. data/example/pi_single.rb +39 -0
  20. data/example/prime.rb +28 -0
  21. data/example/prime_parallel_in_processes.rb +39 -0
  22. data/example/prime_parallel_in_threads.rb +39 -0
  23. data/example/prime_single.rb +39 -0
  24. data/lib/actory.rb +66 -0
  25. data/lib/actory/error.rb +7 -0
  26. data/lib/actory/errors/generator.rb +13 -0
  27. data/lib/actory/receiver.rb +17 -0
  28. data/lib/actory/receiver/event_handler.rb +17 -0
  29. data/lib/actory/receiver/plugin/auth.rb +15 -0
  30. data/lib/actory/receiver/plugin/example_fibonacci.rb +17 -0
  31. data/lib/actory/receiver/plugin/example_pi.rb +20 -0
  32. data/lib/actory/receiver/plugin/example_prime.rb +18 -0
  33. data/lib/actory/receiver/plugin/processor_count.rb +15 -0
  34. data/lib/actory/receiver/plugin/reload.rb +16 -0
  35. data/lib/actory/receiver/plugin/system_info.rb +31 -0
  36. data/lib/actory/receiver/worker.rb +43 -0
  37. data/lib/actory/sender.rb +14 -0
  38. data/lib/actory/sender/dispatcher.rb +172 -0
  39. data/log/.keep +0 -0
  40. metadata +195 -0
@@ -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
@@ -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
+
@@ -0,0 +1,2 @@
1
+ config: "/etc/actory"
2
+ #config: "../../../config"
@@ -0,0 +1,8 @@
1
+ protocol: "tcp"
2
+ address: "0.0.0.0"
3
+ port: 18800
4
+ shared_key: "a pre-shared key"
5
+ log:
6
+ type: "stdout" #stdout,file,both
7
+ level: "info" #fatal,error,warn,info,debug
8
+ target: "/var/log/actory/receiver.log"
@@ -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"
@@ -0,0 +1,11 @@
1
+ module Benchmark
2
+ module_function
3
+
4
+ def measure(&block)
5
+ t0 = Time.now
6
+ ret = block.call
7
+ span = Time.now - t0
8
+ return ret, span
9
+ end
10
+
11
+ end
@@ -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"
@@ -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"