【发布时间】:2021-06-27 06:41:17
【问题描述】:
如果我想同时处理多个工作,我很困惑应该如何进行。
我有一个 Rails API,其中一项任务是获取其他 API。此任务需要很长时间,因为它会多次调用其他 API。 目前我所做的是创建一个活动作业并在有人想要启动此任务时调用 perform_later 方法(从控制器)。 但是,如果多个用户想要求该任务运行,我的理解是每个任务都会被排队并一个一个地处理,这我并不真正想要,因为这意味着一些用户将不得不等待很长时间。
如果我有不同的用户要求执行此特定任务,我想要的是,活动作业一次处理多个任务。
我应该如何进行?
我尝试从 perform_later 方法切换到执行,但是当一个任务正在运行时,如果我尝试调用我的 rails api,我的请求将暂停,直到第一个任务完成。 任何澄清或帮助表示赞赏。 谢谢!
【问题讨论】:
-
据我所知,主动作业是实现后台作业的唯一方法。尝试使用“sidekiq”适配器。
-
您需要多个后台(或 sidekiq)工作人员来并行处理这些多个进程。我想您正在本地机器上测试您的代码并且您还没有配置您的应用程序。 This article 可以帮到你。
-
我还建议使用queue adapter,例如Sidekiq。 Sidekiq 中的
concurrency设置允许您指定可以同时运行多少个作业,并且生成多个工作人员还可以让您同时运行更多作业(成本)。
标签: ruby-on-rails ruby rails-activejob