1

我想在任务队列中加载几个任务(推送),然后确定我添加到队列中的任务组何时完成。我有以下代码:

    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:“如果此任务已成功删除,则为真。” https://developers.google.com/appengine/docs/python/taskqueue/tasks#Task_was_deleted

如果拉取任务创建成功,您的应用程序需要在处理后删除该任务。系统最多可能需要 7 天时间来识别任务已被删除;在此期间,任务名称仍然不可用。在此期间尝试使用相同名称创建另一个任务将导致“项目存在”错误。系统没有提供方法来确定已删除的任务名称是否仍在系统中。为避免这些问题,我们建议您让 App Engine 自动生成任务名称。 https://developers.google.com/appengine/docs/python/taskqueue/overview#Task_Concepts

这一段似乎暗示您不能立即确定给定任务何时被删除。这个对吗?

我的问题:

  1. was_deleted 的预期用途是什么
  2. 您如何确定添加到推送队列的特定任务(或任务组)何时完成
4

1 回答 1

1

我不能回答你的第一个问题,但是对于第二个问题,我和你有类似的需求。

我所做的是将要检查是否完成的任务分组到队列中,并使用 QueueStatistics 类您可以查看该队列的剩余任务数。

以下代码说明了如何获取该数据。您可以在交互式控制台中尝试。

from google.appengine.api import taskqueue

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

print(statsList.tasks)
于 2012-11-24T00:24:29.290 回答