Могут ли потоки AppEngine Python длиться дольше, чем исходный запрос? - PullRequest
2 голосов
/ 13 декабря 2011

Мы пытаемся использовать новую возможность работы с потоками python 2.7 в Google App Engine, и создается впечатление, что созданный поток уничтожается до того, как он завершает работу. Наш сценарий:

  • Пользователь отправляет сообщение на сервер
  • Обновляем данные пользователя
  • Мы создали поток, чтобы выполнить более тяжелую обработку
  • Мы возвращаем ответ пользователю, прежде чем дождаться окончания обработки в тяжелых условиях

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

Допускается ли существование потоков после возврата ответа? Это не воспроизводится на сервере dev, только на живых серверах.

Конечно, мы могли бы вместо этого использовать очередь задач, но это реальная боль, поскольку нам пришлось бы устанавливать URL для действия и сериализовать / десериализовать данные.

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011

Раздел «Песочница» на этой странице: http://code.google.com/appengine/docs/python/python27/using27.html#Sandboxing указывает, что потоки не могут выполняться после окончания запроса.

3 голосов
/ 13 декабря 2011

Отложенные задачи способ сделать это.Вам не нужен URL или сериализация, чтобы использовать их:

from google.appengine.ext import deferred
deferred.defer(myfunction, arg1, arg2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...