1. 程式人生 > >Python通過上下文管理器使用程序池multiprocessing.Pool

Python通過上下文管理器使用程序池multiprocessing.Pool

程序池工具multiprocessing.Pool返回的物件其實是個上下文管理器。那麼我們怎麼知道multiprocessing.Pool物件是上下文管理器呢?我們看檢視一下multiprocessing.Pool物件的屬性,可以看到__enter__和__exit__函式,因此multiprocessing.Pool物件無疑是上下文管理器


我們看一下__enter__和__exit__函式,__exit__函式裡面是呼叫列terminate函式,所以如果通過上下文管理器方式使用就不用顯式呼叫terminate函數了。

def __enter__(self):
    return 
self 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)