python3.x 多处理循环没有“if __name__ == '__main__':"
- 作者: 我是帝王么
- 来源: 51数据库
- 2022-12-16
问题描述
我有这个文件(它没有做任何有用的工作,它只是为了学习):
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()
以这种形式完美运行:
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()
它属于循环...
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.
推荐阅读
热点文章
Discord.py(重写)on_member_update 无法正常工作
0
Discord.py 在 vc 中获取用户分钟数
0
discord.py 重写 |为我的命令出错
0
Discord.py rewrite 如何 DM 命令?
0
播放音频时,最后一部分被切断.如何解决这个问题?(discord.py)
0
在消息删除消息 Discord.py
0
如何使 discord.py 机器人私人/直接消息不是作者的人?
0
(Discord.py) 如何获取整个嵌入内容?
0
Discord bot 尽管获得了许可,但不能提及所有人
0
Discord.py discord.NotFound 异常
0
