进程池Pool介绍

Pool类可以提供指定数量的进程供用户调用,当有新的请求提交到Pool中时,如果池还没有满,就会创建一个新的进程来执行请求。如果池满,请求就会告知先等待,直到池中有进程结束,才会创建新的进程来执行这些请求。

  1. # 导入进程模块
  2. import multiprocessing
  3. # 最多允许3个进程同时运行
  4. pool = multiprocessing.Pool(processes = 3)

1、apply()

— 该函数用于传递不定参数,主进程会被阻塞直到函数执行结束(不建议使用,并且3.x以后不在出现),函数原型如下:

  1. apply(func, args=(), kwds={})

2、apply_async

— 与apply用法一致,但它是非阻塞的且支持结果返回后进行回调,函数原型如下:

  1. apply_async(func[, args=()[, kwds={}[, callback=None]]])

3、map()

— Pool类中的map方法,与内置的map函数用法基本一致,它会使进程阻塞直到结果返回,函数原型如下:

  1. map(func, iterable, chunksize=None)

注意:虽然第二个参数是一个迭代器,但在实际使用中,必须在整个队列都就绪后,程序才会运行子进程。

4、map_async()

— 与map用法一致,但是它是非阻塞的。其有关事项见apply_async,函数原型如下:

  1. map_async(func, iterable, chunksize, callback)

5、close() — 关闭进程池(pool),使其不在接受新的任务。

6、terminal() — 结束工作进程,不在处理未处理的任务。

7、join() — 主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用