PHP / Python Beanstalk 套接字事件作业

Posted

技术标签:

【中文标题】PHP / Python Beanstalk 套接字事件作业【英文标题】:PHP / Python Beanstalk sockets event Job 【发布时间】:2017-03-24 09:04:18 【问题描述】:

我正在使用 Phalcon php 服务器端,并按照 doc 所说的那样将作业发送到 beanstalk。

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

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

当beantalk socket事件接收到一个作业并执行我的python脚本时,它可能会被捕获吗?

【问题讨论】:

【参考方案1】:

最后我用 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 函数来测试我的过程。打印完成后,我将调用删除回调来删除当前作业。

希望对你有帮助。

【讨论】:

以上是关于PHP / Python Beanstalk 套接字事件作业的主要内容,如果未能解决你的问题,请参考以下文章

将多个平台部署到 Elastic Beanstalk (PHP/Python)

如何在 Elastic beanstalk 上从我的 PHP 按需运行 python 脚本?

Rails 6 无法连接到 AWS Elastic Beanstalk 预置的 RDS。 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”

AWS Elastic Beanstalk 上带有 Tomcat 7 的 Websocket

Elastic Beanstalk - PHP / 强制 HTTPS

Beanstalk php 蓝绿部署返回 503