标签:imp roc open 效率 分享图片 src return 地址 close
#多进程执行效率 from multiprocessing import Process import time def func(i): sum = 0 time.sleep(1) sum += i print(sum) if __name__ == ‘__main__‘: ls = [] statt = time.time() for i in range(10): p = Process(target=func,args=((i,))) p.start() ls.append(p) [p.join() for p in ls] print(time.time() - statt) #执行时间 1.3582112789154053
一个池子,里边有固定数量的进程。这些进程一直处于待命状态,一旦有任务来,马上就有进程去处理。
因为在实际业务中,任务量是有多有少的,如果任务量特别的多,不可能要开对应那么多的进程数
开启那么多进程首先就需要消耗大量的时间让操作系统来为你管理它。其次还需要消耗大量时间让
cpu帮你调度它。
进程池还会帮程序员去管理池中的进程。
#进程池的效率 from concurrent.futures import ProcessPoolExecutor from multiprocessing import Process import time def func(i): sum = 0 time.sleep(1) sum += i return sum ls = [] if __name__ == ‘__main__‘: p = ProcessPoolExecutor(4) start = time.time() for i in range(10): #向进程池中丢任务,这十个发送的信号会被直接添加到列表中 #至于你执行不执行,那是操作系统的事,这时列表中就有了十个返回值对象 obj = p.submit(func,i) ls.append(obj) #任务对象会在ls列表中依次排好顺序,然后p.result()会依次等待结果! [print(p.result()) for p in ls] print(time.time() - start) #上面列表等待的话,这里会一瞬间完成,因为上面代码中每个任务都已经执行结束 p.shutdown(wait=True) #时间效率 3.124636650085449
如果在机器可承受范围内,进程数开的越多,执行效率越快!
1.轻量级的任务多进程和进程池的执行效率相差不大;因为在开多进程时,开启进程的时间
和cpu切换的时间可以忽略不计!
2.任务量较大时,因为进程池里已经有开启好的进程,随时可以调度,节省了多进程开启进程的时间
和资源利用率!
标签:imp roc open 效率 分享图片 src return 地址 close
原文地址:https://www.cnblogs.com/0627zhou/p/9550076.html