相关疑难解决方法(0)

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

我正在为初学者学习图书馆,我正在使用Python中的多处理模块.我遇到了这个问题:导入和使用一个使用多处理的模块,而不会在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()
Run Code Online (Sandbox Code Playgroud)

以及调用此库的主程序:

# main.py

import mylibrary

mylibrary.foo()
Run Code Online (Sandbox Code Playgroud)

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

import mylibrary

if __name__ == "__main__":
    mylibrary.foo()
Run Code Online (Sandbox Code Playgroud)

但是,这对初学者来说非常困惑,而且似乎没有必要.正在创建新流程mylibrary,为什么新流程不会导入mylibrary?有没有办法解决这个问题而不必改变main.py

顺便说一句,我正在使用Python 2.7.

python windows multiprocessing python-2.7

22
推荐指数
1
解决办法
8650
查看次数

Python多处理不断地生成pythonw.exe进程,而不进行任何实际工作

我不明白为什么这个简单的代码

# file: mp.py
from multiprocessing import Process
import sys

def func(x):
    print 'works ', x + 2
    sys.stdout.flush()

p = Process(target= func, args= (2, ))
p.start()
p.join()
p.terminate()
print 'done'
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

连续创建"pythonw.exe"进程并且它不会打印任何内容,即使我从命令行运行它:

python mp.py
Run Code Online (Sandbox Code Playgroud)

我在Windows 7上运行最新的Python 2.6 32位和64位

python windows process multiprocessing

15
推荐指数
1
解决办法
5058
查看次数

标签 统计

multiprocessing ×2

python ×2

windows ×2

process ×1

python-2.7 ×1