我使用Phalcon PHP服務器端,我發送作業到豆莖作爲doc說。PHP/Python Beanstalk套接字事件作業
要執行beanstalk中的所有作業,我有一個python腳本。該腳本搜索是否存在作業並執行它們。但目前我用linux命令行執行這個腳本。
然後,我想在創建作業並執行任務時自動執行我的python腳本。我想到了套接字。
當它接收到一個作業並執行我的python腳本時,可以捕獲beanstalk套接字事件嗎?
我使用Phalcon PHP服務器端,我發送作業到豆莖作爲doc說。PHP/Python Beanstalk套接字事件作業
要執行beanstalk中的所有作業,我有一個python腳本。該腳本搜索是否存在作業並執行它們。但目前我用linux命令行執行這個腳本。
然後,我想在創建作業並執行任務時自動執行我的python腳本。我想到了套接字。
當它接收到一個作業並執行我的python腳本時,可以捕獲beanstalk套接字事件嗎?
最後我用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
函數。在這裏,我發送顯示功能來測試我的過程。打印完成後,我會調用刪除回調來刪除當前作業。
希望它有幫助。