1

파이썬 다중 프로세스의 docs에 따르면 무한한 프로세스가 생성되는 것을 막기 위해 프로세스 생성은 if __name__ == '__main__': 절 안에 있어야합니다.메인 스크립트 외부에서 파이썬 다중 프로세스 사용하기

제 질문은 가져 오기 내부에서 다중 프로세스를 사용할 수 있습니까? 의 내가 주 실행 파일이 평가 있다고 가정 해 봅시다 :

import foo 

def main(): 
    foo.run_multiprocess() 

if __name__ =='__main__': 
    main() 

수입 된 foo.py 파일 : Obviusly

def run_multiprocess(number_to_check): 
    if number_to_check == 5: 
     print(number_to_check) 

if __name__ == '__main__': 
    list_to_check = {1,2,3,4,5,6,7} 
    pool = Pool(processes=4)    
    pool.map(process_image, list_to_check) 

을이의 그 라인을 따라

뭔가 이것은 foo.py의 if 문 안의 코드가 실행되지 않기 때문에 작동하지 않습니다. 그래도 작동하도록 할 수있는 방법이 있습니까?

답변

1

__main__ 블록 내에서 다중 처리를 실행할 필요가 없으며 __main__ 블록은 python filename.py을 통해 실행되는 경우에만 사용됩니다. 당신이 한 그렇다면

:

m1.py :

from multiprocessing import Pool  
def f(x): 
    return x^2 

def f2(): 
    p = Pool(5) 
    p.map(f, [1,2,3,4,5]) 

m2.py : 다음

from m1 import f2 

def __main__(): # this is not required, but a good practice 
    f2() # this would run multiprocessing code 

python m2.py 전화, 당신의 코드는 MP로, 제대로 실행됩니다.

+0

내가 이해하는 한 'm1 import f2'에서 새로운 프로세스를 생성합니다. 창에서 원래 프로세스의 필드를 모두 새 프로세스로 복사합니다. 새로운 프로세스를 생성하는 동안 'm1 import f2'라인을 다시 실행하고 '__main__'절에 없기 때문에 새 프로세스를 * 다시 만들고 다시 작성합니다. – Curtwagner1984

관련 문제