Разбирался я с запуском алгоритма в нескольких процессах. Для начала я понял, что через IDLE multiprocessing тестировать невозможно. Написал файл:
import multiprocessing,sys def parent(numproc=2): print ('at start') childs=[] print ('bfore Pipe') (parentEnd,childEnd)=multiprocessing.Pipe() # for i in range(numproc): i=0 print ('printing i:',i) child=multiprocessing.Process(target=child_proc, args=(childEnd,i)) print ('created child') child.start() print ('started child') print ('joining child') child.join() print ('joined child') print ('exeted from for i in childs') mins=[1,2] print ('task ended. result: ',min(mins)) def child_proc(pipe,name): pass if __name__ == '__main__': parent()
Всё работает:
at start bfore Pipe printing i: 0 created child started child joining child joined child exeted from for i in childs task ended. result: 1
Но если в конце файла поместить не
if __name__ == '__main__': parent()
а просто вызов функции
parent()
- процесс вываливается во внезапный цикл...at start bfore Pipe printing i: 0 created child started child joining child at start bfore Pipe printing i: 0 created child started child joining child at start bfore Pipe printing i: 0 created child started child joining child Traceback (most recent call last):
Есть у кого-нибудь соображения, с чем это связано?
Цикл там потому что multiprocessing начинает исполнять файл целиком то есть без "if __name__ == '__main__': parent()" parent будет вызывается в каждом процессе и собственно будем иметь то что имеем.
ОтветитьУдалитьа почему вдруг-то он будет исполнять файл целиком? я же в отдельный процесс передаю только одну функцию...
Удалить