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)
答案 0 :(得分:3)
Laravel的队列系统允许多个工作人员,这意味着您可以并行运行任务,但每个工作人员将同步分配工作。如果只有一个工作程序在运行,它将一次只处理一个作业。
按照您想要的顺序处理队列的最简单方法是使用多个队列名称,例如“高”,“低”,“中等”等,然后告诉你的工人按顺序处理它们 - 例如:
php artisan queue:listen --queue=high,low
答案 1 :(得分:0)
使用主管 https://laravel.com/docs/5.8/queues#supervisor-configuration
[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_exec或exec启动多个进程。 krakjoe还有一个定制的扩展名为pthreads的PHP。