rask 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -15,8 +15,8 @@
15
15
 
16
16
  == FEATURES/PROBLEMS:
17
17
 
18
- * シンプルなステートマシンの記述 (Act As State Machine と似てる)
19
- * タスク状態の永続化
18
+ * 「途中で止めても復帰できるタスクエンジン」
19
+ * シンプルなステートマシンの記述 (Act As State Machine と似てる)と状態の永続化
20
20
  * デーモン起動によるブロッキング回避
21
21
  * たとえば、webなんかだとタイムアウト回避処理が容易に記述できる
22
22
  * webビデオエンコーダとか、サイトの大量メール配信とか
@@ -25,13 +25,15 @@
25
25
  * 永続化はMarshal使っているだけなので drb 組み合わせて、強力な web のバックエンド構築ができる気がするが試していない
26
26
  * 内部動作はワーカースレッドで処理しており、スレッド数も変更できるので、処理に応じたチューンが可能
27
27
  * CPUパワーやメモリ量から逆算して、並列化の度合いを調整することでアホみたいにサーバが重たい状況も回避できる。
28
+ * タスクのグルーピング
29
+ * ユーザー毎にタスクを分けて管理したりとか、ブラウザゲーム用途でも使える。
28
30
 
29
31
  == SYNOPSIS:
30
32
 
31
33
  * サンプルコード (samples/test.rb)
32
34
  require 'rubygems'
33
35
  require 'rask'
34
-
36
+
35
37
  # 数値のカウントアップ 10 までカウントするタスク
36
38
  class CountupTask < Rask::Task
37
39
  # define_state でステートマシンを作ることができます
@@ -55,10 +57,9 @@
55
57
  destroy # タスクの破棄をする
56
58
  end
57
59
  end
58
-
59
- task = CountupTask.new # タスクの作成
60
- Rask.insert task # タスクの登録
61
-
60
+
61
+ Rask.insert CountupTask.new # タスクの登録
62
+
62
63
  Rask.daemon # デーモンとして実行
63
64
 
64
65
  タスク定義と、デーモンの実行コードがそろったら以下のようにデーモンを起動
@@ -78,9 +79,7 @@ kill -TERM されたプロセスは、そのタスクのステートマシンの
78
79
  シビアな運用環境で役立つはず。
79
80
 
80
81
 
81
-
82
-
83
- * タスクの分類
82
+ === タスクの分類
84
83
  タスクにグループ名を指定しておくことで、特定のグループ名を持つタスクだけを取得したり、処理することができます。
85
84
  「特定のユーザーが起動したタスクのみを監視したい」といったことが可能です。
86
85
 
@@ -96,14 +95,12 @@ kill -TERM されたプロセスは、そのタスクのステートマシンの
96
95
  p "TaskState >>>>> #{task.state} \n"
97
96
  }
98
97
 
99
- * チューニング
100
-
101
- ** ワーカースレッドの数を調整
98
+ === チューニング
99
+ * ワーカースレッドの数を調整
102
100
  スレッドを増やすと、ワーカーが次々とタスクを処理してくれるので、タスク開始までの待ち時間が緩和されます。
103
101
  Rask.thread_max_count = 100
104
102
  Rask.daemon
105
-
106
- ** メインスレッドのポーリング間隔の調整
103
+ * メインスレッドのポーリング間隔の調整
107
104
  デーモン起動時のオプションでポーリングの間隔を調整できます。
108
105
  Rask.daemon(:sleep=>0.5)
109
106
 
@@ -111,6 +108,17 @@ kill -TERM されたプロセスは、そのタスクのステートマシンの
111
108
 
112
109
  ruby1.8.7で作ってる
113
110
 
111
+ == Changelog
112
+ * v0.0.0
113
+ * 作ってみた
114
+ * v0.0.1
115
+ * 方向性をはっきりさせた
116
+ * v0.0.2
117
+ * グループ化、安全なプロセス中断処理追加
118
+ * v0.0.3
119
+ * read メソッドで取得したインスタンスの実行制限処理
120
+ * 英語ドキュメントの追加(/doc)
121
+
114
122
  == INSTALL:
115
123
 
116
124
  gem install rask
data/doc/Rask.html CHANGED
@@ -31,9 +31,6 @@
31
31
  <li><a href="./lib/rask_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
32
32
  class="thickbox" title="lib/rask.rb">lib/rask.rb</a></li>
33
33
 
34
- <li><a href="./lib/rask/state_machine_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
35
- class="thickbox" title="lib/rask/state_machine.rb">lib/rask/state_machine.rb</a></li>
36
-
37
34
  </ul>
38
35
  </div>
39
36
  </div>
@@ -52,8 +49,6 @@
52
49
  <h3 class="section-header">Namespace</h3>
53
50
  <ul class="link-list">
54
51
 
55
- <li><span class="type">MODULE</span> <a href="Rask/StateMachine.html">Rask::StateMachine</a></li>
56
-
57
52
  <li><span class="type">CLASS</span> <a href="Rask/Task.html">Rask::Task</a></li>
58
53
 
59
54
  </ul>
@@ -66,29 +61,33 @@
66
61
  <h3 class="section-header">Methods</h3>
67
62
  <ul class="link-list">
68
63
 
69
- <li><a href="#M000012">::base_directory=</a></li>
64
+ <li><a href="#M000007">::base_directory=</a></li>
65
+
66
+ <li><a href="#M000017">::daemon</a></li>
70
67
 
71
- <li><a href="#M000022">::daemon</a></li>
68
+ <li><a href="#M000016">::destroy</a></li>
72
69
 
73
- <li><a href="#M000020">::destroy</a></li>
70
+ <li><a href="#M000018">::initialize_storage</a></li>
74
71
 
