进程池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