我已經在Symfony設置中實現了一個命令,它從數據庫中獲取作業並對其進行處理。同時運行多個Symfony命令
如何一次運行多個命令實例以更快地完成任務。我知道PHP中不支持多線程,但是看到從shell調用該命令時,我想知道是否有解決方法。使用
調用命令:
app/console job:process
我已經在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 –