75
- <li><a href="#M000019">::initialize_storage</a></li>
72
+ <li><a href="#M000011">::insert</a></li>
76
73
 
77
- <li><a href="#M000016">::insert</a></li>
74
+ <li><a href="#M000010">::pid_path</a></li>
78
75
 
79
- <li><a href="#M000015">::pid_path</a></li>
76
+ <li><a href="#M000014">::read</a></li>
80
77
 
81
- <li><a href="#M000017">::run</a></li>
78
+ <li><a href="#M000012">::run</a></li>
82
79
 
83
- <li><a href="#M000021">::safe_class_name</a></li>
80
+ <li><a href="#M000013">::run_all</a></li>
84
81
 
85
- <li><a href="#M000023">::safe_exit</a></li>
82
+ <li><a href="#M000019">::safe_class_name</a></li>
86
83
 
87
- <li><a href="#M000014">::task_path</a></li>
84
+ <li><a href="#M000020">::safe_exit</a></li>
88
85
 
89
- <li><a href="#M000018">::tasks</a></li>
86
+ <li><a href="#M000015">::task_ids</a></li>
90
87
 
91
- <li><a href="#M000013">::thread_max_count=</a></li>
88
+ <li><a href="#M000009">::task_path</a></li>
89
+
90
+ <li><a href="#M000008">::thread_max_count=</a></li>
92
91
 
93
92
  </ul>
94
93
  </div>
@@ -119,10 +118,6 @@
119
118
 
120
119
  <li><a href="./Rask.html">Rask</a></li>
121
120
 
122
- <li><a href="./Rask/StateMachine.html">Rask::StateMachine</a></li>
123
-
124
- <li><a href="./Rask/StateMachine/ClassMethods.html">Rask::StateMachine::ClassMethods</a></li>
125
-
126
121
  <li><a href="./Rask/Task.html">Rask::Task</a></li>
127
122
 
128
123
  </ul>
@@ -149,6 +144,39 @@
149
144
  </td></tr>
150
145
  </table>
151
146
  <h2><a href="Rask.html">Rask</a> is terminatable task engine</h2>
147
+ <h4>sample code</h4>
148
+ <pre>
149
+ require 'rubygems'
150
+ require 'rask'
151
+
152
+ # task of count up to 10
153
+ class CountupTask &lt; Rask::Task
154
+ # define statemachine states
155
+ define_state :start, :initial =&gt; true # initial state
156
+ define_state :running # run
157
+ define_state :finish, :from =&gt; [:running] # finish (only from :running)
158
+
159
+ def start # same name as state definition(define_state)
160
+ @count = 0
161
+ p &quot;start&quot;
162
+ transition_to_running # transition to :running
163
+ end
164
+
165
+ def running
166
+ p &quot;running count =&gt; #{@count+=1}&quot;
167
+ transition_to_finish if @count&gt;=10 # transition to :finish
168
+ end
169
+
170
+ def finish
171
+ p &quot;finished&quot;
172
+ destroy # destroy task myself
173
+ end
174
+ end
175
+
176
+ Rask.insert CountupTask.new # insert the task
177
+
178
+ Rask.daemon # run as a daemon
179
+ </pre>
152
180
 
153
181
  </div>
154
182
 
@@ -165,7 +193,7 @@
165
193
 
166
194
 
167
195
  <div id="base-directory--method" class="method-detail ">
168
- <a name="M000012"></a>
196
+ <a name="M000007"></a>
169
197
 
170
198
  <div class="method-heading">
171
199
 
@@ -177,20 +205,22 @@
177
205
 
178
206
  <div class="method-description">
179
207
 
180
- <h4>Set base storage directory</h4>
181
- <p>
182
- default is &#8216;/tmp/rask&#8216;
183
- </p>
208
+ <h3>Set base storage directory</h3>
209
+ <table>
210
+ <tr><td valign="top">default :</td><td>/tmp/rask
211
+
212
+ </td></tr>
213
+ </table>
184
214
 
185
215
 
186
216
 
187
217
  <div class="method-source-code"
188
218
  id="base-directory--source">
189
219
  <pre>
190
- <span class="ruby-comment cmt"># File lib/rask.rb, line 89</span>
191
- 89: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">base_directory=</span>(<span class="ruby-identifier">new_directory</span>)
192
- 90: <span class="ruby-ivar">@@base_dir</span> = <span class="ruby-identifier">new_directory</span>
193
- 91: <span class="ruby-keyword kw">end</span></pre>
220
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 144</span>
221
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">base_directory=</span>(<span class="ruby-identifier">new_directory</span>)
222
+ <span class="ruby-ivar">@@base_dir</span> = <span class="ruby-identifier">new_directory</span>
223
+ <span class="ruby-keyword kw">end</span></pre>
194
224
  </div>
195
225
 
196
226
  </div>
@@ -200,83 +230,91 @@ default is &#8216;/tmp/rask&#8216;
200
230
 
201
231
 
202
232
  <div id="daemon-method" class="method-detail ">
203
- <a name="M000022"></a>
233
+ <a name="M000017"></a>
204
234
 
205
235
  <div class="method-heading">
206
236
 
207
237
  <span class="method-name">daemon</span><span
208
- class="method-args">(options = { :class=>nil, :group=>nil, :sleep=>0.1 })</span>
238
+ class="method-args">(options = {:class=>nil, :group=>nil, :sleep=>0.1})</span>
209
239
  <span class="method-click-advice">click to toggle source</span>
210
240
 
211
241
  </div>
212
242
 
213
243
  <div class="method-description">
214
244
 
