【问题标题】:importing target functions | multiprocessing导入目标函数 |多处理
【发布时间】:2012-02-20 15:50:06
【问题描述】:
【问题讨论】:
标签:
python
multiprocessing
main
【解决方案1】:
在 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()
【解决方案2】:
确保正在运行的脚本处于交互性的“顶级环境”中。
例如,如果您想与用户交互(启动过程),您需要确保它是 main。
if __name__ == '__main__':
do_something()
【解决方案3】:
"""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()