2016-11-10 16 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函数。在这里,我发送显示功能来测试我的过程。打印完成后,我会调用删除回调来删除当前作业。

希望它有帮助。