PHP / Python Beanstalk socket事件作业


PHP / Python Beanstalk sockets event Job

我使用Phalcon php服务器端,我发送工作到beanstalk的doc说。

执行所有作业在beanstalk我有一个python脚本。该脚本搜索是否存在现有作业并执行它们。但是现在我用linux命令行执行这个脚本。

然后,我想在创建作业并执行任务时自动执行我的python脚本。我想到了套接字

是否有可能在beanstalk socket事件接收到作业并执行我的python脚本时捕获它?

最后我用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()

一旦连接成功,我将启动worker,这就是为什么我在connect方法中使用回调。watch方法专注于我想要的管,start方法将启动异步循环无阻塞I/o

在我的connect函数我将调用reserve函数。如果没有可保留的作业,也没有给出超时,那么reserve将等待未来的作业,并将使用beanstalk套接字触发。

之后,我可以在reserve函数中给出我想要的东西。这里我发送show函数来测试我的进程。在我打印之后,我将调用delete回调来删除当前的作业。

希望能有所帮助。