Python - Запустите длительный процесс из веб-приложения

У меня есть веб-приложение Python, которое должно запустить длительный процесс. Выгода, я не хочу, чтобы она ждала процесс для окончания. Просто запуск и конец.

Я работаю на Windows XP, и веб-приложение работает под IIS (если это имеет значение).

До сих пор я попробовал popen, но это, казалось, не работало. Это ожидало до законченного дочернего процесса.

6
задан Greg 3 June 2010 в 22:11
поделиться

4 ответа

Ок, я наконец-то разобрался с этим! Кажется, это работает:

from subprocess import Popen
from win32process import DETACHED_PROCESS

pid = Popen(["C:\python24\python.exe", "long_run.py"],creationflags=DETACHED_PROCESS,shell=True).pid
print pid
print 'done' 
#I can now close the console or anything I want and long_run.py continues!

Примечание: я добавил shell=True. Иначе вызов print в дочернем процессе давал ошибку "IOError: [Errno 9] Bad file descriptor"

DETACHED_PROCESS - это Флаг создания процесса, который передается в базовую функцию WINAPI CreateProcess.

7
ответ дан 10 December 2019 в 00:34
поделиться

Это почти работает (отсюда):

from subprocess import Popen

pid = Popen(["C:\python24\python.exe", "long_run.py"]).pid
print pid
print 'done'

'done' будет напечатано сразу. Проблема в том, что приведенный выше процесс продолжает работать до тех пор, пока long_run.py не вернется, и если я закрою процесс, он убьет процесс long_run.py.

Конечно, есть какой-то способ сделать процесс полностью независимым от родительского процесса.

1
ответ дан 10 December 2019 в 00:34
поделиться

subprocess.Popen делает это.

0
ответ дан 10 December 2019 в 00:34
поделиться

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

2
ответ дан 10 December 2019 в 00:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: