2010-11-23 17 views
2

Эй. Я довольно новичок в App Engine. Я создал веб-приложение Twitter, которое теперь работает в App Engine, и я постоянно сталкиваюсь с ограничениями на моем процессоре Over Quota. Я сделал небольшое профилирование, и я узнал, что каждый запрос состоит из двух запросов urlfetch, каждый из которых занимает до двух секунд процессора. Это время, вероятно, потрачено на ожидание, все остальные коды выполняются менее чем за 200 мс (включая работу с хранилищем данных). Квота рассчитана на 6,5 часов в день, и каждая моя просьба занимает ок. 4 секунды процессора. Сегодня утром я закончил бесплатную квоту всего за несколько часов.App Engine: CPU Over Quota on urlfetch()

Каково это? Я не могу заставить Twitter отвечать на мои вызовы API быстрее, и я не могу кэшировать результаты, так как каждый запрос предназначен для другого профиля Twitter.

Любая помощь с учётом, Thanks!

+1

http://code.google.com/p/googleappengine/issues/detail?id=678 – systempuntoout 2010-11-23 15:20:01

+1

http://code.google.com/appengine/docs/python/urlfetch/fetchfunction.html, кажется, что это не выбор? Проверьте параметр крайнего срока – 2010-11-23 16:07:04

+0

Вы уверены, что URLFetch потребляет процессорное время, а не только время настенного закрытия? Можете ли вы опубликовать изображение экрана appstats? – 2010-11-23 23:38:05

ответ

3

Я бы сбила с толку, что время, проведенное в urlfetch, чтобы ждать отдаленного ответа, подсчитывается к вашей квоте процессора, учитывая, что нет времени на процессорное время.

Но при условии, что это действительно проблема, asynchronous requests может быть вашим решением. Как минимум, вы можете наложить два запроса urlfetch для продолжения одновременно. Возможно, вы найдете другие вещи, которые можете сделать, пока ответ не вернется.

2

Вы должны изменить дизайн своего приложения.

Вместо того, чтобы делать запросы в Twitter из App Engine для каждого запроса пользователя:

  • ли запрос в браузере пользователя с JavaScript, если это возможно.
  • После URL-запроса, храните ответ Twitter в хранилище данных, поскольку вызов в хранилище данных выполняется быстрее при следующем запросе. Если вы можете кэшировать что-то в memcache, еще лучше.
  • Регулярно обновляйте хранимые данные с помощью заданий cron и очереди задач.
Смежные вопросы