PHP параллелизм через Cron - PullRequest
5 голосов
/ 02 сентября 2010

У меня есть несколько сценариев, которые должны выполняться одновременно как отдельные процессы.Мой план состоит в том, чтобы иметь задание cron, которое выполняет несколько экземпляров этих сценариев с заданным интервалом.Это хорошая идея?Каковы плюсы / минусы этого подхода?Есть ли другие варианты, которые мне нужно рассмотреть?

Итог: я пытаюсь имитировать многопоточность.Любые условия гонки будут обрабатываться с помощью кода (например, установка статусов в БД и т. Д.).Сценарии должны выполнять сложные задачи (например, создавать эскизы и т. Д.).

Ответы [ 5 ]

5 голосов
/ 02 сентября 2010

Вы можете использовать разветвление. Сценарий запуска будет загружать все конфигурации и инициализации по умолчанию, а затем обрабатывать дочерние процессы. Затем он может отслеживать процессы, чтобы убедиться, что они все еще работают. http://php.net/manual/en/function.pcntl-fork.php

2 голосов
/ 02 сентября 2010

Что ж, если вам это нужно как cronjob, продолжайте. Если вам нужно несколько процессов, вы, скорее всего, захотите использовать pcntl_fork для создания нескольких экземпляров одного и того же сценария.

1 голос
/ 02 сентября 2010

В зависимости от того, насколько быстро вы хотите реагировать на эти задания, и если вы хотите выполнять задачи с интенсивным использованием процессора, вы также можете распределить эту обработку с помощью системы очередей. Проверьте Gearman или beanstalkd с несколькими рабочими на машину, если у вас несколько ядер / процессоров.

0 голосов
/ 02 сентября 2010

Одним из недостатков использования cron является то, что он будет выполнять копию вашего скрипта с заданным интервалом независимо от того, сколько процессов скрипта уже запущено.Это означает, что сценариям необходим способ взаимодействия друг с другом, чтобы одновременно можно было запустить максимум N сценариев (избыточные сценарии могут просто завершиться немедленно).

Альтернативой cron может быть supervisord , который выполнит настраиваемое количество сценариев и будет контролировать каждый из них, чтобы каждый из выходов вызывался.

0 голосов
/ 02 сентября 2010

Разве PHP не имеет fork()?Хотя в действительности это не многопоточность, это основной способ совместной работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...