Windows에서 그렇습니다.파이썬 CGI 스크립트에서 백그라운드 작업을 끝내기 위해 기다리지 않고 간단히 시작할 수 있습니까?
이 질문에 대한 대답은 Windows 서비스를 만들어야한다는 것입니다. 이것은 내가하려고하는 것에 대해 우스꽝스럽게 헤비급 것처럼 보인다.
저는 관리자를 위해 약간의 프로토 타입을 함께 사용하려고합니다. 제품화에 대한 책임을지지 않을 것입니다. 사실, 제품화 될 수 없습니다. 그것은 단지 약간의 연구자들이 함께 놀 수있는 무언가 일 수 있습니다.
업로드 할 파일을 받고 임시 위치에 저장 한 다음 백그라운드 프로세스를 실행하여 파일에 심각한 문제를 발생시키는 CGI 스크립트가 있습니다. 그런 다음 Javascript 도구를 사용하여 다른 CGI 스크립트를 호출하여 상태를 확인하고 필요에 따라 페이지를 업데이트합니다.
이 모든 것은 작동하지만, 저주받은 웹 서버는 서브 프로세스가 실행되는 동안 연결을 닫지 않습니다. 몇 가지 조사를 해봤는데, 유닉스에 대한 답은 데몬이 될 것입니다.하지만 지금은 Windows에 붙어 있습니다. Windows 서비스로 만들려는 답변이 있습니까? 이것은 믿을 수 없을 정도로 무거워 보이며, 프로세스를 시작한 다음 서버 연결을 닫습니다.
정말 유일한 방법입니까?
편집 : 좋아, 이상 여기에 멋진 작은 해킹을 발견 (선택 (3) 사람은 준다) : How to completely background a process in Perl CGI under IIS
이것은을하지만 난 그게 더 간단하게이 문제를 수정할 수 있었고, klugey 솔루션을 사용하면 빠르고 간단한 프로토 타입을 만들 때 적합합니다.
subprocess.Popen("python.exe","myscript.py","arg1","arg2")
작동하지 않는, 내가 설명한대로 :
그래서 나는 처음에 내 주요 스크립트가이 일을했다.$("#somecrap").load("launchBackgroundProcess.py", {arg1:"foo",arg2:"bar"});
을 그리고 launchBackgroundProcess.py는 subprocess.Popen는 않는 대신, 나는 지금 내 주요 스크립트는 문서가 완전히로드 된 후 실행되는 자바 스크립트의 약간을 방출합니다.
이 솔루션은 백그라운드 작업이 실행되는 동안 브라우저 연결을 열어두기 때문에 절대로 확장되지 않습니다. 하지만이 작은 thinger 이후로 나는 일 수도 있고 언젠가는 (심지어는 의심 스럽지만) 언젠가는 2 명의 동시 사용자가 리소스를 걱정하지 않을 수도 있습니다. 이는 사용자가 정당한 이유없이 http 연결이 열려있는 경우에도 메인 페이지를보고 자바 스크립트 업데이트를 얻을 수있게합니다.
답변 해 주셔서 감사합니다. 이 제품을 생산하도록 요청하는 경우 Profane이 권장하는 자료를 참조하겠습니다.
작동하는지는 확실치 않지만 백그라운드 프로세스를 시작하기 위해 별도의 스레드를 생성하려고 했습니까? 주 기능은 다시 스레드에 다시 참여하기를 기다리지 않고 돌아올 수 있습니다 ... –
그건 같은 문제가 있습니다. 분명히하기 위해서 : 파이썬 스크립트 자체는 프로세스가 돌아 오기를 기다리지 않고 내 스크립트는 아무 문제없이 끝납니다. 그러나 Apache는 하위 프로세스가 종료 될 때까지 http 연결을 열어 둡니다. – user435779