215
- <h4>Start daemon process</h4>
216
- <p>
217
- It is possible to specify the the task group.
218
- </p>
219
- <pre>
220
- Rask.daemon(:group=&gt;'TaskGroup')
221
- </pre>
245
+ <h3>Start a daemon process</h3>
246
+ <dl>
247
+ <dt>options</dt><dd>class :: Only the instance of specified class.
248
+
249
+ <table>
250
+ <tr><td valign="top">group :</td><td>Only the instance of specified group. see also Task::initialize.
251
+
252
+ </td></tr>
253
+ <tr><td valign="top">sleep :</td><td>Polling interval daemon process.
254
+
255
+ </td></tr>
256
+ </table>
257
+ </dd>
258
+ </dl>
222
259
 
223
260
 
224
261
 
225
262
  <div class="method-source-code"
226
263
  id="daemon-source">
227
264
  <pre>
228
- <span class="ruby-comment cmt"># File lib/rask.rb, line 183</span>
229
- 183: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">daemon</span>(<span class="ruby-identifier">options</span> = { <span class="ruby-identifier">:class</span>=<span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:group=</span><span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:sleep=</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span><span class="ruby-value">.1</span> })
230
- 184: <span class="ruby-identifier">print</span> <span class="ruby-value str">&quot;daemon start\n&quot;</span>
231
- 185: <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
232
- 186: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setsid</span>
233
- 187: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span> <span class="ruby-identifier">pid_path</span>
234
- 188: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;already running rask process. #{File.basename($0)}&quot;</span>
235
- 189: <span class="ruby-keyword kw">return</span>
236
- 190: <span class="ruby-keyword kw">end</span>
237
- 191: <span class="ruby-identifier">open</span>(<span class="ruby-identifier">pid_path</span>,<span class="ruby-value str">&quot;w&quot;</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span> <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>}
238
- 192:
239
- 193: <span class="ruby-comment cmt"># create worker threads</span>
240
- 194: <span class="ruby-identifier">threads</span> = []
241
- 195: <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword kw">in</span> <span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-ivar">@@thread_max_count</span> <span class="ruby-keyword kw">do</span>
242
- 196: <span class="ruby-identifier">threads</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Thread</span><span class="ruby-operator">::</span><span class="ruby-identifier">new</span>(<span class="ruby-identifier">i</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">thread_id</span><span class="ruby-operator">|</span>
243
- 197: <span class="ruby-ivar">@@thread_count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
244
- 198: <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@@terminated</span>
245
- 199: <span class="ruby-identifier">d</span> = <span class="ruby-keyword kw">nil</span>
246
- 200: <span class="ruby-ivar">@@locker</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
247
- 201: <span class="ruby-identifier">d</span> = <span class="ruby-ivar">@@queue</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@@queue</span>.<span class="ruby-identifier">empty?</span>
248
- 202: <span class="ruby-keyword kw">end</span>
249
- 203: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">nil</span>
250
- 204: <span class="ruby-comment cmt"># print &quot;#{d}\n&quot;</span>
251
- 205: <span class="ruby-identifier">run</span>(<span class="ruby-identifier">d</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">run</span> }
252
- 206: <span class="ruby-ivar">@@locker</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
253
- 207: <span class="ruby-ivar">@@processing</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">d</span>)
254
- 208: <span class="ruby-keyword kw">end</span>
255
- 209: <span class="ruby-keyword kw">else</span>
256
- 210: <span class="ruby-comment cmt"># print &quot;no data in queue\n&quot;</span>
257
- 211: <span class="ruby-identifier">sleep</span>(<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:sleep</span>])
258
- 212: <span class="ruby-keyword kw">end</span>
259
- 213: <span class="ruby-keyword kw">end</span>
260
- 214: <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{thread_id}&quot;</span>
261
- 215: <span class="ruby-ivar">@@thread_count</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
262
- 216: }
263
- 217: <span class="ruby-keyword kw">end</span>
264
- 218:
265
- 219: <span class="ruby-constant">Signal</span>.<span class="ruby-identifier">trap</span>(<span class="ruby-identifier">:TERM</span>) {<span class="ruby-identifier">safe_exit</span>}
266
- 220:
267
- 221: <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
268
- 222: <span class="ruby-identifier">task_list</span> = <span class="ruby-constant">Rask</span>.<span class="ruby-identifier">tasks</span>(<span class="ruby-identifier">options</span>)
269
- 223: <span class="ruby-identifier">task_list</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
270
- 224: <span class="ruby-ivar">@@locker</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
271
- 225: <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@@processing</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">d</span>)
272
- 226: <span class="ruby-ivar">@@queue</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">d</span>
273
- 227: <span class="ruby-ivar">@@processing</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">d</span>
274
- 228: <span class="ruby-keyword kw">end</span>
275
- 229: <span class="ruby-keyword kw">end</span>
276
- 230: }
277
- 231: <span class="ruby-identifier">sleep</span>(<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:sleep</span>])
278
- 232: <span class="ruby-keyword kw">end</span>
279
- 233: <span class="ruby-keyword kw">end</span></pre>
265
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 260</span>
266
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">daemon</span>(<span class="ruby-identifier">options</span> = {<span class="ruby-identifier">:class</span>=<span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:group=</span><span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:sleep=</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span><span class="ruby-value">.1</span>})
267
+ <span class="ruby-identifier">options</span> = { <span class="ruby-identifier">:sleep=</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span><span class="ruby-value">.1</span> }.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">options</span>)
268
+ <span class="ruby-identifier">print</span> <span class="ruby-value str">&quot;daemon start\n&quot;</span>
269
+ <span class="ruby-identifier">exit</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fork</span>
270
+ <span class="ruby-constant">Process</span>.<span class="ruby-identifier">setsid</span>
271
+ <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span> <span class="ruby-identifier">pid_path</span>
272
+ <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;already running rask process. #{File.basename($0)}&quot;</span>
273
+ <span class="ruby-keyword kw">return</span>
274
+ <span class="ruby-keyword kw">end</span>
275
+ <span class="ruby-identifier">open</span>(<span class="ruby-identifier">pid_path</span>,<span class="ruby-value str">&quot;w&quot;</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">write</span> <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>}
276
+
277
+ <span class="ruby-comment cmt"># create worker threads</span>
278
+ <span class="ruby-identifier">threads</span> = []
279
+ <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">i</span> <span class="ruby-keyword kw">in</span> <span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-ivar">@@thread_max_count</span> <span class="ruby-keyword kw">do</span>
280
+ <span class="ruby-identifier">threads</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">Thread</span><span class="ruby-operator">::</span><span class="ruby-identifier">new</span>(<span class="ruby-identifier">i</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">thread_id</span><span class="ruby-operator">|</span>
281
+ <span class="ruby-ivar">@@thread_count</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
282
+ <span class="ruby-keyword kw">while</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@@terminated</span>
283
+ <span class="ruby-identifier">d</span> = <span class="ruby-keyword kw">nil</span>
284
+ <span class="ruby-ivar">@@locker</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
285
+ <span class="ruby-identifier">d</span> = <span class="ruby-ivar">@@queue</span>.<span class="ruby-identifier">pop</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@@queue</span>.<span class="ruby-identifier">empty?</span>
286
+ <span class="ruby-keyword kw">end</span>
287
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">d</span> <span class="ruby-operator">!=</span> <span class="ruby-keyword kw">nil</span>
288
+ <span class="ruby-comment cmt"># print &quot;#{d}\n&quot;</span>
289
+ <span class="ruby-identifier">run</span>(<span class="ruby-identifier">d</span>)
290
+ <span class="ruby-ivar">@@locker</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
291
+ <span class="ruby-ivar">@@processing</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">d</span>)
292
+ <span class="ruby-keyword kw">end</span>
293
+ <span class="ruby-keyword kw">else</span>
294
+ <span class="ruby-comment cmt"># print &quot;no data in queue\n&quot;</span>
295
+ <span class="ruby-identifier">sleep</span>(<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:sleep</span>])
296
+ <span class="ruby-keyword kw">end</span>
297
+ <span class="ruby-keyword kw">end</span>
298
+ <span class="ruby-identifier">print</span> <span class="ruby-node">&quot;#{thread_id}&quot;</span>
299
+ <span class="ruby-ivar">@@thread_count</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
300
+ }
301
+ <span class="ruby-keyword kw">end</span>
302
+
303
+ <span class="ruby-constant">Signal</span>.<span class="ruby-identifier">trap</span>(<span class="ruby-identifier">:TERM</span>) {<span class="ruby-identifier">safe_exit</span>}
304
+
305
+ <span class="ruby-keyword kw">while</span> <span class="ruby-keyword kw">true</span>
306
+ <span class="ruby-identifier">task_list</span> = <span class="ruby-constant">Rask</span>.<span class="ruby-identifier">task_ids</span>(<span class="ruby-identifier">options</span>)
307
+ <span class="ruby-identifier">task_list</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
308
+ <span class="ruby-ivar">@@locker</span>.<span class="ruby-identifier">synchronize</span> <span class="ruby-keyword kw">do</span>
309
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@@processing</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">d</span>)
310
+ <span class="ruby-ivar">@@queue</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">d</span>
311
+ <span class="ruby-ivar">@@processing</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">d</span>
312
+ <span class="ruby-keyword kw">end</span>
313
+ <span class="ruby-keyword kw">end</span>
314
+ }
315
+ <span class="ruby-identifier">sleep</span>(<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:sleep</span>])
316
+ <span class="ruby-keyword kw">end</span>
317
+ <span class="ruby-keyword kw">end</span></pre>
280
318
  </div>
