Python 多个包共同使用
multiprocessing
模块时可能报错context has already been set
, 本文记录原因和解决方案。
问题复现
- 当
multiprocessing
模块被第二次配置 start_method 时会报错
import multiprocessing
if __name__ == '__main__':
multiprocessing.set_start_method('spawn')
multiprocessing.set_start_method('spawn')
- 或者在 get_start_method 后配置 start_method 也会报错:
import multiprocessing
if __name__ == '__main__':
print(multiprocessing.get_start_method())
multiprocessing.set_start_method('spawn')
错误信息:
代码语言:javascript复制RuntimeError: context has already been set
问题原因
multiprocessing
模块的 start_method 被锁定后再次配置则会报错- 锁定条件包括
- 配置 start_method: 调用
set_start_method
方法 - 查看 start_method: 调用
get_start_method
方法
- 配置 start_method: 调用
解决方案
- 在配置 start_method 时配置参数
force=True
import multiprocessing
if __name__ == '__main__':
print(multiprocessing.get_start_method())
multiprocessing.set_start_method('spawn', force=True)
参考资料
- https://github.com/pytorch/pytorch/issues/3492
- https://www.icode9.com/content-4-859817.html
- https://www.jianshu.com/p/2a56598e73b9