noda 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -45,6 +45,7 @@ task :default => :test
45
45
  require 'rake/rdoctask'
46
46
  Rake::RDocTask.new do |rdoc|
47
47
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+ rdoc.options << '-c UTF8'
48
49
 
49
50
  rdoc.rdoc_dir = 'rdoc'
50
51
  rdoc.title = "noda #{version}"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 0.0.11
data/lib/noda.rb CHANGED
File without changes
@@ -1,5 +1,8 @@
1
1
 
2
2
  module Noda
3
+ #=�T�v
4
+ # �W���u��Ԃ��Ď�����WEB�T�[�o�[�ł��B
5
+ # DRB�ɐڑ����āC�L���[�c���C���L�n�b�V���e�[�u���A�L���[�̒��g�����邱�Ƃ��o���܂��D
3
6
 
4
7
  class JobMonitor
5
8
  require 'webrick'
@@ -1,11 +1,23 @@
1
1
  module Noda
2
2
 
3
+ # ジョブワーカー
4
+ #
5
+ # ジョブを待ち受けるスレッドです。
6
+ # Taskを取りだして実行します.
7
+ # ip=127.0.0.1
8
+ # w=Noda::JobWorker.new("#{ip}", "10001")
9
+ # t = DRb.start_service("druby://#{ip}:10101",w)
10
+ # w.start
11
+ #
12
+ #
3
13
 
4
14
  class JobWorker
5
15
  attr_reader :thread
6
16
  attr_accessor :max_retry_connect , :wait_time_to_retry
7
- def initialize( job_server_addr="localhost",job_server_port="10001" )
8
- @server_uri = "druby://#{job_server_addr}:#{job_server_port}"
17
+ # * server_addr ジョブサーバーアドレス、またはホスト名
18
+ # * server_port ジョブサーバーポート
19
+ def initialize( server_addr="localhost",server_port="10001",q="" )
20
+ @server_uri = "druby://#{server_addr}:#{server_port}/?#{q}"
9
21
  @max_retry_connect = 30
10
22
  @wait_time_to_retry = 2
11
23
  require "socket"
@@ -13,6 +25,7 @@ class JobWorker
13
25
  self.connect
14
26
  self
15
27
  end
28
+ # 内部的に使います。ジョブサーバーへ接続
16
29
  def connect_job_server
17
30
  error_conter = 0
18
31
  begin
@@ -26,6 +39,11 @@ class JobWorker
26
39
  retry
27
40
  end
28
41
  end
42
+ # 担当ジョブからタスクを実行します.
43
+ #
44
+ # タスクは do_task(hash)実装が必須
45
+ # タスクのクラス定義はrequire必須.(start前にrequire)
46
+ # タスクのクラス定義はサーバー側から自動ロード(eval)します.
29
47
  def handle_task()
30
48
  # @logger.info("self.class@#{@local_addr}#{self.object_id}"){"i try to pop a task."}
31
49
  task = @job.input.pop
@@ -36,10 +54,14 @@ class JobWorker
36
54
  result = task.do_task(@job.hash_table)
37
55
  @job.output.push result
38
56
  end
57
+ # クラス定義をEvalする。クラス定義はサーバーから取り出す.
58
+ # ワーカー側にクラス定義を動的に渡すときに使います.
59
+ # *name クラス名
39
60
  def load_class(name)
40
61
  s = @job.task_class(name)
41
62
  Noda.module_eval(s)
42
63
  end
64
+ # ワーカーのメインスレッドを起動します.start で使います.
43
65
  def init_thread
44
66
  @table = @job.hash_table
45
67
  @thread= Thread.new{
@@ -49,16 +71,29 @@ class JobWorker
49
71
  }
50
72
  }
51
73
  end
74
+
75
+ # サーバーに接続します
76
+ #
52
77
  def connect
53
78
  self.connect_job_server
54
79
  end
80
+
81
+ # 処理を開始します.
82
+ #
83
+ # threadを返します. worker を起動しっぱなしにするなら thread.joinしてください
55
84
  def start
56
85
  self.init_thread
57
86
  @thread.join
58
87
  end
88
+
89
+ # ワーカースレッドの状態を取り出します.
90
+ #
91
+ # マルチスレッドでブロックされてるとsleep になります
59
92
  def status
60
93
  @thread.status if @thread
61
94
  end
95
+
96
+ # スレッド停止します.このインスタンスは死にません.start で再起動します.
62
97
  def stop
63
98
  @thread.kill
64
99
  end
data/lib/noda/rqueue.rb CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  module Noda
4
4
  require 'monitor'
5
+ # �W���u�̃L���[����
6
+ # �L���[�̓X���b�h�Z�[�t�ɏ����Ă���
7
+ #
8
+ #
5
9
  class RQueue
6
10
  include DRb::DRbUndumped
7
11
  attr_reader :name
data/noda.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{noda}
8
- s.version = "0.0.10"
8
+ s.version = "0.0.11"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["takuya"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noda
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 10
10
- version: 0.0.10
9
+ - 11
10
+ version: 0.0.11
11
11
  platform: ruby
12
12
  authors:
13
13
  - takuya