281
319
 
282
320
  </div>
@@ -286,7 +324,7 @@ It is possible to specify the the task group.
286
324
 
287
325
 
288
326
  <div id="destroy-method" class="method-detail ">
289
- <a name="M000020"></a>
327
+ <a name="M000016"></a>
290
328
 
291
329
  <div class="method-heading">
292
330
 
@@ -298,17 +336,17 @@ It is possible to specify the the task group.
298
336
 
299
337
  <div class="method-description">
300
338
 
301
- <h4>force destroy the task</h4>
339
+ <h3>force destroy the task</h3>
302
340
 
303
341
 
304
342
 
305
343
  <div class="method-source-code"
306
344
  id="destroy-source">
307
345
  <pre>
308
- <span class="ruby-comment cmt"># File lib/rask.rb, line 169</span>
309
- 169: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">destroy</span>(<span class="ruby-identifier">task</span>)
310
- 170: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task</span>.<span class="ruby-identifier">task_id</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task</span>.<span class="ruby-identifier">task_id</span>)
311
- 171: <span class="ruby-keyword kw">end</span></pre>
346
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 249</span>
347
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">destroy</span>(<span class="ruby-identifier">task</span>)
348
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task</span>.<span class="ruby-identifier">task_id</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task</span>.<span class="ruby-identifier">task_id</span>)
349
+ <span class="ruby-keyword kw">end</span></pre>
312
350
  </div>
313
351
 
314
352
  </div>
@@ -317,32 +355,42 @@ It is possible to specify the the task group.
317
355
  </div>
318
356
 
319
357
 
320
- <div id="initialize-storage-method" class="method-detail ">
321
- <a name="M000019"></a>
358
+ <div id="insert-method" class="method-detail ">
359
+ <a name="M000011"></a>
322
360
 
323
361
  <div class="method-heading">
324
362
 
325
- <span class="method-name">initialize_storage</span><span
326
- class="method-args">()</span>
363
+ <span class="method-name">insert</span><span
364
+ class="method-args">(task)</span>
327
365
  <span class="method-click-advice">click to toggle source</span>
328
366
 
329
367
  </div>
330
368
 
