2015-04-30 94 views
2

我认为Google App Engine中的任务队列(push,pull,deferred)并不能保证任务将以FIFO的顺序执行。例如,假设我有任务A,B和C的任务队列,并且每个任务都有时间戳t_A,t_B和t_C,例如t_A < t_B < t_C。我如何确保按照时间戳顺序执行任务A,B和C?如果任务B失败,我想推迟任务C的执行直到任务B成功执行。我已经看到了一个ETA字段来设置任务可以发送的最早时间,但是这看起来更像是启发式的,而不是保证。如何使用Google App Engine任务队列以(FIFO)顺序执行任务?

+0

CON从旁边调用下一个任务? –

+0

如果我理解正确,这基本上意味着我将自己管理任务执行和工作流程。我希望能坚持使用Google App Engine任务队列。但Google App Engine任务队列和任务不在API中提供'execute()'方法,似乎禁止从另一个任务执行队列中的任务。 – morfys

+6

而是您可以创建一个任务作为当前任务执行的最后一件事情。 –

回答

2

考虑使用管道API:

https://github.com/GoogleCloudPlatform/appengine-pipelines

他们已经完成的工作适合你:

https://github.com/GoogleCloudPlatform/appengine-pipelines/wiki/Python#user-content-execution-ordering

class LogWaitLogInOrder(pipeline.Pipeline): 

    def run(self, message1, message2, delay): 
    with pipeline.InOrder(): 
     yield LogMessage(message1) 
     yield Delay(seconds=delay) 
     yield LogMessage(message2) 

    yield LogMessage('This would happen immediately on run') 

管道API还为您提供了举报/反馈/通知/等。

但是,如果这是矫枉过正您的特定需要,那么就不要为@保罗建议,刚刚创建的下一个任务中的第一个完成时,希望最好


视频参考:

谷歌I/O 2010 - 数据管道与谷歌应用程序引擎:

https://www.youtube.com/watch?v=zSDC_TU7rtc

相关问题