Ещё раз про асинхронный вызов фунции на php?

Я хочу вызвать во время работы скрипта функцию так, чтобы скрипт не ждал, пока она завершится:

$html = curl_multi_getcontent($curl); // вот тут я получаю результат операции
$info = curl_getinfo($curl); // вот тут  - информацию об операции

process_resault($html, $info); // ВОТ ЭТА ФУНКЦИЯ будет работать минут десять, обработает результат, запишет его в базу, я НЕ ХОЧУ ЖДАТЬ ЕЁ ЗАВЕРШЕНИЯ

// Здесь я продолжаю работать, добавляю новые урлы в мультикурл, жду новых результатов и т.п.

Т.е. задача — вызвать произвольную функцию с параметрами и, не ожидая её завершения, продолжить работу.


В первую очередь, интересует кросс-платформенное решение.


Знаю, что статьи на тему были, но ответа на свой вопрос я так и не нашел. Не пинайте сильно.


Заранее спасибо!
  • Вопрос задан
  • 9307 просмотров
Решения вопроса 1
DevMan
@DevMan Куратор тега PHP
Используйте очередь задач (хоть готовую, хоть свою). Это будет намного проще придумывания костылей и кросс-платформенно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
kuzemchik
@kuzemchik
Мы используем Jenkins, с помощью curl дергаем задачу с параметрами, и она дальше работает. Логи jenkins имеет, за очередями сам следит.
Ответ написан
Wott
@Wott
В общем случае вам надо запустить эту функцию в отдельном процессе/нити, только тогда она будет выполнятся независимо ( с обычными оговорками, но все же )
Как именно это делать — это вопрос. Выше предлагают держать отдельные процессы, которые подхватят задание из очереди. Есть еще стандартный расширение pcntl, которое реализует стандартный unix механизм fork для создания дочернего процесса, но он не работает на виндах, например, в силу того что там это организовано по-другому.
Дополнительно есть особенности с работой php в веб-сервере с set_time_limit().

Когда мне надо было сделать какие-то долгие задачи, я делал фактически демон в bg и работал с ним через разные интерфейсы — то очередь через базу, то REST, что прикольней.
Ответ написан
@Claud
В php есть lib_events, но дела я с ней не имел и могу ошибаться в ее предназначение под вашу задачу.
Ответ написан
EugeneOZ
@EugeneOZ
Вот Вам моя php-библиотека для создания отложенных задач:
github.com/jamm/Tasks. Не требует ничего, кроме PHP. Может хранить в памяти, если захотеть (Redis, Memcached, APC).
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы