Можно ли создавать потоки в wsgi-приложении? - PullRequest
14 голосов
/ 05 июля 2011

Чтобы достичь чего-то похожего на «отложенные вызовы» в механизмах приложений Google (т. Е. Запрос обрабатывается, а затем обрабатывается отложенная задача), я немного поэкспериментировал и нашел решение для создания потока, в котором мой отложенный вызоввызов обработан.

Сейчас я пытаюсь определить, является ли это приемлемым способом.

Возможно ли (согласно спецификации WSGI), что процесс завершается веб-сервером после фактическогозапрос обрабатывается, но до того, как все потоки закончатся?

(если есть лучший способ, это тоже подойдет)

Ответы [ 2 ]

13 голосов
/ 05 июля 2011

WSGI не определяет время жизни процесса приложения (поскольку приложение WSGI является вызываемым объектом Python).Вы можете запустить его способом, полностью независимым от веб-сервера, и в этом случае только вы контролируете время жизни.

В WSGI также нет ничего, что запретило бы вам создавать потоки или процессы,или делать что хочешь, черт возьми.

7 голосов
/ 07 июля 2011

FWIW, также читайте:

http://code.google.com/p/modwsgi/wiki/RegisteringCleanupCode

Перехват действий для close () итерируемого является единственным способом в контексте самой спецификации WSGI для выполнения отложенной работы. Это не находится в отдельном потоке, хотя и будет происходить в контексте фактического запроса, хотя после того, как предполагается, что ответ был возвращен клиенту. Таким образом, ваше отложенное действие будет использовать этот поток запросов до тех пор, пока работа не будет завершена, поэтому поток запросов не сможет обрабатывать другие запросы до тех пор.

В целом, если вы используете фоновые потоки, нет никакой гарантии, что какой-либо механизм хостинга будет ожидать завершения этих фоновых потоков, прежде чем завершит процесс. На самом деле, я даже не могу вспомнить ни одного стандартного механизма развертывания, который действительно ждет. На самом деле нет даже гарантии, что обработчики atexit будут вызваны при завершении процесса, о чем кратко говорится в ссылочной документации.

...