1

我的任务队列中有一个长时间运行的进程,它导致了 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.

有没有办法从任务中获取数据,以便我可以创建一个较小任务的循环,这些任务是使用前一个任务的结果按顺序创建的?我是否需要将上一个任务中的字典存储在数据存储中,然后检索它们以创建下一个任务?(我希望避免这种情况,因为字典非常大,我认为这可能很困难)。

4

2 回答 2

4

您可以简单地在后端执行任务队列任务。这将取消 10 分钟的执行限制。

于 2012-11-19T10:12:02.667 回答
3

您必须将大型字典存储到数据存储中。只有在一个任务的输出相对较小的情况下(不是你的情况),才有可能将输出作为参数传递给任务的处理程序。

一种可能的优化是使用 ndb 或在数据存储之上实现您自己的缓存层,因此很大比例的读取调用将从缓存中进行,并且永远不会到达数据存储。请记住,应该对缓存和数据存储进行存储,因为缓存不是 100% 可靠的。

于 2012-11-20T07:17:39.137 回答