什么是获取数据从GAE任务回来,形成任务队列的一个循环的最佳方式?(What's the b

2019-10-17 10:10发布

我有是导致DeadlineExceededError因为任务可以超过10分钟需要更长的时间任务队列中的长期运行的进程。 正如我在说明这个问题 ,长期运行过程中有一个for循环,依次是用来创建KML文件大型辞书计算新的值。 任务目前看起来是这样的:

class longprocess_handler(webapp2.RequestHandler):
def post(self):
#This is currently one task that recursively uses data in dictionaries to 
#produce kml files every few minutes
    for j in range(0, Time):
    # Processes data from dictionaries sequentially in this for loop
    # Sends message to client to request the data.

我想使这一过程分成几个小任务,比如:

class longprocess_handler(webapp2.RequestHandler):
def post(self):
    for j in range(0, Time):
        # Send dictionaries to smaller task 
        CallSmallerTask_handler(dictionaries)
        # Receive dictionaries back from task.  (How do I do this?)
        # Repeat for loop with new dictionaries to call next task.

有没有办法从任务找回数据,这样我可以创建更小的任务,一个循环,使用的是以前的任务的结果依次制作? 我需要的字典从数据存储中的前一个任务存储并检索他们创造的下一个任务是什么? (我希望能避免这种情况,因为字典是非常大的,我想这可能是困难的)。

Answer 1:

你将不得不在大型辞书存储到数据存储。 只有在情况下,一个任务的输出是比较小的(不是你的情况下),也可以通过输出作为参数(S)到任务的处理程序。

一个可能的优化是使用NDB或在数据存储之上实现自己的缓存层,从而读取调用的一个很好的比例将从缓存中取得,从来没有到达数据存储。 只要记住,应该存储到缓存和数据存储进行,因为缓存是不是100%可靠。



Answer 2:

你可以简单地在后台执行任务队列的任务 。 这将解除所述10分钟时间执行限制。



文章来源: What's the best way to get data back from a Task in GAE to form a loop of Task Queues?