저는 파이썬 (2.7)과 pymongo (3.3)로 작업하고 있으며 작업을 비동기 적으로 실행하려면 하위 프로세스를 생성해야합니다. 불행히도 pymongo는 here (그리고 자식 프로세스를 생성하기 전에 db와 상호 작용해야 함)에 설명 된 것처럼 fork-safe하지 않습니다. 포크없이 파이썬에서 프로세스 생성하기
나는subprocess.Popen
(
True
로 설정
shell
으로 다음
False
) 및
multiprocessing.Process
사용하여 실험을 달렸다. 내가 말할 수있는 한, 부모 프로세스가 자식 프로세스를 생성하도록 지시하지만,
multiprocessing.Process
만이 pymongo로 하여금 fork 된 프로세스를 탐지했다는 경고를 출력하게한다.
나는이 일을하는 비법을 궁금해합니다. 아마도 os.system
이 나를 대신 할 것 같지만 subprocess
은 os.system
의 의도 된 대체품으로 설명되어 있으므로 뭔가 빠져 있는지 궁금합니다.
Aha가 합리적입니다.) 또한 자식 프로세스에서 파일 설명자 (특히 소켓 핸들)를 상속하는 잠재적 인 부작용에 대해 궁금해했지만 Popen의 close_fds 인수 주소도 – nonagon
입니다. PyMongo는 FD_CLOEXEC로 소켓을 생성하므로 close_fds를 전달했는지 여부와 관계없이 해당 설명자가 닫힙니다. –