1

Согласно docs многопроцесса python, нереста процесса должна находиться внутри предложения if __name__ == '__main__':, чтобы предотвратить нереста бесконечных процессов.Использование многопроцесса python за пределами основного сценария

Мой вопрос, можно ли использовать многопроцессор внутри импорта?

Что-то вдоль этих линий этого: скажем, у меня есть этот ру, которая является основной исполняемый файл:

import foo 

def main(): 
    foo.run_multiprocess() 

if __name__ =='__main__': 
    main() 

и файл foo.py который импортируется:

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) 

Obviusly это не сработает, потому что код внутри файла if в foo.py не будет запущен. Есть ли способ заставить его работать?

ответ

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, ваш код будет работать правильно, с ммк.

+0

Насколько я понимаю, когда вы будете «из m1 import f2», он создаст новый процесс. В окнах он * скопирует все * поля исходного процесса в новый процесс. При создании нового процесса он также снова выполнит строку «from m1 import f2» и потому, что она не находится в предложении «__main__», она будет создавать * новый процесс снова и снова и снова – Curtwagner1984

 Смежные вопросы

  • Нет связанных вопросов^_^