使用multiprocessing模块时报错:
from multiprocessing import Process
def hello():
print('hello')
p = Process(target=hello)
p.start()
将代码更改为:
from multiprocessing import Process, freeze_support, set_start_method
def hello():
print('hello')
if __name__ == '__main__':
p = Process(target=hello)
p.start()
其中if __name__ == '__main__':的作用是保护程序的入口点,当使用Process打开一个子进程时,python解释器会导入当前模块,并调用hello方法,用一个简单的测试更直观:
from multiprocessing import Process, freeze_support, set_start_method
def hello():
print('hello')
print("!!!")
if __name__ == '__main__':
p = Process(target=hello)
p.start()
在这段代码中,print("!!!")不属于hello方法,来看看运行结果:

print("!!!")被调用了两次!!!所以在生成新的进程之前,一定要加上if __name__ == '__main__':!
进一步的,如果把print("!!!")换成print(__name__),会得到以下结果:

在使用Python的multiprocessing模块时遇到RuntimeError。错误源于在子进程中多次导入并执行入口点。解决方案是在主程序入口点加上if __name__ == '__main__':保护,防止模块被重复导入。通过测试示例,展示了不加保护时导致的方法重复调用问题。正确添加保护后,可以避免此类异常。

3289

被折叠的 条评论
为什么被折叠?



