Python多处理:在函数内调用pool.map

时间:2013-09-25 17:34:25

标签: python windows function python-3.x multiprocessing

我正在尝试使用mutltiprocessing包在函数中使用多个CPU。当我在一个函数之外运行一个玩具示例时,它会在四分之一秒内运行而没有任何问题(见下文)。

from multiprocessing import Pool
import time

start = time.clock()

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(processes=7) as pool:     
        result = pool.map(f, range(1000))



print(time.clock() - start)

但是,当我将相同的代码调整为函数(见下文)时,它会打印True以指示__name__ == '__main__',但它会永远运行并且永远不会返回结果。我在Windows 7上运行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)

1 个答案:

答案 0 :(得分:5)

您在错误的地方使用if __name__ == '__main__'

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)

根据multiprocessing - Programming guidelines

  

安全导入主模块

     

确保新模块可以安全地导入主模块   口译员没有引起意外的副作用(这样的开始a   新进程)。

     

......应该使用if来保护程序的“入口点”   __name__ =='__ main__':如下: