Вопрос

Привет. Я работаю над приложением приложений, который включает запросы к 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top