我正在为初学者学习图书馆,我正在使用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.
我不明白为什么这个简单的代码
# 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位