Можно ли создавать потоки в wsgi-приложении?

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

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

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

(если есть лучший способ, это было бы хорошо)

Ответ 1

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

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

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

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

Ответ 2

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

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