장기 실행 프로세스를 시작해야하는 Python 웹 응용 프로그램이 있습니다. 캐치는 프로세스가 끝나기를 기다리는 것을 원하지 않습니다. 그냥 시작하고 끝내십시오.Python - 웹 응용 프로그램에서 장기 실행 프로세스 시작
Windows XP에서 실행 중이며 웹 응용 프로그램이 IIS에서 실행 중입니다 (문제가있는 경우).
지금까지 나는 popen을 시도했지만 작동하지 않았습니다. 자식 프로세스가 끝날 때까지 기다렸습니다.
장기 실행 프로세스를 시작해야하는 Python 웹 응용 프로그램이 있습니다. 캐치는 프로세스가 끝나기를 기다리는 것을 원하지 않습니다. 그냥 시작하고 끝내십시오.Python - 웹 응용 프로그램에서 장기 실행 프로세스 시작
Windows XP에서 실행 중이며 웹 응용 프로그램이 IIS에서 실행 중입니다 (문제가있는 경우).
지금까지 나는 popen을 시도했지만 작동하지 않았습니다. 자식 프로세스가 끝날 때까지 기다렸습니다.
좋아, 나는 이것을 결국 알아 냈다! 이것은 작동하는 것 같습니다 :
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를 추가했습니다. 그렇지 않으면 자식 프로세스에서 인쇄를 호출하면 나에게 오류를했다 "IO 오류 : [errno를 9] 잘못된 파일 기술자"
DETACHED_PROCESS
가 기본 WINAPI CreateProcess 함수에 전달되는 Process Creation Flag이다.
Unix에서이 작업을 수행하는 방법에 대한 아이디어가 있습니까? – nbarraille
이 플래그는 Unix에서는 필요하지 않습니다. – MarcH
이 기능을 사용하려면 shell = True가 필요 없습니다. 잘못된 파일 설명자 오류는 관련이 없습니다. – MarcH
subprocess.Popen입니다.
webapp에서 직접 프로세스를 시작하는 대신 작업을 메시지 대기열에 쓸 수 있습니다. 별도의 서비스가 메시지 대기열에서 읽고 작업을 실행합니다. Python으로 작성된 Distributed Task Queue 인 Celery을 살펴보십시오.
이 거의 (from here)를 작동합니다
from subprocess import Popen
pid = Popen(["C:\python24\python.exe", "long_run.py"]).pid
print pid
print 'done'
가 '완료'바로 인쇄 얻을 것이다. 문제는 long_run.py가 돌아올 때까지 위 프로세스가 계속 실행되고 프로세스를 닫으면 long_run.py의 프로세스가 종료된다는 것입니다.
물론 프로세스를 부모 프로세스와 완전히 독립적으로 만드는 몇 가지 방법이 있습니다.
Windows 특정 방식 : http://docs.python.org/library/os.html#os.startfile –
대신 "작동하지 않는 것"이라고 쓰고 정확히 무슨 일이 일어 났는지 기록해보십시오. 예외가 발생 했습니까? 기대했던 것과 다른 일을 했습니까? (그렇다면, 그것은 무엇을 했습니까?). 이것은 보통 다른 사람들이 당신을 도울 수있게 해줍니다. –
다음은 유망한 몇 가지 Windows API 명령입니다. 다른 것을 생각해 내지 않으면 사용해 보겠습니다. http://timgolden.me.uk/pywin32-docs/win32api__ShellExecute_meth.html http : // /timgolden.me.uk/pywin32-docs/win32console__FreeConsole_meth.html http://timgolden.me.uk/pywin32-docs/win32process__CreateProcess_meth.html – Greg