在Laravel队列中以哪种顺序执行作业?

时间:2016-07-10 14:02:08

标签: php laravel symfony asynchronous queue

Laravel队列是异步还是同步?例如,如果我添加2个作业,它将如何执行?

1)同步:

job #1 started
job #1 finished
job #2 started
job #2 finished

2)或异步:

job #1 started
job # 2 started
job #1 finished
job #2 finished

如果它同步,我怎么能让它异步(如2)

3 个答案:

答案 0 :(得分:3)

Laravel的队列系统允许多个工作人员,这意味着您可以并行运行任务,但每个工作人员将同步分配工作。如果只有一个工作程序在运行,它将一次只处理一个作业。

按照您想要的顺序处理队列的最简单方法是使用多个队列名称,例如“高”,“低”,“中等”等,然后告诉你的工人按顺序处理它们 - 例如:

php artisan queue:listen --queue=high,low

答案 1 :(得分:0)

使用主管 https://laravel.com/docs/5.8/queues#supervisor-configuration

config示例:

[program:queue-work]
process_name=%(process_num)s
command=/usr/local/bin/php /var/www/artisan queue:work --queue=worker,default --sleep=1 --tries=3
autostart=true
autorestart=true
user=www
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/storage/logs/queue_work.log

答案 2 :(得分:-6)

PHP不是异步语言。代码启动时,它会逐行运行,直到脚本结束。

如果要模拟异步任务,可以使用其中一个命令shell_execexec启动多个进程。 krakjoe还有一个定制的扩展名为pthreads的PHP。