我試圖使用mutltiprocessing
包來使用函數中的多個CPU。當我在一個函數之外運行一個玩具例子時,它會在四分之一秒內運行,沒有任何問題(見下文)。Python多處理:在函數中調用pool.map
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)
嘗試把'如果__name__ == '__main __''塊的功能外,在調用'testfunc'左右。 – BrenBarn
在所有提到的三個代碼片段(上面2個答案中的1個)中,「with」的用法給出了一個錯誤。它是''AttributeError:__exit__''。我什至不能得到第一個例子跑...我錯過了什麼? –