在实际使用中,除了少数简单场景外,都不会直接使用ProcessPipeQueue来实现多进程。 这种低层级(low level,无贬义)的API,可读性差,容易出错。 常用的是高层级API——进程池。

Pool—进程池

由于Process创建、销毁有较大开销,并且并行数受机器CPU数量的限制,过多无益。 一个Pool(进程池)会统一创建并维持一定数量的Process,并行地执行Task。 在所有Task执行完毕后,再统一地关闭Process

  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. from multiprocessing.pool import Pool
  4. def f(x):
  5. return x * x
  6. def g(x, y):
  7. return x**y
  8. def main():
  9. with Pool(4) as pool:
  10. result = pool.map(f, [1, 2, 3, 4, 5])
  11. print(type(result))
  12. print(result)
  13. with Pool(4) as pool:
  14. result = pool.starmap(g, [(1, 3), (2, 4), (3, 5), (4, 6), (5, 7)])
  15. print(type(result))
  16. print(result)
  17. if __name__ == '__main__':
  18. main()