2013-05-31 5 views
0

Я реализовал команду в моей настройке Symfony, которая захватывает задание из БД и затем обрабатывает его.Запуск нескольких команд Symfony сразу

Как запустить несколько экземпляров команды сразу, чтобы быстрее выполнить задания. Я знаю, что многопоточность не поддерживается в PHP, но, видя, как вызывается команда из оболочки, мне было интересно, было ли обходное решение.

команда вызова с помощью:

app/console job:process

+1

Многопоточность поддерживается в PHP: http://php.net/Thread –

ответ

7

Путь я бы решить эту проблему, чтобы использовать очередь работы с несколькими рабочими. Это проще управлять и масштабировать, чем вручную запускать несколько процессов и беспокоиться о параллелизме.

Самый простой очереди общего назначения я нашел для работы с PHP/Symfony является beanstalkd, который вы можете интегрировать в Symfony2 с LeezyPheanstalkBundle

+0

Реализовано это при наличии _N_ экземпляров 'command', действуя в качестве рабочего. И затем сценарий оболочки, чтобы убедиться, что ни один из рабочих не стал зомби. Благодаря! – cdrev

0

В общем, я предлагаю использовать enqueue библиотеку. Вы можете выбирать из множества доступных транспортов: от простейшей файловой системы и Doctrine DBAL до реального, как RabbitMQ и Amazon SQS.

Что касается потребителей, вам нужен диспетчер процессов. Существует несколько вариантов:

  1. http://supervisord.org/ - Вам необходимо дополнительное обслуживание. Он должен быть настроен правильно.

  2. Чистый менеджер процессов PHP, такой как this. На основе компонента процесса Symfony и чистого PHP-кода. Он может обрабатывать перезагрузку процесса, корректный выход на сигнал сигмема и многое другое.

  3. Администратор процесса php \ swoo как this. Для него требуется swoole PHP extension, но производительность потрясающая.

Смежные вопросы