2012-11-22 111 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

相关问题