Python多处理:在函数内调用pool.map
我试图使用Python多处理:在函数内调用pool.map,python,windows,function,python-3.x,multiprocessing,Python,Windows,Function,Python 3.x,Multiprocessing,我试图使用multiprocessing包在一个函数中使用多个CPU。当我在函数外运行一个玩具示例时,它会在四分之一秒内运行,不会出现任何问题(见下文) 但是,当我将相同的代码适配到函数中时(请参见下文),它会打印True,以指示\uuuuuuu name\uuuuuu='\uuuuuu main\uuuuuu',但它将永远运行,并且永远不会返回结果。我正在Windows7上运行Python 3.3 from multiprocessing import Pool import time st
multiprocessing
包在一个函数中使用多个CPU。当我在函数外运行一个玩具示例时,它会在四分之一秒内运行,不会出现任何问题(见下文)
但是,当我将相同的代码适配到函数中时(请参见下文),它会打印True
,以指示\uuuuuuu name\uuuuuu='\uuuuuu main\uuuuuu'
,但它将永远运行,并且永远不会返回结果。我正在Windows7上运行Python 3.3
from multiprocessing import Pool
import time
start = time.clock()
def f(x):
return x*x
def testfunc(r):
if __name__ == '__main__':
print(True)
with Pool(processes=7) as pool:
result = pool.map(f, range(r))
return result
result = testfunc(1000)
print(time.clock() - start)
如果在错误的位置使用了
from multiprocessing import Pool
import time
start = time.clock()
def f(x):
return x*x
def testfunc(r):
print(True)
with Pool(processes=7) as pool:
result = pool.map(f, range(r))
return result
if __name__ == '__main__':
result = testfunc(1000)
print(time.clock() - start)
根据:
主模块的安全导入
确保新Python可以安全地导入主模块
在不引起意外副作用的情况下(如启动
新工艺)
。。。应使用if保护程序的“入口点”
__名称\uuuu=='\ uuuuuu main\uuuuuuuuuuu':如下所示:
在调用
testfunc
的周围,尝试将if uuuuuu name_uuuuuu=='\uuuuuuu main_uuu'
块放在函数外部。在上面提到的所有三个代码段中(上面2个,答案中1个),使用“with”会出现错误。这是属性错误:\uuu退出\uu
。我甚至无法运行第一个示例。。。我遗漏了什么吗?你测试过这个代码吗?它给出了一个错误,说AttributeError:\uuuu exit\uuuu
@PavithranIyer,您使用的是哪个版本的python?在发布时,我用Python3.3对其进行了测试。我认为您使用的是Python2.x。其中,多处理.Pool
不是上下文管理器@PavithranIyer,如果您使用的是Python2.x,请尝试以下内容:(不使用上下文管理器)
from multiprocessing import Pool
import time
start = time.clock()
def f(x):
return x*x
def testfunc(r):
print(True)
with Pool(processes=7) as pool:
result = pool.map(f, range(r))
return result
if __name__ == '__main__':
result = testfunc(1000)
print(time.clock() - start)