我正在尝试使用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)

最佳答案

您在错误的地方使用了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 :

10-04 12:19
查看更多