actory 0.0.2

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.
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"