workaholic 0.0.0 → 0.0.1

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.
@@ -13,7 +13,7 @@ Parallel job runner.
13
13
  def run; @count += 1 end
14
14
  end
15
15
 
16
- worker = Workaholic::Worker.new
16
+ worker = Workaholic.new
17
17
  job = TestJob.new
18
18
 
19
19
  worker.start 100 do # 100 threads
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.0.1
@@ -1,6 +1,6 @@
1
1
  require 'workaholic/job'
2
2
  require 'workaholic/worker'
3
3
 
4
- module Workaholic
4
+ class Workaholic
5
5
 
6
6
  end
@@ -1,4 +1,4 @@
1
- module Workaholic
1
+ class Workaholic
2
2
  class Job
3
3
  def run
4
4
  # override me
@@ -1,60 +1,72 @@
1
1
  require 'thread'
2
2
 
3
- module Workaholic
3
+ class Workaholic
4
4
  class RunningError < StandardError; end
5
- class Worker
6
- attr_reader :queue
7
- attr_reader :state
8
-
9
- def initialize
10
- @queue = Queue.new
11
- @state = :stopped
12
- @threads ||= []
13
- end
5
+ attr_reader :queue
6
+ attr_reader :state
7
+ attr_reader :running
8
+
9
+ def initialize
10
+ @queue = Queue.new
11
+ @state = :stopped
12
+ @threads ||= []
13
+ @running = 0
14
+ end
14
15
 
15
- def start( thread_count = 2 )
16
- raise RunningError unless state == :stopped
16
+ def start( thread_count = 2 )
17
+ raise RunningError unless state == :stopped
17
18
 
18
- @state = :running
19
- thread_count.times do |i|
20
- t = Thread.start do
21
- while [:running, :stopping].include? @state
19
+ @state = :running
20
+ thread_count.times do |i|
21
+ t = Thread.start do
22
+ while [:running, :stopping].include? @state
23
+ begin
24
+ @running += 1
22
25
  run @queue.pop( true )
23
- sleep 0.016
24
- break if @state == :stopping
26
+ rescue ThreadError # when queue is empty
27
+ rescue
28
+ puts $!
29
+ puts caller.join("\n")
30
+ ensure
31
+ @running -= 1
25
32
  end
33
+ sleep 0.016
34
+ break if @state == :stopping
26
35
  end
27
- @threads.push t
28
- end
29
-
30
- if block_given?
31
- yield self
32
- sleep 0.1 while queue.size > 0
33
- stop
34
36
  end
37
+ @threads.push t
35
38
  end
36
39
 
37
- def stop
38
- @state = :stopping
39
- while !@threads.select{ |t| t.alive? }.empty?
40
- sleep 1
41
- end
42
- @state = :stopped
43
- @threads = []
40
+ if block_given?
41
+ yield self
42
+ sleep 0.1 while queue.size > 0
43
+ stop
44
44
  end
45
+ end
45
46
 
46
- def run( job )
47
- begin
48
- job.run
49
- rescue ThreadError # when queue is empty
50
- sleep 0.1
51
- rescue e
52
- raise e
53
- end
47
+ def running?
48
+ @queue.size > 0 || @running > 0
49
+ end
50
+
51
+ def stop
52
+ @state = :stopping
53
+ while !@threads.select{ |t| t.alive? }.empty?
54
+ sleep 1
54
55
  end
56
+ @state = :stopped
57
+ @threads = []
58
+ end
55
59
 
56
- def push( job )
57
- @queue.push job
60
+ def run( job )
61
+ begin
62
+ job.run
63
+ rescue
64
+ puts $!
65
+ puts caller.join("\n")
58
66
  end
59
67
  end
68
+
69
+ def push( job )
70
+ @queue.push job
71
+ end
60
72
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe Workaholic do
4
- let(:worker) { Workaholic::Worker.new }
4
+ let(:worker) { Workaholic.new }
5
5
 
6
6
  describe '#start' do
7
7
  subject { worker.start( 1 ) }
@@ -13,7 +13,7 @@ class TestJob < Workaholic::Job
13
13
  end
14
14
 
15
15
  describe Workaholic do
16
- let(:worker) { Workaholic::Worker.new }
16
+ let(:worker) { Workaholic.new }
17
17
  let(:job1) { TestJob.new }
18
18
  let(:job2) { TestJob.new }
19
19
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "workaholic"
8
- s.version = "0.0.0"
8
+ s.version = "0.0.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mewlist"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: workaholic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70164952939080 !ruby/object:Gem::Requirement
16
+ requirement: &70245403917700 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.8.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70164952939080
24
+ version_requirements: *70245403917700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &70164952938000 !ruby/object:Gem::Requirement
27
+ requirement: &70245403916960 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0.7'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70164952938000
35
+ version_requirements: *70245403916960
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &70164952936080 !ruby/object:Gem::Requirement
38
+ requirement: &70245403916260 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '3.12'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70164952936080
46
+ version_requirements: *70245403916260
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: bundler
49
- requirement: &70164952847480 !ruby/object:Gem::Requirement
49
+ requirement: &70245403915400 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70164952847480
57
+ version_requirements: *70245403915400
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jeweler
60
- requirement: &70164952846900 !ruby/object:Gem::Requirement
60
+ requirement: &70245403914520 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.8.3
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70164952846900
68
+ version_requirements: *70245403914520
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: simplecov
71
- requirement: &70164952846080 !ruby/object:Gem::Requirement
71
+ requirement: &70245403908180 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70164952846080
79
+ version_requirements: *70245403908180
80
80
  description: Parallel job runner
81
81
  email: mewlist@mewlist.com
82
82
  executables: []
@@ -116,7 +116,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
116
116
  version: '0'
117
117
  segments:
118
118
  - 0
119
- hash: -4376389024857191322
119
+ hash: 3261985381907931287
120
120
  required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  none: false
122
122
  requirements: