【问题标题】:Python multiprocessing isn't working any more, even the example codePython 多处理不再起作用,即使是示例代码
【发布时间】:2021-10-07 09:03:50
【问题描述】:

我得到了错误 AttributeError: 模块 'multiprocessing.util' 没有属性 '_args_from_interpreter_flags' 运行我的程序时,该程序在不久前就可以使用。即使是简单的示例代码,例如

import multiprocessing as mp
def f(x):
    return x * x
if __name__ == '__main__':
    with mp.Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

我收到此错误。有没有人也遇到过这种情况?

Traceback (most recent call last):\
 File "C:/Users/.../AppData/Roaming/JetBrains/PyCharmCE2020.3/scratches/scratch.py", line 18, in <module> with mp.Pool(5) as p:\
 File "C:\Users\...\venv\lib\multiprocessing\context.py", 
  line 119, in Pool context=self.get_context())\
 File "C:\Users\...\venv\lib\multiprocessing\pool.py", line 
  176, in __init__ self._repopulate_pool()\
 File "C:\Users\...\venv\lib\multiprocessing\pool.py", line 
  241, in _repopulate_pool w.start()\
 File "C:\Users\...\venv\lib\multiprocessing\process.py", 
  line 112, in start self._popen = self._Popen(self)\
 File "C:\Users\...\venv\lib\multiprocessing\context.py", 
  line 322, in _Popen return Popen(process_obj)\
 File "C:\Users\...\venv\lib\multiprocessing\popen_spawn_win32.py", line 53, in __init__ pipe_handle=rhandle)\
 File "C:\Users\...\venv\lib\multiprocessing\spawn.py", line 88, in get_command_line opts = util._args_from_interpreter_flags()\
AttributeError: module 'multiprocessing.util' has no attribute '_args_from_interpreter_flags'

我目前在 Windows 10 上的 Pycharm 中使用 Python 3.7.10

【问题讨论】:

  • 能否提供完整的堆栈跟踪信息?
  • 你用的是什么版本的python?您使用的是什么操作系统?
  • 您需要向我们提供更多详细信息才能继续。如果您使用的是 IPython,请参阅此答案:stackoverflow.com/a/65001152/1084416。此外,有些人似乎对 Spyder 和 pdb 有问题(我从未使用过)。
  • 您的代码,如您的问题中所述,在 Python 3.9.7 中可以正常工作。您是否有自己的名为 multiprocessing.py 的脚本?
  • 我在 spyder 中遇到了问题,如果我只是选择并运行这些行,就不会运行。必须单击“运行文件”按钮,当您试图弄清楚事情是如何工作时,这不是很好! stackoverflow.com/questions/69219881/multiprocessing-errors

标签: python python-multiprocessing attributeerror


【解决方案1】:

我在 IPython 中使用 Python 3.9 的 Mac 上遇到了同样的错误,因此我搜索了解决方案。

按照Multiprocessing example giving AttributeError 中的建议,使用multiprocess 代替multiprocessing 解决了这个问题。 这现在可以正常工作了:

import multiprocess as mp
def f(x):
    return x * x

if __name__ == '__main__':
    with mp.Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

另一方面,原始代码(使用 multiprocessing 库)在脚本中使用时有效,因此该问题似乎只与 IPython(和 Jupyter 笔记本,我假设)有关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多