gpt4 book ai didi

python - 为什么 Python 的多处理模块在 Windows 上启动新进程时会导入 __main__?

转载 作者:IT老高 更新时间:2023-10-28 20:39:54 24 4
gpt4 key购买 nike

我正在为我的初学者学生使用一个库,并且我正在使用 Python 中的多处理模块。我遇到了这个问题:importing and using a module that uses multiprocessing without causing infinite loop on Windows

例如,假设我有一个模块 mylibrary.py:

# mylibrary.py

from multiprocessing import Process

class MyProcess(Process):
def run(self):
print "Hello from the new process"

def foo():
p = MyProcess()
p.start()

还有一个调用这个库的主程序:

# main.py

import mylibrary

mylibrary.foo()

如果我在 Windows 上运行 main.py,它会尝试将 main.py 导入新进程,这意味着代码会再次执行,从而导致进程生成的无限循环。我可以这样修复它:

import mylibrary

if __name__ == "__main__":
mylibrary.foo()

但是,这对初学者来说相当困惑,而且似乎没有必要。 mylibrary 中正在创建新进程,那么为什么新进程不直接导入 mylibrary?有没有办法解决这个问题而无需更改 main.py

顺便说一下,我使用的是 Python 2.7。

最佳答案

Windows 没有 fork,因此无法像现有进程一样创建新进程。所以子进程要再次运行你的代码,但是现在你需要一种方法来区分父进程和子进程,而__main__就是它。

这在此处的文档中有介绍:http://docs.python.org/2/library/multiprocessing.html#windows

我不知道另一种构造代码以避免 fork 炸弹效应的方法。

关于python - 为什么 Python 的多处理模块在 Windows 上启动新进程时会导入 __main__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14175348/

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