Я получаю странное поведение - когда приложение запускает новый экземпляр в первый раз, я получаю DeadlineExceededError. Когда я нажимаю обновление в браузере, он работает нормально. И неважно, на какой странице я пытаюсь. Странная вещь, я могу видеть весь мой код отладки просто отлично. Фактически, я пишу в журнал непосредственно перед вызовом self.response, и он отображается в журнале консоли. Это довольно трудно устранить, так как я не имею никаких проблем загрузки страницы в среде разработки, а отслеживающий немного непрозрачным для меня:DeadlineExceededError только при запуске нового экземпляра (с использованием webapp2)
E 2013-09-29 00:10:03.975
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in Handle
for chunk in result:
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 1286, in appstats_wsgi_wrapper
end_recording(status)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 1410, in end_recording
rec.save()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 654, in save
key, len_part, len_full = self._save()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/ext/appstats/recording.py", line 678, in _save
namespace=config.KEY_NAMESPACE)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 1008, in set_multi
namespace=namespace)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 907, in _set_multi_with_policy
status_dict = rpc.get_result()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 612, in get_result
return self.__get_result_hook(self)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/memcache/__init__.py", line 974, in __set_with_policy_hook
rpc.check_success()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 578, in check_success
self.__rpc.CheckSuccess()
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/api/apiproxy_rpc.py", line 133, in CheckSuccess
raise self.exception
DeadlineExceededError
I 2013-09-29 00:10:03.988
This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.
Я не знаю, как даже идти об отладке это, поскольку ошибка, кажется, после моего кода уже запущена.
Edit: Я хотел бы добавить следующее:
I 2013-09-29 00:09:06.919
DEBUG: Writing output!
E 2013-09-29 00:10:03.975
Вы можете увидеть там почти целую минуту между протоколирования «Дать выход!» как раз перед вызовом self.response и при возникновении ошибки.
Я прочитал это, но я не уверен, что это применимо. Я не импортирую много модулей, и я не уверен, что здесь будут полезны запросы на разминку, так как это происходит, когда есть нулевые экземпляры. (В настоящее время я тестирую своих пользователей и пока еще не так много трафика.) Также есть тот факт, что он умеет писать в журнал только отлично, и в этот момент все мои библиотеки загружены. Если максимальное время составляет 60 секунд, я могу сделать вывод, что мой код занимает всего 3 секунды для запуска, а затем истекает после того, как был вызван запрос self.response. –
Хорошо, думаю, я понял. Я включил запросы на разминку, что позволило мне установить минимальное количество незанятых экземпляров. Я установил его в 1, что теперь позволяет загрузке страницы просто отлично. Я все еще думаю, что это немного странно, нужно делать это, потому что из того, что я могу сказать, мой код занимает всего 3 секунды, когда он запускается. –
Включение мини-холостых экземпляров маскирует проблему, так как вы не разворачиваете экземпляр. Вы по-прежнему будете сталкиваться с этой проблемой время от времени, когда нагрузка повышается, и вам нужно развернуть новый isntance. По крайней мере, вы загружаете модуль appstats. Попробуйте отключить это для запуска. Также возможно, что несколько модулей, которые вы импортируете, косвенно импортируют многие другие модули. – dragonx