ruby-on-rails - 在 Rails begin-end block 中启动异步进程会导致问题吗?

标签 ruby-on-rails ruby sidekiq

我希望在 Rails 的开始结束 block 中启动异步工作任务。例如:

begin
 a = 1
 b = a + 2
 Workers::SideKiqAsynTask.new().process
end

我无法理解开始是否会等待 Workers 任务(这是一个 Sidekiq 异步进程)完成。

最佳答案

简短版本是异步运行的 Sidekiq 作业,不会阻止开始...结束。也就是说,看起来您可能正在尝试使用更深层次的 Sidekiq 类做一些事情。

较长的解释:

因此,如果您尝试启动单个任务的单次运行,通常会创建一个包含 Sidekiq::Worker 模块的新类。然后定义一个名为perform 的方法来异步执行您想要执行的工作。然后,您对工作线程调用perform_async。它看起来像这样:

# in app/workers
class MyCoolWorker
  include Sidekiq::Worker

  def perform(numbers)
    crunch_numbers_for_a_long_time(numbers)
  end
end

# wherever you want to kick off a task
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
MyCoolWorker.perform_async(numbers)

您还可以在特定时间安排任务

MyCoolWorker.perform_in(1.hour)

您需要安装 Redis 并使用 bundle exec sidekiq 运行 Sideqik

perform_asyncperform_in 只会告诉 sidekiq“嘿,请在你可以的时候/在我告诉你的时候为我做这个”,速度非常快,然后就完成了。实际工作是由 Sidekiq 在不同的 Ruby 进程中完成的。

这是 Sidekiq 文档中提供帮助的好地方:

https://github.com/mperham/sidekiq/wiki/Getting-Started

甚至还有演示:)

关于ruby-on-rails - 在 Rails begin-end block 中启动异步进程会导致问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49286635/

相关文章:

ruby-on-rails - Rails 3.2 查询 - .exists?

ruby-on-rails - 如何在 capistrano 部署上设置环境变量?

ruby-on-rails - rails : How does controller instance variables work

ruby-on-rails - 使用 authlogic 自动创建用户绕过显式用户注册

Ruby "count"哈希方法

ruby-on-rails - 本地人不适用于 Rails 5.1 中的 Controller 渲染

ruby-on-rails - 你如何分解出 RSpec 中常见的 "before(:each)"调用,以便多个规范可以使用它们?

ruby-on-rails - 我对 Unicorn、Sidekiq 和数据库池大小的理解是否正确?

ruby-on-rails - Sidekiq:NoMethodError:未定义的方法 `perform'

ruby - 如何在不重试中间件的情况下推回 sidekiq 作业?