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

最佳答案

我当然使用 Pheanstalk 运行持久队列工作器。它的工作原理是这样的:

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

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

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

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

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

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

干杯,
保罗

关于php - 野花问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6109872/

10-11 11:06