python3.x多处理循环,不带"if __name__ =='__main__':" [英] python3.x multiprocessing cycling without "if __name__ == '__main__':"

查看:78
本文介绍了python3.x多处理循环,不带"if __name__ =='__main__':"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个文件(它没有做任何有用的工作,仅用于学习):

I have this file (it doesn't make any useful work, it's only for learning):

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()

以这种形式,它可以完美运行:

in this form it runs perfectly:

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

但是如果我将文件末尾而不是

but if I put in end of file instead of

if __name__ == '__main__':
    parent()

parent()

它处于循环状态...

it falls in cycle...

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

Why?! What different makes this if clause?

推荐答案

在MS Windows上,这是multiprocessing的问题:主模块由子任务导入,因此任何不受if __name__ . . .子句保护的代码重新运行,导致无限循环.

This is an issue with multiprocessing on MS Windows: the main module is imported by the child tasks, so any code not protected by the if __name__ . . . clause gets run again, resulting in an infinite loop.

这篇关于python3.x多处理循环,不带"if __name__ =='__main__':"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