読者です 読者をやめる 読者になる 読者になる

Gearman, TheSchwartz勉強日記

Python Perl

前々から勉強しなくてはと思っていたGearmanとTheSchwartzで遊んでいます。
PythonのGearman Client経由でTheSchwartzにジョブを追加する必要があるのですが、まずはPythonでGearmanのClientとWorkerを書いてみます。Python Gearman bindingにはsixapartのレポジトリのものを使いました。easy_installでインストールできるので楽ですね。

$ easy_install http://code.sixapart.com/svn/gearman/trunk/api/python/lib/

テスト用に書いてみたWorker.

# worker.py
from gearman import GearmanWorker

def echo(job):
    # Do something
    print job.arg

worker = GearmanWorker(["127.0.0.1"])
worker.register_function("echo", echo)
worker.work()

次に、Client側。タスクの成功時、失敗時などに呼び出されるコールバック関数を登録できたりするようですが、ここではタスクを投げっぱなし。

# client.py
from gearman import GearmanClient
from gearman.task import Task

job_servers = ["127.0.0.1"]
client = GearmanClient(job_servers)
task = Task("echo", "SPAM EGG HAM", background=True)
client.do_task(task)

TheSchwartzを使う場合には、以下のURLで説明されているように、GearmanベースのTheSchwartzサーバを使ってジョブを登録し、JSONで引数のやり取りをすればよいようです。

http://code.sixapart.com/trac/TheSchwartz/changeset/129
http://code.sixapart.com/trac/TheSchwartz/browser/trunk/server/bin/schwartzd


こんな感じかな。

import simplejson
from gearman import GearmanClient
from gearman.task import Task

job_servers = ["127.0.0.1"]
client = GearmanClient(job_servers)
task = Task("insert_job",
            simplejson.dumps({'funcname':'SchwartzWorker', 'arg':"SPAM EGG HAM"}))
client.do_task(task)