TurboGears?でタスクのスケジューリング
TurboGears?はIrmen de JongによるKronosをベースにしたスケジューラを同梱しています。このスケジューラは必要に応じて、1回きりの、あるいは何回か起こるタスクを実行することを簡単にしてくれます。
このスケジューラを使うには、 [global]? の設定で tg.scheduler を True にセットします。これによってサーバがスタートしたときにTurboGearsにスケジューラをスタートさせることができます。
ジョブのスケジューリング
ジョブのスケジューリングをするための3つの関数があります。これらの関数はすべて Task オブジェクトを返します。この Task オブジェクトを保持しているときは、 turbogears.scheduler.cancel() を呼ぶことによってそのタスクをキャンセルすることができます。
3つのスケジューリング関数はすべて以下のものをとります:
- action
- リクエストした時間に呼ばれる
- args
- アクションに渡すための位置パラメータタプル
- kw
- アクションに渡すためのキーワード引数
- taskname
- Tasks can have a name (stored in task.name), which can help if you're trying to keep track of many tasks.タスクは名前を持つことができる( task.name に保持される)。多くのタスクをトラッキングするのに便利
- processmethod
- デフォルトではそれぞれのタスクは新しいスレッドで実行されるが turbogears.scheduler.method.sequential や turbogears.scheduler.method.forked に渡すこともできる。sequentialは同じスレッドで実行されるので、すぐ終わるタスクにのみ使うのがよい。forkedはジョブを実行するために新しいプロセスをフォークする。これは難しいジョブに効果的で、特に(Pythonアーキテクチャにより)マルチプロセッサマシンで効果を発揮する
これらの共通パラメータに加え、タスクをいつ実行するかを決めるための追加的なオプション関数が3つあります。以下はその3つの関数とパラメータです:
- add_interval_task
- 実行前に何秒待つかを示す initialdelay と実行間隔が何秒かを示す interval を渡す。例えばinitialdelayが600で、intervalが60のとき、10分後に実行され、その後1分ごとに実行される
- add_weekday_task
- 1週間の特定の日に実行する。1から7の値で weekdays のタプルを渡す(1が月曜日)。また何時に実行するのかを指定するために timeonday も渡す必要がある。 timeonday は(hour, minute)という形のタプル
- add_monthday_task
- 1ヶ月の特定の日に実行する。1から31の値で weekdays のタプルを渡す。また何時に実行するのかを指定するために timeonday も渡す必要がある。

