Python - ImportError:无法导入名称' Pool'

时间:2017-10-23 09:41:08

标签: python multiprocessing

运行multiprocessing.py(下面文件的内容)时

from multiprocessing import Pool

def f(x):
    return(x*x)

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

我得到 ImportError:无法导入名称' Pool'

我也试过了这个问题中给出的2个解决方案 - python - ImportError: cannot import name Pool但不幸的是存在问题。

4 个答案:

答案 0 :(得分:4)

重命名文件名。避免在与系统模块冲突的情况下使用“ multiprocessing.py”。

答案 1 :(得分:1)

要摆脱导入错误,请将文件命名为elseprocessing.py,而不是multiprocessing.py,因为文件名不应与模块名称相同。

您可以在更改文件名后导入Pool功能,并且您的代码可以在python3上运行。但是如果你使用的是python2,那么代码将不起作用。

在Python 2.x和3.0,3.1和3.2中, multiprocessing.Pool()对象不是上下文管理器。您不能在声明中使用它们。只有在Python 3.3及更高版本中才能使用它们。

来自Python 3 multiprocessing.Pool()文档:

  

3.3版中的新功能:池对象现在支持上下文管理   protocol - 请参阅上下文管理器类型。 输入()返回池   对象,退出()调用terminate()。

下面的代码适用于python2

from multiprocessing import Pool

def f(x):
    return x*x

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

输出

[1, 4, 9]

答案 2 :(得分:1)

避免将文件名用作“ multiprocessing.py”,因为它与所使用的软件包的文件名冲突。

安装:pip安装多处理

导入:从多处理导入池

示例代码:

from multiprocessing import Pool

def  f(x):
    return x**3

if __name__ == '__main__':
    pool = Pool(processes=4)              
    result = pool.apply_async(f, [10])    
    print(result.get(timeout=1))           
    print(pool.map(f, range(10)))  

答案 3 :(得分:0)

当您尝试导入库时,python会在特定的一系列步骤中搜索模块名称。因此,当您将文件命名为与模块名称相同时,它会加载您的文件,而不是库。由于您的文件没有Pool功能,因此无法导入它。如果多处理是内置模块,则不会出现此错误,但不建议将文件命名为与python库或模块相同的文件。

请在此处查看已接受的答案,以便更好地了解此过程。 How does python find a module file if the import statement only contains the filename?