Pyresを使ってみた
Posted on Sun, 04 Sep 2011 12:24:30 +0900
Pythonの 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からも処理中かどうかを確認できます。 処理中であれば以下のような感じで表示されます。
