python - ImportError: cannot import name Pool

python - ImportError: cannot import name Pool

代码在这里:

from multiprocessing import pool
def worker(num):
    print 'Worker:', num
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

抱歉,我是 python 的新手。每当我尝试导入池时,我都会收到以下错误。它说 os.chdir(wdir) 有问题,但我不知道是什么。有帮助吗?

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\z080302\Desktop\WinPython-32bit-2.7.6.3\python-2.7.6\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 540, in runfile
execfile(filename, namespace)
File "C:/Users/z080302/Desktop/Python_Projects/mp_test.py", line 18, in <module>
p = multiprocessing.Process(target=worker, args=(i,))
NameError: name 'multiprocessing' is not defined

这是您的代码:

from multiprocessing import pool
def worker(num):
    print 'Worker:', num
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

您必须导入模块 multiprocessing 才能使用 multiprocessing.Process,您只从 multiprocessing 导入了 function/class 池,所以一个简单的修复是:

import multiprocessing
pool = multiprocessing.pool
def worker(num):
    print 'Worker:', num
    return

if __name__ == '__main__':
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i,))
        jobs.append(p)
        p.start()

您仅从 multiprocessing 模块导入 pool 模块。 所以你的口译员只知道 pool 而不知道 multiprocessing

要解决此问题,您必须导入 multiprocessing,当您在代码中需要 pool 时,您可以像 multiprocessing.pool

一样使用它
multiprocessing
    |-- __init__.py
    |--Process
    |--Pool
    |--This_also

如上所示,您只导入 pool 而 python 不知道这个 multiprocessing 和 Process 以及 This_also 到底是谁。 通常我们在 python 包中有 __init __.py 文件。此文件中的列表 all = ['pool.py','Process.py',.......'This_also'] 包含包中包含的所有模块。所以 import * 将导入所有模块。请通过 https://docs.python.org/2/tutorial/modules.html#

如果您编写了一个名为 multiprocessing.py 的文件,它将首先尝试导入该文件,这意味着当您执行 "from multiprocessing import Pool".

时它不会在其中找到池

multiprocessing 是包含在 Python 中的一个模块,里面有 Pool,所以如果没有冲突,下面的应该可以工作: "from multiprocessing import Pool"

你调用脚本了吗'multiprocessing.py'?首先检查您的目录或文件...如果是 -> Python 将在您的脚本中查找池,它可能不存在。(如果存在则重命名)听起来很有趣但确实发生了)