331
369
  <div class="method-description">
332
370
 
333
-
371
+ <h3>Insert a new task. The task will be controlled under <a href="Rask.html">Rask</a> daemon process.</h3>
372
+ <h4>sample code</h4>
373
+ <pre>
374
+ Rask::insert NewTask.new
375
+ </pre>
334
376
 
335
377
 
336
378
 
337
379
  <div class="method-source-code"
338
- id="initialize-storage-source">
380
+ id="insert-source">
339
381
  <pre>
340
- <span class="ruby-comment cmt"># File lib/rask.rb, line 160</span>
341
- 160: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">initialize_storage</span>
342
- 161: <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-ivar">@@base_dir</span>
343
- 162: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">makedirs</span> <span class="ruby-ivar">@@base_dir</span>
344
- 163: <span class="ruby-keyword kw">end</span>
345
- 164: <span class="ruby-keyword kw">end</span></pre>
382
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 171</span>
383
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">task</span>)
384
+ <span class="ruby-identifier">initialize_storage</span>
385
+ <span class="ruby-identifier">task_id</span> = <span class="ruby-node">&quot;#{safe_class_name(task.class.name)}-#{task.group.to_s}-#{Time.now.to_i}-#{Time.now.usec}&quot;</span>
386
+ <span class="ruby-identifier">task</span>.<span class="ruby-identifier">task_id</span> = <span class="ruby-identifier">task_id</span>
387
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">touch</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)
388
+ <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>), <span class="ruby-value str">'w'</span>)
389
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>)
390
+ <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">dump</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">f</span>)
391
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_UN</span>)
392
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
393
+ <span class="ruby-keyword kw">end</span></pre>
346
394
  </div>
347
395
 
348
396
  </div>
@@ -351,41 +399,30 @@ It is possible to specify the the task group.
351
399
  </div>
352
400
 
353
401
 
354
- <div id="insert-method" class="method-detail ">
355
- <a name="M000016"></a>
402
+ <div id="pid-path-method" class="method-detail ">
403
+ <a name="M000010"></a>
356
404
 
357
405
  <div class="method-heading">
358
406
 
359
- <span class="method-name">insert</span><span
360
- class="method-args">(task)</span>
407
+ <span class="method-name">pid_path</span><span
408
+ class="method-args">()</span>
361
409
  <span class="method-click-advice">click to toggle source</span>
362
410
 
363
411
  </div>
364
412
 
365
413
  <div class="method-description">
366
414
 
367
- <h4>Insert new task</h4>
368
- <pre>
369
- Rask::insert NewTask.new
370
- </pre>
415
+
371
416
 
372
417
 
373
418
 
374
419
  <div class="method-source-code"
375
- id="insert-source">
420
+ id="pid-path-source">
376
421
  <pre>
377
- <span class="ruby-comment cmt"># File lib/rask.rb, line 113</span>
378
- 113: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">task</span>)
379
- 114: <span class="ruby-identifier">initialize_storage</span>
380
- 115: <span class="ruby-identifier">task_id</span> = <span class="ruby-node">&quot;#{safe_class_name(task.class.name)}-#{task.group.to_s}-#{Time.now.to_i}-#{Time.now.usec}&quot;</span>
381
- 116: <span class="ruby-identifier">task</span>.<span class="ruby-identifier">task_id</span> = <span class="ruby-identifier">task_id</span>
382
- 117: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">touch</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)
383
- 118: <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>), <span class="ruby-value str">'w'</span>)
384
- 119: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>)
385
- 120: <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">dump</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">f</span>)
386
- 121: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_UN</span>)
387
- 122: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
388
- 123: <span class="ruby-keyword kw">end</span></pre>
422
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 162</span>
423
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">pid_path</span>
424
+ <span class="ruby-ivar">@@base_dir</span><span class="ruby-operator">+</span><span class="ruby-node">&quot;/#{File.basename($0)}.pid&quot;</span>
425
+ <span class="ruby-keyword kw">end</span></pre>
389
426
  </div>
390
427
 
391
428
  </div>
@@ -394,30 +431,39 @@ It is possible to specify the the task group.
394
431
  </div>
395
432
 
396
433
 
397
- <div id="pid-path-method" class="method-detail ">
398
- <a name="M000015"></a>
434
+ <div id="read-method" class="method-detail ">
435
+ <a name="M000014"></a>
399
436
 
400
437
  <div class="method-heading">
401
438
 
402
- <span class="method-name">pid_path</span><span
403
- class="method-args">()</span>
439
+ <span class="method-name">read</span><span
440
+ class="method-args">(task_id)</span>
404
441
  <span class="method-click-advice">click to toggle source</span>
405
442
 
406
443
  </div>
407
444
 
408
445
  <div class="method-description">
409
446
 
410
-
447
+ <h3>Get the task instance to observe.</h3>
448
+ <p>
449
+ You can use the instance for only the purpose of observation.
450
+ </p>
411
451
 
412
452
 
413
453
 
414
454
  <div class="method-source-code"
415
- id="pid-path-source">
455
+ id="read-source">
416
456
  <pre>
417
- <span class="ruby-comment cmt"># File lib/rask.rb, line 106</span>
418
- 106: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">pid_path</span>
419
- 107: <span class="ruby-ivar">@@base_dir</span><span class="ruby-operator">+</span><span class="ruby-node">&quot;/#{File.basename($0)}.pid&quot;</span>
420
- 108: <span class="ruby-keyword kw">end</span></pre>
457
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 211</span>
458
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">task_id</span>)
459
+ <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>), <span class="ruby-value str">'r+'</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">return</span>
460
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>)
461
+ <span class="ruby-identifier">task</span> = <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">restore</span>(<span class="ruby-identifier">f</span>)
462
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_UN</span>)
463
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
464
+ <span class="ruby-identifier">task</span>.<span class="ruby-identifier">read_only</span> = <span class="ruby-keyword kw">true</span>
465
+ <span class="ruby-identifier">task</span>
466
+ <span class="ruby-keyword kw">end</span></pre>
421
467
  </div>
