Python通過上下文管理器使用程序池multiprocessing.Pool
阿新 • • 發佈:2019-02-01
程序池工具multiprocessing.Pool返回的物件其實是個上下文管理器。那麼我們怎麼知道multiprocessing.Pool物件是上下文管理器呢?我們看檢視一下multiprocessing.Pool物件的屬性,可以看到__enter__和__exit__函式,因此multiprocessing.Pool物件無疑是上下文管理器。
我們看一下__enter__和__exit__函式,__exit__函式裡面是呼叫列terminate函式,所以如果通過上下文管理器方式使用就不用顯式呼叫terminate函數了。
def __enter__(self): returnself def __exit__(self, exc_type, exc_val, exc_tb): self.terminate()
通過上下文管理器使用Pool例項:
from multiprocessing import Pool def add(x): return x + x if __name__ == '__main__': args = [1, 4, 7, 11] with Pool(processes=4) as pool: result = pool.map(add, args, 4) print(result)
普通方法使用Pool例項:
from multiprocessing import Pool def add(x): return x + x if __name__ == '__main__': args = [1, 4, 7, 11] pool = Pool(processes=5) result = pool.map(add, args) pool.terminate() pool.join() # terminate之後呼叫,否則報錯 print(result)
PS: 執行緒池工具multiprocessing.dummy.Pool類似,也是可以用上下文管理器。
from multiprocessing.dummy import Pool def add(x): return x + x if __name__ == '__main__': args = [1, 4, 7, 11] with Pool(processes=4) as pool: result = pool.map(add, args) print(result)