我正在尝试安排相同的工匠任务在Laravel 5.2中并行运行。首先,我将$schedule->command
置于Kernel.php
中的for循环中:
for ($j = 0; $j < 10; $j++) {
$schedule->command('foo:bar --option=' . $j)
->dailyAt("1:00");
}
我发现foo:bar实际上是以串行的方式逐个运行。下一个命令在前一个命令完成时开始。
然后我按如下方式更改了代码,
$schedule->call(function(){
for ($j = 0; $j < 10; $j++) {
Artisan::queue('foo:bar', [
'--option' => $j
]);
}
})->dailyAt(1:00);
当我使用ps aux
检查Ubuntu时,我看到了两个任务而不是10个任务。我错过了什么吗?从同一时间开始,安排同一个Artisan任务并行运行的最佳方法是什么?感谢。
答案 0 :(得分:2)
使用Supervisor管理排队任务,您可以一次运行多个任务。经过一个痛苦的下午看完电子邮件后,我在排队后每隔一秒就学到了这一点!
我的conf文件(在/etc/supervisor/conf.d/{appName}.conf中)
[program:mylaravelappnamequeue]
command=php /var/www/html/mylaravelappname/artisan queue:listen --tries=1
directory=/var/www/html/mylaravelappname
stdout_logfile=/var/www/html/mylaravelappname/storage/logs/supervisord.log
redirect_stderr=true
autostart=true
autorestart=true
numprocs = 10
process_name = %(program_name)s%(process_num)s
信用到期日:https://laracasts.com/discuss/channels/general-discussion/how-to-speed-up-queues
是的,这不是“真正的”并行,但它确实更快地运行队列!另外,检查你有多少RAM,你可能想要将numprocs
降低到4级。
编辑:一些格式