在实际使用中,除了少数简单场景外,都不会直接使用Process、Pipe、Queue来实现多进程。 这种低层级(low level,无贬义)的API,可读性差,容易出错。 常用的是高层级API——进程池。
Pool—进程池
由于Process创建、销毁有较大开销,并且并行数受机器CPU数量的限制,过多无益。 一个Pool(进程池)会统一创建并维持一定数量的Process,并行地执行Task。 在所有Task执行完毕后,再统一地关闭Process。
#!/usr/bin/env python3# -*- coding:utf-8 -*-from multiprocessing.pool import Pooldef f(x):return x * xdef g(x, y):return x**ydef main():with Pool(4) as pool:result = pool.map(f, [1, 2, 3, 4, 5])print(type(result))print(result)with Pool(4) as pool:result = pool.starmap(g, [(1, 3), (2, 4), (3, 5), (4, 6), (5, 7)])print(type(result))print(result)if __name__ == '__main__':main()
