在实际使用中,除了少数简单场景外,都不会直接使用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 Pool
def f(x):
return x * x
def g(x, y):
return x**y
def 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()