Pyresを使ってみた
2011-09-04 - ⧖ 1.0 minPythonの resque クローンであるところの、 pyres を使ってみましたので、 その使用感を淡々と記録します。
pyresって
pyres は Redis をバックエンドに使った、ジョブキューサービスを 提供するPythonモジュールです。 ワーカに実行させたいジョブをあらかじめ登録しておき、 実行したい時にエンキューして使います。 同じような用途のモジュールには Celery なんかがあります。
セットアップ
インストールは以下でOK。
pip install pyres
使い方
まずはバックグラウンドで実行したいジョブを定義します。
import time
class TestJob (object ):
queue = "Spam"
@staticmethod
def perform (arg ):
time .sleep (5 )
print arg
次にワーカ(実際にジョブを実行するプロセス)を定義します。
# worker.py
from pyres import setup_logging
from pyres .worker import Worker
from tasks import TestJob
setup_logging ()
Worker .run (["Spam" ])
で、ワーカ起動。
python worker.py
Webフロントエンドが付属しているので、ワーカが動作しているかを確認してみます。 "0 of 1 Workers Working" と表示されていればOKです。
pyres_web -p 8088

エンキューする側のスクリプトは以下です。
# enqueue.py
from pyres import ResQ
from tasks import TestJob
r = ResQ (server = "localhost:6379" )
r .enqueue (TestJob , 23 )
print r .info ()
実行して処理されるまでを確認。
python enqueue.py
ワーカ側のログ
2011-09-04 12:11:04 INFO Found job on Spam
2011-09-04 12:11:04 INFO Processing Spam since 2011-09-04 12:11:04.905254
2011-09-04 12:11:04 INFO Forked 5592 at 2011-09-04 12:11:04.907010
23
2011-09-04 12:11:09 INFO done working
ワーカが処理中であればWebからも処理中かどうかを確認できます。 処理中であれば以下のような感じで表示されます。

まとめ
Redisがあれば簡単に動かせますし、 ワーカ自体も Supervisor とかで管理すれば簡単に管理できそうなので、 一度試してみてはいかがでしょうか?
では。