我在導致DeadlineExceededError的任務隊列中有一個長時間運行的進程,因爲任務可能需要超過10分鐘。正如我在this question中所描述的那樣,長時間運行的進程有一個for循環,用於循環計算用於創建kml文件的大型字典中的新值。任務目前看起來是這樣的:從GAE中的任務獲取數據以形成任務隊列循環的最佳方式是什麼?
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.
有沒有辦法從任務找回數據,這樣我可以創建一個使用前一個任務的結果按順序創建的小任務循環?我是否需要將前一個任務中的字典存儲在數據存儲中,然後檢索它們以創建下一個任務? (我希望避免這種情況,因爲字典非常大,我認爲這可能很困難)。
這回答了我的問題,即結果需要存儲在數據存儲中。我將嘗試使用Peter Knego建議的後端任務隊列來避免此問題。謝謝! – dave
@Jay:OP正在詢問如何從任務中取回數據,而不是將數據傳遞給它。傳遞給任務的數據限制爲100KB,因此它不是那麼小:https://developers.google.com/appengine/docs/java/taskqueue/overview-push#Quotas_and_Limits_for_Push_Queues –