Google App Engine – 任务队列与Cron Jobs

最新的Google App Engine版本支持Python中的新任务队列API 。 我正在比较这个API的function和已经存在的Cron服务 。 对于非用户启动的后台作业,例如抓取RSS提要并按日间隔分析。 可以和应该任务队列API用于这样的非用户发起的请求?

我会说“有点”。 要记住的任务队列的事情是:

1)每分钟/小时/天的操作限制与定期重复的操作不一样。 即使将令牌桶大小设置为1,我也不认为您可以保证这些重复会均匀分布。 这取决于他们说这个队列是作为一个令牌桶实现的时候有多严重,以及这个语句是否应该是接口的保证部分。 这是实验室,没有保证。

2)如果一个任务失败,那么它被重新sorting。 如果一个cron作业失败,那么它会被logging下来,不会重试,直到它再次到期。 因此,一个cron作业的行为方式与添加自身副本然后刷新feed的任务不同,或者作为刷新feed的任务,然后添加自己的副本。

使用任务模拟cron作业也许是可能的,但我怀疑这是值得的。 如果你正在努力解决一个需要30秒以上运行的cron作业(或者其他的请求限制),那么你可以把工作分成几部分,并且有一个cron作业,把所有的作品加到任务队列。 有一些关于asynchronousurlfetch的讨论(在GAE博客?),这可能是更新RSS源的最佳方式。

直到我观看Google I / Ovideo,他们才解释这个问题。 官方来源通常是最好的。

YouTubevideo

幻灯片从演示文稿

我看的方式是,如果我只是parsing一个RSS提要,一个Cron工作可能就足够了。 如果我必须parsing由用户或任何其他系统variables在运行时指定的X个RSS源,那么我将每次select任务。

我只是这样说的,因为在过去,我必须定期执行许多用户定义的twittersearch,并且使用Cron作业,结束了一个非常糟糕的排队系统来执行需要运行的请求 – 它没有扩展,没有帮助,一个cron工作可以是最小的间隔只有1分钟(我有更多的search执行比在一天的分钟)。

关于任务的很酷的事情是你可以给他们一个ETA,所以你可以说我希望将来会执行这个任务的时间是47秒,或者我希望这个在12:30执行。