1

pythonのマルチプロセスのdocsによれば、無限プロセスの生成を防ぐために、プロセスの生成はif __name__ == '__main__':節の内側にある必要があります。メインスクリプト以外でのPythonマルチプロセスの使用

私の質問では、インポート内でマルチプロセスを使用できますか?

本のこれらの線に沿って何か: のは、私がメインの実行ファイルで、このPYとしましょう:

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

関連する問題