Google App Engine - 使用任务队列还是延迟作业

4 投票
1 回答
2592 浏览
提问于 2025-04-16 11:18

Google App Engine 有两种方法可以在稍后的时间运行任务,分别是 任务队列延迟任务

从我了解的情况来看,它们支持的功能是差不多的(比如说,延迟任务可以放在特定的任务队列中,这样你就可以控制执行的速度)——不过,延迟任务看起来更容易实现,也更灵活。

有没有人知道这两种方法各自的优缺点?在什么情况下你会选择使用任务队列而不是延迟任务呢?

1 个回答

11

我不知道你有没有注意到,关于延迟任务的文档最后有这么一段:

你可能在想,什么时候应该使用 ext.deferred,什么时候又该用内置的任务队列 API。以下是我们的建议。

你可能想使用延迟库的情况:

  • 你只是轻度使用任务队列。
  • 你想对现有代码进行重构,让它在任务队列上运行,但又不想做太多改动。
  • 你在写一个一次性的维护任务,比如数据库结构迁移。
  • 你的应用有很多不同类型的后台任务,为每个任务写一个单独的处理程序会很麻烦。
  • 你的任务需要复杂的参数,这些参数不容易序列化,除非使用 Pickle。
  • 你在为其他应用编写一个需要进行后台工作的库。

你可能想使用任务队列 API 的情况:

  • 你需要完全控制任务是如何排队和执行的。
  • 你需要比延迟库提供的更好的队列管理或监控。
  • 你的任务量很大,开销很重要。
  • 你在构建更大的抽象,需要直接控制任务。
  • 你更喜欢 webhook 模型,而不是 RPC 模型。

当然,如果你的应用有同时适合这两种情况的需求,你可以将任务队列 API 和延迟库一起使用。

撰写回答