422
468
 
423
469
  </div>
@@ -427,12 +473,12 @@ It is possible to specify the the task group.
427
473
 
428
474
 
429
475
  <div id="run-method" class="method-detail ">
430
- <a name="M000017"></a>
476
+ <a name="M000012"></a>
431
477
 
432
478
  <div class="method-heading">
433
479
 
434
480
  <span class="method-name">run</span><span
435
- class="method-args">(task_path)</span>
481
+ class="method-args">(task_id)</span>
436
482
  <span class="method-click-advice">click to toggle source</span>
437
483
 
438
484
  </div>
@@ -446,21 +492,23 @@ It is possible to specify the the task group.
446
492
  <div class="method-source-code"
447
493
  id="run-source">
448
494
  <pre>
449
- <span class="ruby-comment cmt"># File lib/rask.rb, line 127</span>
450
- 127: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">run</span>(<span class="ruby-identifier">task_path</span>)
451
- 128: <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">task_path</span>, <span class="ruby-value str">'r+'</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">return</span>
452
- 129: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>)
453
- 130:
454
- 131: <span class="ruby-identifier">task</span> = <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">restore</span>(<span class="ruby-identifier">f</span>)
455
- 132: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">task</span>
456
- 133:
457
- 134: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">truncate</span>(<span class="ruby-value">0</span>)
458
- 135: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
459
- 136: <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">dump</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">f</span>)
460
- 137: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_UN</span>)
461
- 138: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
462
- 139: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">task_path</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">destroy?</span>
463
- 140: <span class="ruby-keyword kw">end</span></pre>
495
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 185</span>
496
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">run</span>(<span class="ruby-identifier">task_id</span>)
497
+ <span class="ruby-identifier">f</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>), <span class="ruby-value str">'r+'</span>) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">return</span>
498
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>)
499
+ <span class="ruby-identifier">task</span> = <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">restore</span>(<span class="ruby-identifier">f</span>)
500
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
501
+ <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">task</span>
502
+ <span class="ruby-keyword kw">else</span>
503
+ <span class="ruby-identifier">task</span>.<span class="ruby-identifier">run</span>
504
+ <span class="ruby-keyword kw">end</span>
505
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">truncate</span>(<span class="ruby-value">0</span>)
506
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">pos</span> = <span class="ruby-value">0</span>
507
+ <span class="ruby-constant">Marshal</span>.<span class="ruby-identifier">dump</span>(<span class="ruby-identifier">task</span>, <span class="ruby-identifier">f</span>)
508
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">flock</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_UN</span>)
509
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">close</span>
510
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">task</span>.<span class="ruby-identifier">destroy?</span>
511
+ <span class="ruby-keyword kw">end</span></pre>
464
512
  </div>
465
513
 
466
514
  </div>
@@ -469,13 +517,13 @@ It is possible to specify the the task group.
469
517
  </div>
470
518
 
471
519
 
472
- <div id="safe-class-name-method" class="method-detail ">
473
- <a name="M000021"></a>
520
+ <div id="run-all-method" class="method-detail ">
521
+ <a name="M000013"></a>
474
522
 
475
523
  <div class="method-heading">
476
524
 
477
- <span class="method-name">safe_class_name</span><span
478
- class="method-args">(c)</span>
525
+ <span class="method-name">run_all</span><span
526
+ class="method-args">(options = { :class=>nil, :group=>nil })</span>
479
527
  <span class="method-click-advice">click to toggle source</span>
480
528
 
481
529
  </div>
@@ -487,12 +535,12 @@ It is possible to specify the the task group.
487
535
 
488
536
 
489
537
  <div class="method-source-code"
490
- id="safe-class-name-source">
538
+ id="run-all-source">
491
539
  <pre>
492
- <span class="ruby-comment cmt"># File lib/rask.rb, line 174</span>
493
- 174: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">safe_class_name</span>(<span class="ruby-identifier">c</span>)
494
- 175: <span class="ruby-identifier">c</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[:]/</span>,<span class="ruby-value str">'@'</span>)
495
- 176: <span class="ruby-keyword kw">end</span></pre>
540
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 203</span>
541
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">run_all</span>(<span class="ruby-identifier">options</span> = { <span class="ruby-identifier">:class</span>=<span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:group=</span><span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span> })
542
+ <span class="ruby-constant">Rask</span>.<span class="ruby-identifier">task_ids</span>(<span class="ruby-identifier">options</span>).<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task_id</span><span class="ruby-operator">|</span> <span class="ruby-identifier">run</span>(<span class="ruby-identifier">task_id</span>) }
543
+ <span class="ruby-keyword kw">end</span></pre>
496
544
  </div>
497
545
 
498
546
  </div>
@@ -501,37 +549,55 @@ It is possible to specify the the task group.
501
549
  </div>
502
550
 
503
551
 
504
- <div id="safe-exit-method" class="method-detail ">
505
- <a name="M000023"></a>
552
+ <div id="task-ids-method" class="method-detail ">
553
+ <a name="M000015"></a>
506
554
 
507
555
  <div class="method-heading">
508
556
 
509
- <span class="method-name">safe_exit</span><span
510
- class="method-args">()</span>
557
+ <span class="method-name">task_ids</span><span
558
+ class="method-args">(options = { :class=>nil, :group=>nil })</span>
511
559
  <span class="method-click-advice">click to toggle source</span>
512
560
 
513
561
  </div>
514
562
 
515
563
  <div class="method-description">
516
564
 
