2016-11-10 25 views
0

我使用Phalcon PHP服務器端,我發送作業到豆莖作爲doc說。PHP/Python Beanstalk套接字事件作業

要執行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函數。在這裏,我發送顯示功能來測試我的過程。打印完成後,我會調用刪除回調來刪除當前作業。

希望它有幫助。