Параллелизм PHP через Cron


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

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

Author: hakre, 2010-09-02

5 answers

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

 5
Author: Brent Baisley, 2010-09-01 23:12:45

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

 2
Author: Wrikken, 2010-09-01 23:13:10

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

 1
Author: Rob Olmos, 2010-09-01 23:51:11

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

 0
Author: polemon, 2010-09-01 23:13:07

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

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

 0
Author: Lance, 2010-09-02 02:32:22