perform_later和perform_async有什么区别?

21
根据ActiveJob文档,要排队作业应使用perform_later。Sidekiq文档实现了perform_async,但是ActiveJob部分的文档建议使用perform_later。我之前在Rails中使用过perform_async,所以这两者有什么不同还是只是惯例?
1个回答

33

ActiveJob是一个包装了最常用的后台作业宝石的东西,提供了一个基本的API来处理后台作业。

ActiveJob定义了perform_later。Sidekiq定义了perfom_async。你使用哪种方法取决于你如何实现你的工作者。如果你使用ActiveJob工作者,则必须使用perform_later,如果你不使用ActiveJob而只是使用普通的Sidekiq工作者,则使用perform_async


实现工作线程的方式有推荐吗?perform_async提供了perform_later没有的功能吗?如果我需要从Sidekiq移动到不同的队列后端,那么选择perform_later会更好。 - sloneorzeszki
1
我不确定这两种方法是否完全等效,因为代码不同,但我猜你几乎会拥有相同的功能。不要想太多,如果你需要从perform_async中获取的某些东西perform_later没有提供,你可以肯定地实现你需要的内容。使用ActiveJob是一个好习惯,你不需要担心后台处理方法,只需使用单一接口编码并更改提供程序即可。当然,你也可以直接使用Sidekiq而不需要ActiveJob,但如果将来需要更改到另一种处理方法,这将成为一个问题。 - arieljuod
2
如果你真的需要一些特殊的仅适用于Sidekiq的功能,你甚至可以使用ActiveJob实现的工作程序和使用普通Sidekiq实现的工作程序。 - arieljuod
在没有充分理由的情况下,小心添加额外的依赖项。ActiveJob显著降低了Sidekiq的性能,因此需要权衡利弊是否值得。 - SMAG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接