运行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但不幸的是存在问题。
答案 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?