2012-11-22 75 views
1

我想在任務隊列中加載多個任務(推送),然後確定我已經添加到隊列中的任務組何時完成。我有以下代碼:確定任務是否已被刪除GAE Python

task = taskqueue.add(url='/task') 

    import time 
    while not task.was_deleted: 
     logging.info('not deleted yet') 
     time.sleep(1) 

無限循環。我預計,一旦任務被處理並刪除,'was_deleted'參數將返回True。但即使任務被刪除,'was_deleted'仍然返回false。以下是文檔的說明:

task.was_deleted:「如果此任務已成功刪除,則爲true。」 https://developers.google.com/appengine/docs/python/taskqueue/tasks#Task_was_deleted

如果拉任務成功創建,您的應用程序需要在處理後刪除任務。系統可能需要七天時間才能確認任務已被刪除;在此期間,任務名稱仍然不可用。嘗試在此期間創建具有相同名稱的另一個任務將導致「存在項目」錯誤。系統不提供確定刪除的任務名稱是否仍在系統中的方法。爲避免這些問題,我們建議您讓App Engine自動生成任務名稱。 https://developers.google.com/appengine/docs/python/taskqueue/overview#Task_Concepts

這段似乎建議您不能立即確定給定任務何時被刪除。它是否正確?

我的問題:

  1. 有什麼用途爲was_deleted
  2. 你怎麼確定何時特定任務(或任務組)加入佇列已經完成

回答

1

我不能回答你的第一個問題,但對於第二個問題,我有和你一樣的需求。

我所做的是將我想要在隊列中檢查完成的任務分組,並使用QueueStatistics類可以看到該隊列的剩餘任務數。

以下代碼說明如何獲取該數據。您可以在交互式控制檯中試用它。

from google.appengine.api import taskqueue 

statsList = taskqueue.QueueStatistics.fetch(taskqueue.Queue("default")) 

print(statsList.tasks) 
+0

我需要的是進行動態創造了許多不同的隊列 - 我不認爲這是可能的,你必須定義在queue.yaml中 – waigani

+0

我知道手動每一個新的隊列,在我的情況下,它的作品,因爲我有一批所有相同類型的任務。因此,每次批處理運行時,結束任務都會在繼續之前檢查隊列是否爲空。但那只是我的情況,我想也許它可以幫助你。 – payala

相關問題