代码在这里:
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
答案 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(可能不存在)。(如果存在,请重命名)听起来很有趣,但是会发生)