我有这个文件(它没有做任何有用的工作,它只是为了学习):
import multiprocessing,sys
def parent(numproc=2):
print ('at start')
childs=[]
print ('bfore Pipe')
(parentEnd,childEnd)=multiprocessing.Pipe()
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()
在这种形式下,它运行得非常完美:
^{pr2}$但如果我把文件放在文件的末尾而不是
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):
为什么?!这个if子句有什么不同之处?在
这是MS Windows上的}子句保护的代码都会再次运行,从而导致无限循环。在
multiprocessing
的一个问题:主模块是由子任务导入的,因此任何不受{子流程具有以下}。这就是为什么在测试
__name__
:__parents_main__
而不再是{__name__
变量时,进程不会循环。在有关这方面的更多信息,请参阅Safe importing of main module
相关问题 更多 >
编程相关推荐