多处理导致错误的无限循环

2024-06-02 23:09:58 发布

您现在位置:Python中文网/ 问答频道 /正文

在osx Big Sur上使用python 3.8

台词

import multiprocessing as mp
pool = mp.Pool(2)

导致错误的无限循环,但下面收集了其中的一个片段

此外,mp.freeze\u support()似乎也没有帮助

Traceback (most recent call last):
  File "<string>", line 1, in <module>
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 116, in spawn_main
    exitcode = _main(fd, parent_sentinel)
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 125, in _main
    exitcode = _main(fd, parent_sentinel)
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 125, in _main
    prepare(preparation_data)
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 236, in prepare
    prepare(preparation_data)
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 236, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 287, in _fixup_main_from_path
    _fixup_main_from_path(data['init_main_from_path'])
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/multiprocessing/spawn.py", line 287, in _fixup_main_from_path
    main_content = runpy.run_path(main_path,
  File "/Users/biscuit/.conda/envs/advanced-projects/lib/python3.8/runpy.py", line 264, in run_path
    main_content = runpy.run_path(main_path,
.
.
.

你知道为什么吗

编辑:

当时没有一个解决方案奏效,但今天似乎奏效了?我确实安装了一些其他软件包,这些软件包让我对依赖项进行更新,所以可能它更改了我的多处理版本,或者其他软件包版本修复了它

不管是哪种方式,现在都可以了,对不起,这对其他人没有多大帮助


Tags: pathinpymainliblinemultiprocessingconda
1条回答
网友
1楼 · 发布于 2024-06-02 23:09:58

特别是当启动方法为“spawn”(MacOS上的默认值)时:

只能在if __name__ == "__main__":块内创建子进程(创建池会创建子进程),因为子进程导入__main__文件。当该导入发生时,文件将被执行(就像任何导入一样),并且您将递归地继续创建越来越多的子进程,除非某种事情(如if __name__ ...块)将执行限制为仅父进程

相关问题 更多 >