событие wp по расписанию выполняется в фоновом режиме или нет?


Согласно кодексу,

Планирует хук, который будет выполняться ядром действий WordPress с определенным интервалом, указанным вами. Действие сработает, когда кто-то посетит ваш сайт WordPress, если запланированное время прошло.

Предположим, что я запускаю функцию, используя wp_schedule_event. Функции нужно 20-30 секунд, чтобы закончить свою задачу.

Так это повлияет на пользователя или нет? Я имею в виду, если он выполняется в фоновом режиме, как обычные задания cron это не влияет на пользователя.

Author: Damithatt, 2016-10-27

2 answers

Это зависит от обстоятельств. Триггер начальной загрузки страницы не должен срабатывать, но производительность может снизиться по мере того, как посетители будут просматривать ваш сайт до завершения задания Cron.

Является ли запланированное мероприятие, которое вы планируете использовать, интенсивным с использованием PHP или БД? Как часто он будет запускаться?

Вот как это работает

  • Запланированное событие (оно же задание Cron) будет инициализировано, как только оно будет выполнено (или просрочено) тем, кто зайдет на ваш веб-сайт. Так что посещение www.test.com/somepage/ скажет мистеру WP-Cron: "Эй, чувак, пора просыпаться и запустите это задание Cron".
  • Если для завершения требуется 20-30 секунд и это интенсивная задача для БД или PHP (например, множество инструкций ВСТАВКИ или ОБНОВЛЕНИЯ БД или разбор огромного файла .xml и т. Д.), Есть большая вероятность, что сайт будет медленным для любого в течение этого времени. Особенно, если вы находитесь на общем хостинге из-за общего процессора и памяти.

Если это задание Cron, которое вы выполняете раз в день или неделю, я бы не беспокоился о снижении производительности.

Поддерживающий Ответ

 3
Author: cowgill, 2017-04-13 12:37:49

Я думаю, что вопрос заключается в том, выполняется ли какое-либо задание cron в "основном" PHP-работнике, который представляет выходные данные посетителю, или оно выполняется в другом PHP-работнике, не "блокируя" поток посетителей.

Это легко выяснить экспериментальным путем.

Попробуйте добавить оператор "echo '<h1>Yes, it Runs on this thread</h1>';" где-нибудь в начале скрипта cron-задания. Если вы затем посетите свой сайт и увидите где-нибудь на своем дисплее "Да, он работает в этом потоке", то задание cron выполняется на вашем нить.

Если вы этого не сделаете, что, кстати, и происходит на самом деле, задание cron выполняется в фоновом режиме (т.Е. в другом PHP-"работнике", когда вы используете PHP-FPM).

 0
Author: Lucas Cave, 2019-09-12 08:51:50