Приложение Engine: Time.sleep () Подсчет моих квот?
-
27-09-2019 - |
Вопрос
Привет. Я работаю над приложением приложений, который включает запросы к API Google Maps для геокодирования. Google Maps не любит слишком много запросов, поэтому я положил 1 секунду задержки между каждым запросом с time.sleep(1)
.
Я заметил, что мои квоты работают низко в мою панель DACE GAE и решили запустить короткий тест:
import cProfile
import time
def foo():
time.sleep(3)
cProfile.run('foo()')
Который дал мне следующий вывод:
4 function calls in 3.003 CPU seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 3.003 3.003 <stdin>:1(foo)
1 0.000 0.000 3.003 3.003 <string>:1(<module>)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
1 3.003 3.003 3.003 3.003 {time.sleep}
Итак, он говорит, что он потребляет 3 секунды ЦП для time.sleep(3)
. Отказ Теперь мне интересно, если бы они назывались, подсчитаны на ограничения квоты, что обеспечивает GAE. И если это так, каков другой способ задержек между API-призывами для геокодирования?
Спасибо.
Решение
Вы, конечно, не хотите пытаться спать в системе, которая полностью спроектирована с земли до окончания запросов в абсолютном максимально коротком времени: D
То, что вы могли бы сделать вместо этого, создает задачу для каждого геокода (проверьте Отложенная библиотека). Вы хотите указать очередь для этой задачи, а затем просто установите ограничение скорости на очередь к тому, что вы чувствуете, что Geocoder Maps может быть удобным.
Таким образом, каждый геокод будет запущен, и вы никогда не пойдете быстрее, чем ограничение скорости, и вам не нужно делать сантехника.
Другие советы
Я довольно уверен, что задачи очередей также рассчитывают на использование вашего процессора в разрыв. Касательно sleep()
, Я не думаю, что произойдет «штраф» от этого, но я думаю, что это плохой стиль.
Зачем вообще спать? В вашей задаче выполните одно геокодирование и просто опубликуйте еще один выговор для себя в очереди в 3Secs. Смотрите параметр countdown
При вызове http://code.google.com/intl/el/appengine/docs/python/taskqueue/functions.html#add. .
Ваш эксперимент доказывает, что время. Время. Посмотреть на экспериментальный Очередь задачи API.. Отказ Если ваша задача не инициирована пользователем, вы также можете использовать Смягчать Задачи, но я не знаю, будет ли это хорошо работать с такими небольшими интервалами.
Этот Проблема Отчеты о том, что репортер не был выставлен счет за счет процессоров, понесенных временем. Очень вероятно, Appstats также использует CPROFIL. Спать важен для людей, пытающихся сделать лучшие асинронные прокси, которые он мог бы использовать для геокодирования большего набора предметов.
http://code.google.com/p/googleapengine/issues/detail?id=3291.