我使用的是Linux,并安装了Python 3.9.1和3.8.5(在不同的环境中(。我正在努力遵循multiprocessing
模块的文档。然而,这些例子都不起作用。
第一个例子是:
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]))
我创建了一个只包含该代码的文件并运行了它。结果是:
Traceback (most recent call last):
File "multiprocessing.py", line 1, in <module>
from multiprocessing import Pool
File "/home/helitonmrf/Documents/TEMP/multiprocessing.py", line 1, in <module>
from multiprocessing import Pool
ImportError: cannot import name 'Pool' from partially initialized module 'multiprocessing' (most likely due to a circular import) (/home/helitonmrf/Documents/TEMP/multiprocessing.py)
尝试上下文部分,使用以下代码:
import multiprocessing as mp
def foo(q):
q.put('hello')
if __name__ == '__main__':
mp.set_start_method('spawn')
q = mp.Queue()
p = mp.Process(target=foo, args=(q,))
p.start()
print(q.get())
p.join()
也不起作用,我得到:
Traceback (most recent call last):
File "multiprocessing.py", line 9, in <module>
mp.set_start_method('spawn')
AttributeError: module 'multiprocessing' has no attribute 'set_start_method'
怎么回事?
您遇到的问题是因为您将文件命名为multiprocessing.py
,这也是您尝试使用的库的名称。
Python在导入库时首先在当前目录中查找。重命名文件(如果存在multiprocessing.pyc
,请确保将其删除(。