python3.x多处理循环,不带“if uu name_u=='\\'u main\':”

2024-05-18 10:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个文件(它没有做任何有用的工作,它只是为了学习):

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子句有什么不同之处?在


Tags: 文件namechildifmultiprocessingstartatparent
2条回答

这是MS Windows上的multiprocessing的一个问题:主模块是由子任务导入的,因此任何不受{}子句保护的代码都会再次运行,从而导致无限循环。在

子流程具有以下__name____parents_main__而不再是{}。这就是为什么在测试__name__变量时,进程不会循环。在

有关这方面的更多信息,请参阅Safe importing of main module

相关问题 更多 >