Здравствуйте, я знаю, что планировщик Artisan вызывается cron, и минимальная частота в crontab — «каждую минуту»
Как я могу получить более высокую частоту?
Я могу реализовать это с помощью программного обеспечения (PHP): как сценарий вызывается каждую минуту, но сам сценарий будет таймер других подопераций?
Или, что лучше, я могу реализовать это с помощью bash-скрипта (может быть, всегда вызывается с помощью cron … но будет управлять несколькими вызовами в минуту, с отслеживанием процессов / сборкой мусора)
Могу поспорить, что уже есть что-то, что реализует подпрограмму на стороне сервера с частотой выше 60 «.
Вы знаете какой-нибудь реальный рабочий пример / реализацию, которая поймет смысл моего вопроса?
Спасибо
Это предполагает, что операции не интенсивны, и они будут не возьмите любое реальное количество времени, иначе ваши рабочие места будут повторяться, и вы будете ненавидеть себя
$times_per_minute = 10;
for($i=0; $i<$times_per_minute; $i++) {
do_my_awesome_function();
sleep(60/$times_per_minute);
}
Тогда запланируйте, что ваша задача cron — запускать вышеуказанный код каждую минуту.
[РЕДАКТИРОВАТЬ]Более модная версия проверяет окклюзию во время выполнения:
$start_time = time();
$times_per_minute = 10;
for($i=0; $i<$times_per_minute; $i++) {
do_my_awesome_function();
$actual_runtime = time() - $start_time;
$predicted_runtime = $i * (60/$times_per_minute);
$offset_time = $predicted_runtime - $actual_runtime;
sleep((60 - $offset_time)/$times_per_minute);
}
Еще более интересная версия может проверить, достаточно ли времени для повторного запуска цикла:
$start_time = time();
$times_per_minute = 10;
for($i=0; $i<$times_per_minute; $i++) {
if($i > 0) {
$average_run_time = (time() - $start_time) / $i
if(time() - $start_time + $average_run_time > 60) {
break;
}
}
do_my_awesome_function();
$actual_runtime = time() - $start_time;
$predicted_runtime = $i * (60/$times_per_minute);
$offset_time = $predicted_runtime - $actual_runtime;
sleep((60 - $offset_time)/$times_per_minute);
}
Других решений пока нет …