延迟作业中的并发性

pri*_*oel 5 ruby-on-rails delayed-job

我有 ROR 应用程序和 1 个使用 rake job:work 运行的delay_job 进程。ROR 应用程序在多个队列中添加作业。

假设我们有队列 1 和队列 2。
我的问题是队列 1 中的任务和队列 2 中的任务将同时执行吗?

目前,在我的应用程序中,运行 rake job:work process 后,仅生成 1 个线程,该线程执行队列 1 任务,然后执行队列 2 任务。
如果我必须并行执行,我必须运行 job:work 的两个 rake 任务。

这是正确的行为还是可以在 job:work 的 1 个 rake 任务中同时运行。Delay Job 中的worker 是什么?延迟工作可以与工作人员互换使用吗

谢谢普里
扬卡

Dan*_*nne 3

不,一名工作人员不能同时运行两项作业,您需要运行多个进程才能完成这项工作。

在您描述的示例中,您正在启动一个在前台运行的工作程序 ( rake job:work),但您可以做的是通过运行来将它们启动为后台工作程序bin/delayed_jobscript/delayed_job对于早期版本)。该命令有多个选项,您可以使用它们来指定您希望delayed_job如何运行。

选项之一是-n--number_of_workers=workers。这意味着您可以通过运行以下命令来启动两个工作进程:

bundle exec bin/delayed_job --number_of_workers=2 start
Run Code Online (Sandbox Code Playgroud)

还可以指定某些工作人员仅运行特定队列中的作业,或仅运行高优先级作业。