@kirill-93

PHP. Как правильно сделать очередь запросов?

Есть база сущностей, информацию о которых нужно обновлять раз в сутки. Есть API, к которому можно обращаться не чаще 1 раза в секунду. Выбираю все сущности и в цикле обращаюсь к АПИ, но сервер отвечает по разному, иногда с задержкой, а иногда моментально, поэтому, чтобы не получить ошибку превышения лимита, в конце каждой итерации вызываю sleep(1).
Какими инструментами и каким способом можно сделать, чтобы запросы отправлялись ровно раз в секунду, и если первый не обработался до конца, то запускать параллельно второй и тп?
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Gregpopov
Full stack web developer
Посмотрите в сторону cron
Ответ написан
Комментировать
@devian3000
на PHP практически никак.
Можно в принципе сходу найти walk-around.
Берём основной скрипт, он будет consumer - ом в очереди.
В него приходят задания из очереди.
делаем цикл (псевдокод)
while(true)
get_next_message()
shell_exec('sender.php > /dev/null');
sleep(1);

Из него раз в секунду дёргаем другой скрипт который будет делать запрос к API и выполнять какие-либо действия.
Так ОС сама будет создавать потоки. а consumer не будет ждать когда закончится исполнение действий скрипта (вывод в /dev/null ).

Ещё можно поколдовать с fork (но форк скрипта должен после полезной работы(запроса) сам заканчиваться с 0. иначе случиться переполнение и сервер сдохнет.

Но лучше всё-таки или мириться с задержками или использовать что-то что поддерживает таки потоки.
Java, C++, Python и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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