【发布时间】:2012-03-21 09:56:04
【问题描述】:
我有一个后端服务的拉取队列,当队列为空时,我需要触发另一个脚本。
目前我在从队列中租用任务的方法中使用了一个非常粗略的检测,因此如果返回的任务列表为空,我们假定没有更多可以租用并触发下一步。然而,虽然这在大多数情况下都有效,但有时即使有可用的任务,租约请求似乎也会返回一个空列表。
无论如何,我认为更好的方法是使用队列的 fetch_statistics 方法。这样,脚本可以监控拉取队列中发生的事情,并知道队列中没有更多的项目。现在这显然可以通过队列的 REST api 获得,但是当我在内部使用它们时使用它似乎相当落后。
所以我正在调用 Queue.fetch_statistics(),但它会引发错误。我已经尝试将声明的错误放入 Google,但它没有返回任何内容。在 stackoverflow 上也是如此。
它总是抛出:
AttributeError: type object 'QueueStatistics' has no attribute '_QueueStatistics__TranslateError'
我的代码是:
q = taskqueue.Queue('reporting-pull')
try:
logging.debug(q.fetch_statistics())
except Exception, e:
logging.exception(e)
任何人都可以对此有所了解吗?我在这里做了什么非常愚蠢的事情吗?
【问题讨论】:
-
AFAIK Queue 没有 fetch_statistics 方法
-
确实如此,当然它在代码 sdk 中,但它没有记录。它是用于 REST API 服务的 JSON 化方法。在 taskqueue.py 第 1810 行
def fetch_statistics(self): """Get the current details about this queue. Returns: A QueueStatistics instance containing information about this queue. """ return QueueStatistics.fetch(self)中,抛出的异常也与从方法返回的对象有关,而不是与方法本身不存在有关。在运行时可能会略有不同。 -
使用未记录的 api,提供者在什么时候可以切断你并破坏你不是最明智的事情。
-
它在code.google.com/appengine/docs/python/taskqueue 上唯一没有记录,而且很多东西没有包括在内或严格准确。 REST API 正在使用代码本身,因此不太可能被切断,我记得不久前在 PYTHON Group 上也提到过这个特性。反正我只需要它在 3 月剩下的时间里运行,所以它不像我依赖它作为核心长期应用程序功能的一部分。