python - ImportError:无法导入名称池

时间:2015-02-26 11:10:56

标签: python python-multiprocessing

代码在这里:

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

4 个答案:

答案 0 :(得分:2)

这是你的代码:

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.Process,您只从多处理导入了函数/类Pool,因此一个简单的修复将是:

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()

答案 1 :(得分:2)

您只从pool模块导入multiprocessing模块。 因此,您的口译员只知道pool而不是multiprocessing

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

multiprocessing
    |-- __init__.py
    |--Process
    |--Pool
    |--This_also

如上所示,您只导入pool并且python不知道这个多处理器和Process和This_also到底是谁。 通常我们在python包中有__ init __.py文件。此文件中的列表all = ['pool.py','Process.py',.......'This_also']包含程序包中包含的所有模块。因此import *将导入所有模块。请仔细阅读https://docs.python.org/2/tutorial/modules.html#

答案 2 :(得分:0)

如果您编写了一个名为multiprocessing.py的文件,它将首先尝试导入该文件,这意味着当您“从multiprocessing import Pool”执行操作时,它将在其中找不到Pool。

多重处理是Python中包含的模块,并且其中包含池,因此,如果没有冲突,则下面的方法应该起作用: “来自多处理导入池”

答案 3 :(得分:0)

您是否将脚本称为“ multiprocessing.py”?首先检查您的目录或文件...如果是-> Python会在您的脚本中查找Pool(可能不存在)。(如果存在,请重命名)听起来很有趣,但是会发生)