python3.x多处理循环没有“如果__name__ ==‘__main__’:”
问题描述:
我有这个文件(它没有任何有用的工作,这只是学习):python3.x多处理循环没有“如果__name__ ==‘__main__’:”
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()
在这种形式完美运行:
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):
为什么?这个if子句有什么不同?
答
这是multiprocessing
在MS Windows的一个问题:主模块由子任务进口的,所以没有被if __name__ . . .
条款保护的任何代码获取再次运行,导致无限循环。
答
该子流程具有以下__name__
:__parents_main__
而不是__main__
。这就是为什么当您测试变量__name__
时,您的过程不会循环。
有关这方面的详细信息,看看章节Safe importing of main module
检查'if __name__'条件是什么意思... http://*.com/questions/419163/what-does-if-name-main-do – avasal 2012-07-16 09:07:39