workers 0.0.5 → 0.0.6

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.
data/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  Workers is a Ruby gem for performing work in background threads.
4
4
  Design goals include high performance, low latency, simple API, customizability, and multi-layered architecture.
5
+ The main features include workers, timers, and actors.
5
6
 
6
7
  ## Installation
7
8
 
data/lib/workers.rb CHANGED
@@ -10,10 +10,6 @@ require 'workers/log_proxy'
10
10
  require 'workers/scheduler'
11
11
  require 'workers/timer'
12
12
  require 'workers/periodic_timer'
13
- require 'workers/mailbox'
14
- require 'workers/actor'
15
- require 'workers/dedicated_actor'
16
- require 'workers/registry'
17
13
 
18
14
  module Workers
19
15
  def self.pool
@@ -33,18 +29,8 @@ module Workers
33
29
  @scheduler.dispose if @scheduler
34
30
  @scheduler = val
35
31
  end
36
-
37
- def self.registry
38
- return @registry ||= Workers::Registry.new
39
- end
40
-
41
- def self.registry=(val)
42
- @registry.dispose if @registry
43
- @registry = val
44
- end
45
32
  end
46
33
 
47
34
  # Force initialization of defaults.
48
35
  Workers.pool
49
36
  Workers.scheduler
50
- Workers.registry
@@ -1,3 +1,3 @@
1
1
  module Workers
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-19 00:00:00.000000000 Z
12
+ date: 2013-01-20 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Simple Ruby workers for performing work in background threads.
15
15
  email:
@@ -24,15 +24,11 @@ files:
24
24
  - README.md
25
25
  - Rakefile
26
26
  - lib/workers.rb
27
- - lib/workers/actor.rb
28
- - lib/workers/dedicated_actor.rb
29
27
  - lib/workers/event.rb
30
28
  - lib/workers/helpers.rb
31
29
  - lib/workers/log_proxy.rb
32
- - lib/workers/mailbox.rb
33
30
  - lib/workers/periodic_timer.rb
34
31
  - lib/workers/pool.rb
35
- - lib/workers/registry.rb
36
32
  - lib/workers/scheduler.rb
37
33
  - lib/workers/timer.rb
38
34
  - lib/workers/version.rb
data/lib/workers/actor.rb DELETED
@@ -1,79 +0,0 @@
1
- module Workers
2
- class Actor
3
- include Workers::Helpers
4
-
5
- def initialize(options = {})
6
- @logger = Workers::LogProxy.new(options[:logger])
7
- @dedicated = options[:dedicated] || false
8
- @mailbox = options[:mailbox] || Workers::Mailbox.new
9
- @registry = options[:registry] || Workers.registry
10
- @name = options[:name]
11
- @pool = @dedicated ? Workers::Pool.new(:size => 1) : (options[:pool] || Workers.pool)
12
- @alive = true
13
-
14
- @registry.register(self)
15
- end
16
-
17
- def enqueue(command, data = nil)
18
- return false unless @alive
19
-
20
- @mailbox.push(Event.new(command, data))
21
-
22
- @pool.perform do
23
- process_events
24
- end
25
-
26
- return true
27
- end
28
-
29
- def alive?
30
- @mailbox.synchronize do
31
- return @alive
32
- end
33
- end
34
-
35
- def name
36
- return @name
37
- end
38
-
39
- def identifier
40
- return @name ? "#{object_id}:#{@name}" : object_id
41
- end
42
-
43
- private
44
-
45
- def process_events
46
- while (event = @mailbox.shift)
47
- case event.command
48
- when :shutdown
49
- shutdown_handler(event)
50
- @pool.shutdown if @dedicated
51
- @mailbox.synchronize do
52
- @alive = false
53
- end
54
- else
55
- process_event(event)
56
- end
57
- end
58
- rescue Exception => e
59
- @alive = false
60
- exception_handler(e)
61
- end
62
-
63
- #
64
- # Subclass and override the below methods.
65
- #
66
-
67
- def process_event(event)
68
- puts "Actor (#{identifier}) received event (#{event.inspect})."
69
- end
70
-
71
- def exception_handler(e)
72
- puts concat_e("Actor (#{identifier}) died.", e)
73
- end
74
-
75
- def shutdown_handler(event)
76
- puts "Actor (#{identifier}) is shutting down."
77
- end
78
- end
79
- end
@@ -1,9 +0,0 @@
1
- module Workers
2
- class DedicatedActor < Workers::Actor
3
- def initialize(options = {})
4
- options[:dedicated] = true
5
-
6
- super(options)
7
- end
8
- end
9
- end
@@ -1,26 +0,0 @@
1
- module Workers
2
- class Mailbox
3
- def initialize(options = {})
4
- @messages = []
5
- @mutex = Mutex.new
6
- end
7
-
8
- def push(event)
9
- @mutex.synchronize do
10
- @messages.push(event)
11
- end
12
- end
13
-
14
- def shift
15
- @mutex.synchronize do
16
- @messages.shift
17
- end
18
- end
19
-
20
- def synchronize(&block)
21
- @mutex.synchronize do
22
- block.call
23
- end
24
- end
25
- end
26
- end
@@ -1,45 +0,0 @@
1
- module Workers
2
- class Registry
3
- def initialize
4
- @mutex = Mutex.new
5
- @actors_by_name = {}
6
- end
7
-
8
- def register(actor)
9
- @mutex.synchronize do
10
- return false unless actor.name
11
-
12
- if @actors_by_name[actor.name]
13
- raise "Actor already exists (#{actor.name})."
14
- else
15
- @actors_by_name[actor.name] = actor
16
- end
17
-
18
- return true
19
- end
20
- end
21
-
22
- def unregister(actor)
23
- @mutex.synchronize do
24
- return false unless actor.name
25
- return false unless @actors_by_name[actor.name]
26
-
27
- @actors_by_name.delete(actor.name)
28
-
29
- return true
30
- end
31
- end
32
-
33
- def [](val)
34
- @mutex.synchronize do
35
- return @actors_by_name[val]
36
- end
37
- end
38
-
39
- def dispose
40
- @mutex.synchronize do
41
- @actors_by_name.clear
42
- end
43
- end
44
- end
45
- end