您好我知道Artisan调度程序是由cron调用的,而crontab中的最小频率是"每分钟"
如何获得更高的频率? 我可以通过软件(PHP)来实现它:就像每分钟调用脚本一样,但脚本本身会定时其他子操作? 或者更好我可以通过bash脚本实现它(可能总是通过cron调用...但是会在每分钟内调用多个调用,进程正在监视/垃圾回收)
我敢打赌已经有了实现频率高于60"的服务器端例程的东西。 您是否知道任何可以实现我的问题的实际工作示例/实现?
由于
答案 0 :(得分:1)
这假设操作不是密集的,他们不会花费任何实际的时间,否则你的cron工作会重叠,你会讨厌自己
$times_per_minute = 10;
for($i=0; $i<$times_per_minute; $i++) {
do_my_awesome_function();
sleep(60/$times_per_minute);
}
然后安排你的cron作业是每分钟运行上面的代码。
[编辑]
a fancier版本检查运行时阻塞:
$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);
}