초급 학생을위한 라이브러리를 가지고 놀고 있습니다. 파이썬에서 멀티 프로세싱 모듈을 사용하고 있습니다. , 예를 들어 importing and using a module that uses multiprocessing without causing infinite loop on Windows왜 Windows에서 새 프로세스를 시작할 때 Python의 다중 처리 모듈에서 __main__을 가져 오나요?
내가 모듈 mylibrary.py
있다고 가정합니다 :이 문제에 달렸다 나는에 main.py
를 실행하면
# main.py
import mylibrary
mylibrary.foo()
:
# mylibrary.py
from multiprocessing import Process
class MyProcess(Process):
def run(self):
print "Hello from the new process"
def foo():
p = MyProcess()
p.start()
그리고이 라이브러리를 호출하는 메인 프로그램을 Windows에서는 main.py를 새 프로세스로 가져 오려고합니다. 즉, 코드가 다시 실행되어 프로세스 생성의 무한 루프가 발생합니다. 나는 그것을 이렇게 고칠 수있다 :
import mylibrary
if __name__ == "__main__":
mylibrary.foo()
그러나 이것은 초보자에게는 꽤 혼란스럽고, 더 이상 필요하지 않은 것처럼 보인다. 새 프로세스가 mylibrary
에 생성되므로 새 프로세스가 mylibrary
을 가져 오지 않는 이유는 무엇입니까? main.py
을 변경하지 않고이 문제를 해결할 수있는 방법이 있습니까?
나는 파이썬 2.7을 사용하고 있습니다.
이 답변을 받아 들여야합니다. – Marcin
나는 뭔가를 놓치고있다.하지만 내 질문은 왜 자식 프로세스가 모든 코드를 다시 실행해야하는지이다. 왜 새로운 프로세스를 시작한 모듈이 아닌가? – Laura
@Laura : 코드를 다시 실행해야합니다. 그렇지 않으면 코드가 생기지 않기 때문입니다. 하위 프로세스는 완전히 새로운 것으로 시작하고 함수가 필요하면 코드가 필요합니다. –