gpt4 book ai didi

没有 "if __name__ == ' __main_ _':"的 python3.x 多处理循环

转载 作者:太空宇宙 更新时间:2023-11-03 13:21:46 26 4
gpt4 key购买 nike

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

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

最佳答案

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

关于没有 "if __name__ == ' __main_ _':"的 python3.x 多处理循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11501048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com