进程池Pool的简单使用,同步异步的区别

#进程池
"""
当需要创建子进程数量不多的时候,可以直接利用multiprocessing
中的Process动态生成多个进程,但是如果上百甚至上千个任务,
"""

from multiprocessing import Pool
import os,time,random

def download(i):
    print("(%s)ID号为:%d的进程开始执行"%(i,os.getpid()))
    t_start = time.time()

    time.sleep(random.random()*10)

    t_stop = time.time()
    print("(%s)ID:%d执行完毕,耗时%f秒!"%(i,os.getpid(),t_stop-t_start))


if __name__ == "__main__":
    po = Pool(3)#定义一个进程池,最大的进程数量
    for i in range(10):
        #阻塞式的请求 自加阻塞  顺序结构
        #必须要在进程池中没有进程的的时候 才会有新进程进入进程池
        # po.apply(func=download,args=(i,))

        #每次循环将会用空闲出来的子进程去调用目录--异步
        # 不等待只要进程池的位置空出来就立刻补上
        po.apply_async(func=download,args=(i,))
    print("-----start-----")
    po.close()#关闭进程池 不再接受您的请求
    po.join()#等待po中的所有的子进程执行完成,必须要放在close之后
    print("-----end------")
原文地址:https://www.cnblogs.com/zhangboblogs/p/8623612.html