Я использую deferred
, чтобы поместить задачи в очередь по умолчанию в приложении 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 очереди задач?