我希望在 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_async
和 perform_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/