【问题标题】:Is a worker can pickup more than one job?一个工人可以接多份工作吗?
【发布时间】:2020-10-26 06:38:47
【问题描述】:

我正在制作一个需要处理大量数据的系统。因此,我将 30 个功能相同但数据不同的工作分开。我想知道工人和工作的情况如何。我正在使用larvel 6 and supervisor。当我设置numprocs=1 并检查作业表时,我看到9 of 30 jobs have attempts=1。如果是这样,我认为 9 个工作由 1 个工人接手。当我设置numprocs=2 时,我看到10 of 30 jobs have attempts=1。即使一个工人做 9 个工作,如果我有 2 个工作人员,它应该 18 of 30 jobs have attempts=1,不是吗?
那么不是一个工人做一份工作吗?
这是我的主管配置。

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=/bin/php /var/www/test-dir/artisan queue:work --sleep=2 --timeout=3000 --daemon
autostart=true
autorestart=true
user=nginx
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/test-dir/worker.log
stopwaitsecs=3600

【问题讨论】:

  • 这是我的错。老 8 名工人没有以某种方式被杀,并且仍在运行。这就是为什么 9 个作业在运行,而我只有一个工人。

标签: laravel queue jobs supervisord


【解决方案1】:

您可以将不同的作业队列用于您可能拥有的不同类型的作业。看看如何做到这一点here - 关于队列的 Laravel 文档。

Here 是关于配置 Supervisor 的文档。 numprocs 选项只是告诉服务器要运行多少队列工作人员。您也许可以尝试设置多个 laravel 工作人员并将其与不同的队列结合起来,但总而言之,我认为您无能为力来加快速度。最后,laravel 的 queue worker 只是一个在你的系统上运行的进程。因此,它是否可以并行运行取决于系统规格。

一个队列可以完成的作业数量没有固定。队列将处理作业表中的所有内容。如果作业成功,则将其从作业表中删除,否则将其移至失败的作业。

【讨论】:

  • 您的回答似乎无法涵盖我的问题。我想知道的是,一个队列可以同时运行多个作业,也可以不运行。但这是我的错。另外 8 名工作人员仍在我的服务器上运行,这就是我对此表示怀疑的原因。
  • 一个队列一个接一个地运行作业,从数据库或您设置队列以处理的任何其他驱动程序中读取它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2017-05-21
  • 2021-05-08
相关资源
最近更新 更多