【发布时间】:2011-02-05 19:51:46
【问题描述】:
Google App Engine 有两种稍后运行作业的方法,Task Queues 和 Deferred jops
据我所知,它们支持所有相同的功能(例如,可以将延迟作业放置在特定任务队列中,这样您就可以限制执行) - 但延迟作业看起来更容易实现且更灵活。
有人知道每种方法的优缺点吗?在任何情况下,您都希望在延迟作业上使用任务队列?
【问题讨论】:
Google App Engine 有两种稍后运行作业的方法,Task Queues 和 Deferred jops
据我所知,它们支持所有相同的功能(例如,可以将延迟作业放置在特定任务队列中,这样您就可以限制执行) - 但延迟作业看起来更容易实现且更灵活。
有人知道每种方法的优缺点吗?在任何情况下,您都希望在延迟作业上使用任务队列?
【问题讨论】:
我不确定你是否注意到了,但是 deferreds 的文档最后有这个部分:
您可能想知道何时使用 ext.deferred,何时使用内置任务队列 API。以下是我们的建议。
如果出现以下情况,您可能希望使用延迟库:
- 你只是轻描淡写地使用任务队列。
- 您希望重构现有代码以在任务队列上运行且更改最少。
- 您正在编写一次性维护任务,例如架构迁移。
- 您的应用有许多不同类型的后台任务,为每种类型编写单独的处理程序会很麻烦。
- 您的任务需要复杂的参数,这些参数在不使用 Pickle 的情况下不容易序列化。
- 您正在为需要执行后台工作的其他应用编写库。
如果出现以下情况,您可能希望使用任务队列 API:
- 您需要完全控制任务的排队和执行方式。
- 您需要比延迟提供更好的队列管理或监控。
- 您的吞吐量很高,开销很重要。
- 您正在构建更大的抽象,需要直接控制任务。
- 与 RPC 模型相比,您更喜欢 webhook 模型。
当然,如果您的应用具有适合这两个组的要求,您可以同时使用任务队列 API 和延迟库。
【讨论】: