4

我正在寻找运行可以传递输入的python解释器的持久实例。设计用于执行此操作的整个系统将用 PHP 编写。我注意到用于 beanstalkd 工作队列的 Pheanstalk 包。有没有人使用 Pheanstalk 来产生(和维护)一个持久的过程?我知道 Pheanstalk 的常见用途是在异步事务中运行脚本或其他需要较长时间的任务,以避免用户等待。我希望异步地拥有一个 Pheanstalk 作业/进程来管理和维护一个我可以将输入传递给的 python 解释器进程。这是否可能/已经完成,如果是,怎么做?

4

1 回答 1

4

我当然已经使用 Pheanstalk 运行了持久队列工作程序。它的工作原理是这样的:

父 PHP 进程派生指定数量的工作进程。每个工人使用 Pheanstalk 连接到 beanstalkd 并等待工作。当一个工人得到一份工作时,它会执行任务然后退出,释放它的内存。然后,父 PHP 进程会生成一个新的 worker 来替换它。

您的要求听起来更像这样:

父 PHP 进程使用proc_open()派生一个 python 解释器进程,存储对创建的 STDIN 和 STDOUT 管道的引用。然后父 PHP 进程进入一个循环,使用 Pheanstalk 连接到 beanstalk 并保留下一个作业。当作业被保留时,PHP 使用 fwrite() 将作业内容发送到 python STDIN 管道,然后使用 fread() 从 python 的 STDOUT 管道读取响应。

这是假设您想要维护一个正在运行的 python 进程,而不是在每次保留作业时启动一个新的 python 进程。

无论哪种方式都很疯狂,但它可能会奏效。

更明智的选择是使用 Python beanstalkd 客户端,但是,嘿,很高兴看到更多人使用Pheanstalk :)

干杯,保罗

于 2011-05-24T15:21:50.497 回答