2016-11-10 13 views
0

私はPhalcon PHPサーバ側を使用しています。私はdocと言っているようにBeanstalkにジョブを送ります。PHP/Python BeanstalkソケットイベントJob

私はbeanstalk内のすべてのジョブを実行するために、私はpythonスクリプトを持っています。このスクリプトは、既存のジョブが存在するかどうかを検索して実行します。しかし、現時点では、私はこのコマンドをlinuxのコマンドラインで実行します。

次に、ジョブの作成時に自動的にpythonスクリプトを実行して、タスクを実行します。私はソケットについて考えました。

ジョブを受け取り、私のpythonスクリプトを実行するとBeanstalkソケットイベントを捕まえることができますか?

答えて

0

最後に私は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関数を送信します。私の印刷後、私は現在の仕事を削除するためにコールバックを削除するでしょう。

希望します。