Python multiprocessing 错误 context has already been set 解决方案

2022-08-10 14:46:35 浏览数 (1)

Python 多个包共同使用 multiprocessing 模块时可能报错 context has already been set, 本文记录原因和解决方案。

问题复现

  • multiprocessing 模块被第二次配置 start_method 时会报错
代码语言:javascript复制
import multiprocessing

if __name__ == '__main__':
    multiprocessing.set_start_method('spawn')
    multiprocessing.set_start_method('spawn')

  • 或者在 get_start_method 后配置 start_method 也会报错:
代码语言:javascript复制
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 时配置参数 force=True
代码语言:javascript复制
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

0 人点赞