2013-05-31 115 views
0

我已经在Symfony设置中实现了一个命令,它从数据库中获取作业并对其进行处理。同时运行多个Symfony命令

如何一次运行多个命令实例以更快地完成任务。我知道PHP中不支持多线程,但是看到从shell调用该命令时,我想知道是否有解决方法。使用

调用命令:

app/console job:process

+1

PHP支持多线程:http://php.net/Thread –

回答

7

我会解决这个问题的方法是使用一个工作队列与多个工人。比手动运行多个进程和担心并发更容易管理和扩展。

最简单通用的队列,我发现用PHP/symfony的工作是beanstalkd,你可以融入的Symfony2与LeezyPheanstalkBundle

+0

通过具有_n_实例的Command来充当工作者。然后用shell脚本来确保没有工人变成僵尸。谢谢! – cdrev

0

一般情况下,我建议使用enqueue库。您可以从各种可用的传输中进行选择,从最简单的文件系统和Doctrine DBAL到真正的RabbitMQ和Amazon SQS。

关于消费者,您需要一些流程管理器。有几种选择:

  1. http://supervisord.org/ - 您需要额外的服务。它必须正确配置。

  2. 纯粹的PHP进程管理器,如this。基于Symfony流程组件和纯PHP代码。它可以处理重启进程,纠正sigterm信号退出等等。

  3. php \ swoole过程管理器,如this。它需要一个swoole PHP扩展,但性能是惊人的。