Python 多处理文档示例不起作用
Python multiprocessing docs examples doesn't work
我正在使用 Linux 并安装了 Python 3.9.1 和 3.8.5(在不同的环境中)。我正在尝试关注 the documentation 以获得 multiprocessing
模块。但是,none 个示例有效。
第一个例子是:
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
)。
我正在使用 Linux 并安装了 Python 3.9.1 和 3.8.5(在不同的环境中)。我正在尝试关注 the documentation 以获得 multiprocessing
模块。但是,none 个示例有效。
第一个例子是:
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
)。