517
-
565
+ <h3>Get task_id list.</h3>
566
+ <dl>
567
+ <dt>options</dt><dd>class :: Only the instance of specified class.
568
+
569
+ <table>
570
+ <tr><td valign="top">group :</td><td>Only the instance of specified group. see also Task::initialize
571
+
572
+ </td></tr>
573
+ </table>
574
+ </dd>
575
+ </dl>
518
576
 
519
577
 
520
578
 
521
579
  <div class="method-source-code"
522
- id="safe-exit-source">
580
+ id="task-ids-source">
523
581
  <pre>
524
- <span class="ruby-comment cmt"># File lib/rask.rb, line 236</span>
525
- 236: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">safe_exit</span>
526
- 237: <span class="ruby-identifier">print</span> <span class="ruby-value str">&quot;daemon terminated&quot;</span>
527
- 238: <span class="ruby-ivar">@@terminated</span> = <span class="ruby-keyword kw">true</span>
528
- 239: <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@@thread_count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
529
- 240: <span class="ruby-identifier">sleep</span>(<span class="ruby-value">0</span><span class="ruby-value">.1</span>)
530
- 241: <span class="ruby-keyword kw">end</span>
531
- 242: <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">pid_path</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">pid_path</span>)
532
- 243: <span class="ruby-identifier">print</span> <span class="ruby-value str">&quot;done \n&quot;</span>
533
- 244: <span class="ruby-identifier">exit</span>
534
- 245: <span class="ruby-keyword kw">end</span></pre>
582
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 227</span>
583
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">task_ids</span>(<span class="ruby-identifier">options</span> = { <span class="ruby-identifier">:class</span>=<span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:group=</span><span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span> })
584
+ <span class="ruby-identifier">target</span> = <span class="ruby-ivar">@@base_dir</span>
585
+ <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">'/'</span>
586
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:class</span>]
587
+ <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{safe_class_name(options[:class])}&quot;</span>
588
+ <span class="ruby-keyword kw">else</span>
589
+ <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">&quot;[^-]+&quot;</span>
590
+ <span class="ruby-keyword kw">end</span>
591
+ <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;-#{options[:group]}-&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:group</span>]
592
+
593
+ <span class="ruby-identifier">task_id_list</span> = []
594
+ <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-ivar">@@base_dir</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;/*.task&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
595
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">target</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-node">/#{target}/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">d</span>
596
+ <span class="ruby-identifier">task_id_list</span>.<span class="ruby-identifier">push</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">d</span>, <span class="ruby-value str">&quot;.*&quot;</span>)
597
+ <span class="ruby-keyword kw">end</span>
598
+ }
599
+ <span class="ruby-identifier">task_id_list</span>
600
+ <span class="ruby-keyword kw">end</span></pre>
535
601
  </div>
536
602
 
537
603
  </div>
@@ -541,7 +607,7 @@ It is possible to specify the the task group.
541
607
 
542
608
 
543
609
  <div id="task-path-method" class="method-detail ">
544
- <a name="M000014"></a>
610
+ <a name="M000009"></a>
545
611
 
546
612
  <div class="method-heading">
547
613
 
@@ -560,10 +626,10 @@ It is possible to specify the the task group.
560
626
  <div class="method-source-code"
561
627
  id="task-path-source">
562
628
  <pre>
563
- <span class="ruby-comment cmt"># File lib/rask.rb, line 101</span>
564
- 101: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)
565
- 102: <span class="ruby-ivar">@@base_dir</span><span class="ruby-operator">+</span><span class="ruby-node">&quot;/#{task_id}.task&quot;</span>
566
- 103: <span class="ruby-keyword kw">end</span></pre>
629
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 157</span>
630
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">task_path</span>(<span class="ruby-identifier">task_id</span>)
631
+ <span class="ruby-ivar">@@base_dir</span><span class="ruby-operator">+</span><span class="ruby-node">&quot;/#{task_id}.task&quot;</span>
632
+ <span class="ruby-keyword kw">end</span></pre>
567
633
  </div>
568
634
 
569
635
  </div>
@@ -572,41 +638,75 @@ It is possible to specify the the task group.
572
638
  </div>
573
639
 
574
640
 
575
- <div id="tasks-method" class="method-detail ">
641
+ <div id="thread-max-count--method" class="method-detail ">
642
+ <a name="M000008"></a>
643
+
644
+ <div class="method-heading">
645
+
646
+ <span class="method-name">thread_max_count=</span><span
647
+ class="method-args">(count)</span>
648
+ <span class="method-click-advice">click to toggle source</span>
649
+
650
+ </div>
651
+
652
+ <div class="method-description">
653
+
654
+ <h3>Set max count of worker thread</h3>
655
+ <table>
656
+ <tr><td valign="top">default :</td><td>5
657
+
658
+ </td></tr>
659
+ </table>
660
+
661
+
662
+
663
+ <div class="method-source-code"
664
+ id="thread-max-count--source">
665
+ <pre>
666
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 152</span>
667
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">thread_max_count=</span>(<span class="ruby-identifier">count</span>)
668
+ <span class="ruby-ivar">@@thread_max_count</span> = <span class="ruby-identifier">count</span>
669
+ <span class="ruby-keyword kw">end</span></pre>
670
+ </div>
671
+
672
+ </div>
673
+
674
+
675
+ </div>
676
+
677
+
678
+ </div>
679
+
680
+ <div id="private-class-method-details" class="method-section section">
681
+ <h3 class="section-header">Private Class Methods</h3>
682
+
683
+
684
+ <div id="initialize-storage-method" class="method-detail ">
576
685
  <a name="M000018"></a>
577
686
 
578
687
  <div class="method-heading">
579
688
 
