AppEngine任务队列API调用在TaskAlreadyExistsError上增加

时间:2011-08-26 12:39:04

标签: python google-app-engine task-queue

我正在使用deferred将任务放入类似于this approach的AppEngine应用中的默认队列中。

我使用每5秒更改一次的时间戳命名任务。在此期间,对队列进行了大量调用,并使用相同的名称生成TaskAlreadyExistsError,这很好。问题是当我检查配额时,“任务队列API调用”对于每次调用都在增加,而不仅仅是那些实际被放入队列的人。

我的意思是,如果您查看配额:Task Queue API Calls: 34,017 of 100,000并与实际的队列调用进行比较:/_ah/queue/deferred - 2.49K

以下是处理队列的代码:

try:
  deferred.defer(function_call, params, _name=task_name, _countdown=int(interval/2))
except (taskqueue.TaskAlreadyExistsError, taskqueue.TombstonedTaskError):
  pass

我认为这就是它的工作方式。是否有一个很好的方法来解决配额问题?我可以使用memcache存储task_name并检查除了上面的try / catch之外是否已添加任务?或者有没有办法在不使用任务队列Api呼叫的情况下检查任务是否已经存在?

2 个答案:

答案 0 :(得分:2)

感谢您指出这种情况,因为我没有意识到,但同样的问题一定会影响到我。

据我所知,将一些东西放入由任务名组成的内存缓存中应该可以正常工作,然后如果你想减少内存缓存上的那些命中,你可以在实例中本地存储该标志。

答案 1 :(得分:0)

解决配额问题的“好方法”是消除对Task Queue API的目标失败调用。

_name您每隔5秒使用一次更改,如果您提高任务队列的执行率,这可能不会成为瓶颈。但您也可以使用_countdown添加任务。