同时运行多个Symfony命令
我已经在Symfony设置中实现了一个命令,它从数据库中获取作业并对其进行处理。同时运行多个Symfony命令
如何一次运行多个命令实例以更快地完成任务。我知道PHP中不支持多线程,但是看到从shell调用该命令时,我想知道是否有解决方法。使用
调用命令:
app/console job:process
我会解决这个问题的方法是使用一个工作队列与多个工人。比手动运行多个进程和担心并发更容易管理和扩展。
最简单通用的队列,我发现用PHP/symfony的工作是beanstalkd,你可以融入的Symfony2与LeezyPheanstalkBundle
通过具有_n_实例的Command来充当工作者。然后用shell脚本来确保没有工人变成僵尸。谢谢! – cdrev
一般情况下,我建议使用enqueue库。您可以从各种可用的传输中进行选择,从最简单的文件系统和Doctrine DBAL到真正的RabbitMQ和Amazon SQS。
关于消费者,您需要一些流程管理器。有几种选择:
http://supervisord.org/ - 您需要额外的服务。它必须正确配置。
纯粹的PHP进程管理器,如this。基于Symfony流程组件和纯PHP代码。它可以处理重启进程,纠正sigterm信号退出等等。
php \ swoole过程管理器,如this。它需要一个swoole PHP扩展,但性能是惊人的。
PHP支持多线程:http://php.net/Thread –