580
- <span class="method-name">tasks</span><span
581
- class="method-args">(options = { :class=>nil, :group=>nil })</span>
689
+ <span class="method-name">initialize_storage</span><span
690
+ class="method-args">()</span>
582
691
  <span class="method-click-advice">click to toggle source</span>
583
692
 
584
693
  </div>
585
694
 
586
695
  <div class="method-description">
587
696
 
588
- <h4>Get all file path of task list</h4>
697
+
589
698
 
590
699
 
591
700
 
592
701
  <div class="method-source-code"
593
- id="tasks-source">
702
+ id="initialize-storage-source">
594
703
  <pre>
595
- <span class="ruby-comment cmt"># File lib/rask.rb, line 144</span>
596
- 144: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">tasks</span>(<span class="ruby-identifier">options</span> = { <span class="ruby-identifier">:class</span>=<span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:group=</span><span class="ruby-operator">&gt;</span><span class="ruby-keyword kw">nil</span> })
597
- 145: <span class="ruby-identifier">target</span> = <span class="ruby-ivar">@@base_dir</span>
598
- 146: <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-value str">'/'</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:class</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:group</span>]
599
- 147: <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;#{safe_class_name(options[:class])}&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:class</span>]
600
- 148: <span class="ruby-identifier">target</span> <span class="ruby-operator">+=</span> <span class="ruby-node">&quot;-#{options[:group]}-&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:group</span>]
601
- 149:
602
- 150: <span class="ruby-identifier">task_list</span> = []
603
- 151: <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">glob</span>(<span class="ruby-ivar">@@base_dir</span><span class="ruby-operator">+</span><span class="ruby-value str">&quot;/*.task&quot;</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">d</span><span class="ruby-operator">|</span>
604
- 152: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">target</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-operator">||</span> <span class="ruby-node">/#{target}/</span> <span class="ruby-operator">=~</span> <span class="ruby-identifier">d</span>
605
- 153: <span class="ruby-identifier">task_list</span>.<span class="ruby-identifier">push</span> <span class="ruby-identifier">d</span>
606
- 154: <span class="ruby-keyword kw">end</span>
607
- 155: }
608
- 156: <span class="ruby-identifier">task_list</span>
609
- 157: <span class="ruby-keyword kw">end</span></pre>
704
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 316</span>
705
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">initialize_storage</span>
706
+ <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-ivar">@@base_dir</span>
707
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">makedirs</span> <span class="ruby-ivar">@@base_dir</span>
708
+ <span class="ruby-keyword kw">end</span>
709
+ <span class="ruby-keyword kw">end</span></pre>
610
710
  </div>
611
711
 
612
712
  </div>
@@ -615,30 +715,68 @@ It is possible to specify the the task group.
615
715
  </div>
616
716
 
617
717
 
618
- <div id="thread-max-count--method" class="method-detail ">
619
- <a name="M000013"></a>
718
+ <div id="safe-class-name-method" class="method-detail ">
719
+ <a name="M000019"></a>
620
720
 
621
721
  <div class="method-heading">
622
722
 
623
- <span class="method-name">thread_max_count=</span><span
624
- class="method-args">(count)</span>
723
+ <span class="method-name">safe_class_name</span><span
724
+ class="method-args">(c)</span>
625
725
  <span class="method-click-advice">click to toggle source</span>
626
726
 
627
727
  </div>
628
728
 
629
729
  <div class="method-description">
630
730
 
631
- <h4>Set max count of worker thread</h4>
731
+
632
732
 
633
733
 
634
734
 
635
735
  <div class="method-source-code"
636
- id="thread-max-count--source">
736
+ id="safe-class-name-source">
737
+ <pre>
738
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 323</span>
739
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">safe_class_name</span>(<span class="ruby-identifier">c</span>)
740
+ <span class="ruby-identifier">c</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp re">/[:]/</span>,<span class="ruby-value str">'@'</span>)
741
+ <span class="ruby-keyword kw">end</span></pre>
742
+ </div>
743
+
744
+ </div>
745
+
746
+
747
+ </div>
748
+
749
+
750
+ <div id="safe-exit-method" class="method-detail ">
751
+ <a name="M000020"></a>
752
+
753
+ <div class="method-heading">
754
+
755
+ <span class="method-name">safe_exit</span><span
756
+ class="method-args">()</span>
757
+ <span class="method-click-advice">click to toggle source</span>
758
+
759
+ </div>
760
+
761
+ <div class="method-description">
762
+
763
+
764
+
765
+
766
+
767
+ <div class="method-source-code"
768
+ id="safe-exit-source">
637
769
  <pre>
638
- <span class="ruby-comment cmt"># File lib/rask.rb, line 96</span>
639
- 96: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">thread_max_count=</span>(<span class="ruby-identifier">count</span>)
640
- 97: <span class="ruby-ivar">@@thread_max_count</span> = <span class="ruby-identifier">count</span>
641
- 98: <span class="ruby-keyword kw">end</span></pre>
770
+ <span class="ruby-comment cmt"># File lib/rask.rb, line 328</span>
771
+ <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">safe_exit</span>
772
+ <span class="ruby-ivar">@@terminated</span> = <span class="ruby-keyword kw">true</span>
773
+ <span class="ruby-keyword kw">while</span> <span class="ruby-ivar">@@thread_count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
774
+ <span class="ruby-identifier">sleep</span>(<span class="ruby-value">0</span><span class="ruby-value">.1</span>)
775
+ <span class="ruby-keyword kw">end</span>
776
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">rm</span>(<span class="ruby-identifier">pid_path</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">pid_path</span>)
777
+ <span class="ruby-identifier">print</span> <span class="ruby-value str">&quot;safely daemon terminated. \n&quot;</span>
778
+ <span class="ruby-identifier">exit</span>
779
+ <span class="ruby-keyword kw">end</span></pre>
642
780
  </div>
643
781
 
644
782
  </div>