为什么在unittest中调用代码时会出现多进程导入错误?(PyCharm Python 3)

-1 投票
1 回答
1337 浏览
提问于 2025-04-16 21:30

在我的一个模块中,我做了如下的导入:

from multiprocessing import Pool

这个模块在正常调用时运行得很好,但当我在单元测试(unittest)中使用它时,出现了以下错误:

Error
Traceback (most recent call last):
  File "/share/work/peter/software/lib/python3.2/unittest/case.py", line 387, in _executeTestPart
    function()
  File "/home/peter/current/parallelize/src/parallelize/backend/tests.py", line 52, in test_submit_ok_job
    backend = self._get_multi_processing_backend()
  File "/home/peter/current/parallelize/src/parallelize/backend/tests.py", line 46, in _get_multi_processing_backend
    from parallelize.backend.multiprocessing import MultiprocessingBackend
  File "/home/peter/current/parallelize/src/parallelize/backend/multiprocessing.py", line 2, in <module>
    from multiprocessing import Pool,cpu_count
  File "/home/peter/current/parallelize/src/parallelize/backend/multiprocessing.py", line 2, in <module>
    from multiprocessing import Pool,cpu_count
ImportError: cannot import name Pool

为什么会这样呢?我使用的是Python 3.2

补充说明 我注意到,这种情况只发生在从我的PyCharm开发环境启动单元测试时。当从命令行(python3 -m unittest ....)运行时,它是可以正常工作的。这是IDE中的一个bug吗?

1 个回答

2

这可能是因为你的Python路径中有一个叫做...src/parallelize/backend/的文件夹(可能就是你当前的工作目录),所以Python试图从你自己那里的multiprocessing.py文件中导入Pool,而不是从标准库中导入。我不太确定在PyCharm中是否可以这样做,但你可以试着把工作目录换成其他地方。

撰写回答