最後に私はTornado BeanstalktでPythonスクリプトを書いた。
ここに私のコードです。
import tornado
import beanstalkt
def show(msg, value, cb):
print(msg % value)
cb()
def stop():
client.close(ioloop.stop)
def connect(s):
print('Connection established')
reserve()
def reserve():
client.reserve(callback=lambda s: show(
"Reserved job %s", s, lambda: delete(s["id"])))
def delete(job_id):
client.delete(job_id, callback=lambda s: show(
"Deleted job with id %d", job_id, reserve))
ioloop = tornado.ioloop.IOLoop.instance()
client = beanstalkt.Client(host='my-server', port=11300)
client.connect(callback=connect)
client.watch("my-tube")
ioloop.start()
これらの行は、私のbeanstalkサーバーへの接続を確立します。
client.connect(callback=connect)
client.watch("my-tube")
ioloop.start()
接続は、私がconnect
メソッド内でコールバックを使用している理由です成功したら、私は労働者を始めましょう。 watch
メソッドは私が望むチューブに焦点を当てて、start
メソッドは非同期ループ非ブロックI/Oを開始します。
私のconnect
の機能では、reserve
という機能を呼び出します。予約可能なジョブがなく、タイムアウトが与えられていない場合、reserve
は未処理のジョブを待機し、beanstalkソケットでトリガーされます。
その後、私はreserve
の機能の中で私が欲しいものを与えることができます。ここで私のプロセスをテストするためのshow関数を送信します。私の印刷後、私は現在の仕事を削除するためにコールバックを削除するでしょう。
希望します。