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

标签 python windows python-2.7 multiprocessing

我正在为我的初学者使用一个库,并且我正在使用 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 - 为什么在 Windows 上启动新进程时 Python 的多处理模块会导入 __main__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171820/

相关文章:

python - 使用 Beautifulsoup 4 和 Python 2.7 解析 Web 表单

python - 在 Python 中将非常大的文件拆分成较小的文件 - 打开的文件太多

python - TypeError:实例 Python 之间不支持 '<'

python - glDrawArrays 的问题

C++ 在使用 VS2005 的 Windows XP 中使用 new 运算符可以动态分配的最大字节数是多少?

python - 将 .ui 文件转换为 .py 文件时出错

python - Django 加载 MySQLdb 模块时出错 undefined symbol :_ZTVN10__cxxabiv117__class_type_infoE

python - 矩阵在 Python Numpy 中变为 (3,) 而不是 (6,3)

android - Windows 64 位操作系统上的 32 位或 64 位 Android SDK?

c++ - 我的 C++ 程序中出现非常奇怪的错误