我想在python中学习多处理。我开始阅读http://www.doughellmann.com/PyMOTW/multiprocessing/basics.html,我无法理解导入目标函数的部分。
特别是下面的句子是什么意思..
“在检查__main__时包装应用程序的主要部分可确保在导入模块时不会在每个子节点中递归运行它。”
有人可以通过一个例子更详细地解释这个吗?
答案 0 :(得分:2)
http://effbot.org/pyfaq/tutor-what-is-if-name-main-for.htm
http://docs.python.org/tutorial/modules.html#executing-modules-as-scripts
答案 1 :(得分:0)
"""This is my module (mymodule.py)"""
def sum(a,b):
""">>> sum(1,1)
2
>>> sum(1,-1)
0
"""
return a+b
# if you run this module using 'python mymodule.py', run a self test
# if you just import this module, you get foo() and other definitions,
# but the self-test isn't run
if __name__=='__main__':
import doctest
doctest.testmod()
答案 2 :(得分:0)
确保正在运行的脚本位于交互性的“顶级环境”中。
例如,如果您想与用户进行互动(启动过程),您需要确保它是主要。
if __name__ == '__main__':
do_something()
答案 3 :(得分:0)
在Windows上,multiprocessing
模块在生成新进程时导入__main__
模块。如果生成新进程的代码未包含在if __name__ == '__main__'
块中,则导入主模块将再次生成新进程。等等,无限的。
在题为"Safe importing of main module".的部分的多处理文档中也提到了这个问题。在那里,您将找到以下简单示例:
在Windows上运行:
from multiprocessing import Process
def foo():
print 'hello'
p = Process(target=foo)
p.start()
会产生RuntimeError
。
修复就是使用:
if __name__ == '__main__':
p = Process(target=foo)
p.start()