2013-05-31 158 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擴展,但性能是驚人的。