You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中同时执行N个任务?多队列及Supervisor尝试未果

解决方案建议

你之前的多队列用法没达到并行效果,是因为queue:work --queue=default,first,second是让单个Worker进程按顺序从队列取任务执行,本质还是串行。要实现N个任务同时执行,核心是启动多个独立的Worker进程,具体方案如下:

1. 通过Supervisor配置多Worker进程(通用方案)

修改你的Supervisor配置文件(通常在/etc/supervisor/conf.d/laravel-worker.conf),设置numprocs参数指定并行进程数:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /你的项目路径/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=你的服务器用户名
numprocs=10  # 这里设置你需要的并行任务数,比如10个
redirect_stderr=true
stdout_logfile=/你的项目路径/storage/logs/worker.log

配置完成后,重启Supervisor生效:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

每个Worker进程会独立从队列中取任务执行,这样就能实现多任务并行。

2. 针对不同队列分配专属Worker(可选)

如果需要给不同队列分配不同数量的Worker,比如优先处理default队列,可以配置多个Supervisor进程:

# default队列分配5个Worker
[program:laravel-worker-default]
process_name=%(program_name)s_%(process_num)02d
command=php /你的项目路径/artisan queue:work redis --queue=default --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=你的服务器用户名
numprocs=5
redirect_stderr=true
stdout_logfile=/你的项目路径/storage/logs/worker-default.log

# first队列分配3个Worker
[program:laravel-worker-first]
process_name=%(program_name)s_%(process_num)02d
command=php /你的项目路径/artisan queue:work redis --queue=first --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=你的服务器用户名
numprocs=3
redirect_stderr=true
stdout_logfile=/你的项目路径/storage/logs/worker-first.log

3. Laravel 8+ 简化方案:使用--processes参数

Laravel 8及以上版本支持直接通过--processes参数启动多进程Worker,无需配置多个Supervisor进程:

php artisan queue:work redis --queue=default,first,second --processes=10

这个命令会一次性启动10个Worker进程,同时处理指定队列中的任务,适合快速测试或轻量场景。

注意事项

  • 确保队列驱动不是sync:sync驱动会同步执行任务,不会进入队列,需改为redis或database(推荐Redis,性能更好)。
  • 控制进程数量:根据服务器CPU、内存资源调整numprocs或--processes的值,一般设为CPU核心数的1-2倍,避免资源耗尽。
  • 任务本身无阻塞:如果任务包含长时间同步操作(比如同步HTTP请求),会占用Worker进程,影响并行效率,尽量改为异步处理。

内容的提问来源于stack exchange,提问作者Bhargav Variya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 09:40:29