进程池Pool


当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程, 但如果是上百甚至上千个目标,手动的去创建进程的工作量巨大,此时就可以用到multiprocessing模块提供的Pool方法。

 1 from multiprocessing import Pool
 2 import os
 3 import random
 4 import time
 5 
 6 def worker(num):
 7     print("=====pid = %d===这是第 %d 个任务===="%(os.getpid(),num))
 8     time.sleep(2)
 9 
10 # 进程池的中最多有3个进程一起执行
11 pool = Pool(3)
12 
13 for i in range(10):
14     print("----%d----"%i)
15     # apply_async()向进程池中添加任务,并传递一个参数 
16     pool.apply_async(worker,(i,))
17 
18 pool.close() # 关闭进程池,不能再添加任务了
19 
20 pool.join()    # 主进程默认不等待子进程执行,所以要join
  • apply_async(func[, args[, kwds]]) :使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表;

  • apply(func[, args[, kwds]]):使用阻塞方式调用func