加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 10:34:37 所属栏目:Python 来源:网络整理
导读:我正在为初学者学习图书馆,我正在使用 Python中的多处理模块.我遇到了这个问题: importing and using a module that uses multiprocessing without causing infinite loop on Windows 举个例子,假设我有一个模块mylibrary.py: # mylibrary.pyfrom multipro
我正在为初学者学习图书馆,我正在使用 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炸弹效应.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读