Параллельное выполнение операций в PHP?

Есть ли тут люди опытные в написании PHP-скриптов с параллельным выполнением некоторых действий? К примеру, есть веб-страница, информация для которой скачивается и парсится из нескольких источников. Логично распараллелить эти процессы. Как технически это можно реализовать? ОС linux или freebsd. Есть вариант c запуском фоновых процессов (exec('php somescript… &')), которые будут эти операции выполнять и результат сохранять в файлы, а основной процесс будет ожидать появления этих файлов. Но как-то это неоптимально, мне кажется.
  • Вопрос задан
  • 17120 просмотров
Пригласить эксперта
Ответы на вопрос 8
stan_jeremy
@stan_jeremy
если вам реально надо просто парсить — то можно воспользоваться php.net/manual/ru/function.curl-multi-exec.php?
Ответ написан
Skpd
@Skpd
Ответ написан
Комментировать
zizop
@zizop
Как вариант — обернуть таски в что-нибудь удобоваримое типа Symfony 2 Console Command и гонять их через PHP Process Manager
Ответ написан
@Bal
>К примеру, есть веб-страница, информация для которой скачивается и парсится из нескольких источников. Логично распараллелить эти процессы.

Логичнее всего подобные задачи запускать в виде cli-скриптов. Соответственно, задача распараллеливания решается автоматически запуском N разных скриптов.

Если же нужно делать всё из одного скрипта — то удобнее всего использовать fork. Хотя и будут трудности с синхронизацией данных.

Если же, скажем, посещение пользователем страницы должно инициировать фоновые процессы (скажем, ответ пользователя в тему форума, порождающий рассылку нотификаций по e-mail), то тут удобно послать задание в gearman. И отдельно будет крутиться демон, который будет забирать с gearman'а задания и отрабатывать их отдельным потоком.
Ответ написан
Praeses
@Praeses
Если совсем просто. то командой nohup полностью отделяем процесс в выполнение.
И ставим какие-то условия для обработки разных данных (чтобы наслоения в обработке не было).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы