池的介绍:
提前创建进程池,防止创建的进程数量过多导致系统性能受到影响,在系统执行任务时,系统会使用池中已经创建进程/线程,从而防止资源的浪费,创建的进程/线程可以让多个进程使用,从而降低了操作系统的负担,加快了系统执行的效率;
若果不创建进程池,可能会导致任务建立的进程数量过多,影响系统,并且在执行不同任务时,还会重新进行进程的创建,导致资源的浪费
池的使用:
进程池:
ProcessPoolExecutor
进程池的使用:
from threading import current_thread from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def func(i): print("进程号:{}\n".format(current_thread().ident)) print("进程{}\n".format(i)) tp = ThreadPoolExecutor(4) ts = ProcessPoolExecutor(10) if __name__ == '__main__': for i in range(100): tp.submit(func,i)
运行结果:
由于此时池中创建了四个进程,因此函数func()在执行多次的过程中会循环的使用四个已经创建的进程(如上图)
不使用进程池:
from threading import current_thread from multiprocessing import Process def func(i): print("进程号:{}".format(current_thread().ident)) print("进程{}".format(i)) if __name__ == '__main__': for i in range(10): t = Process(target=func,args=(i,)).start()
运行结果:
两者对比可以看到,由于后者未使用进程池,因此,在func()函数执行了10次时,系统创建了十个进程,而前者使用了建立了四个进程的进程池,因此,即使func()函数执行了100次,系统也只创建了4个进程
线程池:
不使用线程池:
from threading import current_thread from threading import Thread def func(i): print("线程号:{}".format(current_thread().ident)) if __name__ == '__main__': for i in range(10): t = Thread(target=func,args=(i,)).start()
运行结果:
有结果可以看到:使用线程运行了十次func()函数,系统创建了十个进程用来执行此任务
使用线程池:
from threading import current_thread from concurrent.futures import ThreadPoolExecutor def func(i): print("线程号:{}".format(current_thread().ident)) if __name__ == '__main__': tp = ThreadPoolExecutor(20) for i in range(100): tp.submit(func,i)
运行结果:
执行100次,但是被使用的线程仅有创建的20个,节省了系统的资源
使用map()方法进行函数的传递
from threading import current_thread from concurrent.futures import ThreadPoolExecutor def func(i): print("线程号:{}".format(current_thread().ident)) print(i) if __name__ == '__main__': tp = ThreadPoolExecutor(4) ret = tp.map(func,(i for i in range(10))) print(ret)
回调函数:
from threading import current_thread from concurrent.futures import ThreadPoolExecutor def func(i): print("线程号:{}".format(current_thread().ident)) print(i) return i**2 def print_func(ret,i): print("我是print_func()函数") print(ret.result()) if __name__ == '__main__': tp = ThreadPoolExecutor(4) for i in range(20): ret = tp.submit(func,i) ret.add_done_callback(print_func)
运行结果:
使用回调函数可以保证ret对象在执行完毕之后立即执行回调函数的参数对象
进程创建数量的建议:
进程数量:建议进程数量为cpu数量的一倍 到cpu数量的二倍之间
线程数量:建议线程数量为cpu数量的五倍
猜你喜欢
- 16天前(鄂尔多斯航空公司客服电话)架起“北方之路” ,中国联合航空带您飞向鄂尔多斯重回1倍速
- 16天前(大理悦云雅阁酒店电话)雅阁酒店集团|端午佳节礼遇,大理悦云雅阁度假酒店
- 16天前(四川率先建立“双定向”基层文化人才职称评审通道机制)四川率先建立“双定向”基层文化人才职称评审通道机制
- 16天前(2020海丝之路文化博览会)2023海丝之路文化和旅游博览会开幕
- 16天前(上海文旅产业发展高峰论坛)《上海打造文旅元宇宙新赛道行动方案》发布
- 16天前(花王伴你乐享五一好“趣”处)花王伴你乐享五一好“趣”处
- 16天前(当科学邂逅喜剧:科技馆喜剧嘉年华背后的"文旅破壁者")当科学邂逅喜剧:科技馆喜剧嘉年华背后的"文旅破壁者"
- 16天前(岭南东方大酒店)粤西成势 | 阳江阳春长兴岭南东方酒店正式签约,粤西文旅再添明珠
- 16天前(新西兰登陆《我的世界》!全球首个目的地游戏模组震撼上线)新西兰登陆《我的世界》!全球首个目的地游戏模组震撼上线
- 16天前(阿斯塔纳航空属于哪个联盟)阿斯塔纳航空荣获Skytrax世界航空公司大奖,将继续助力中哈交流往来
网友评论
- 搜索
- 最新文章
- (2020广州车展哈弗)你的猛龙 独一无二 哈弗猛龙广州车展闪耀登场
- (哈弗新能源suv2019款)智能科技颠覆出行体验 哈弗重塑新能源越野SUV价值认知
- (2021款全新哈弗h5自动四驱报价)新哈弗H5再赴保障之旅,无惧冰雪护航哈弗全民电四驱挑战赛
- (海南航空现况怎样)用一场直播找到市场扩张新渠道,海南航空做对了什么?
- (visa jcb 日本)优惠面面俱到 JCB信用卡邀您畅玩日本冰雪季
- (第三届“堡里有年味·回村过大年”民俗花灯会活动)第三届“堡里有年味·回村过大年”民俗花灯会活动
- (展示非遗魅力 长安启源助力铜梁龙舞出征)展示非遗魅力 长安启源助力铜梁龙舞出征
- (阿斯塔纳航空公司)阿斯塔纳航空机队飞机数量增至50架
- (北京香港航班动态查询)香港快运航空北京大兴新航线今日首航
- (我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉)我在港航“呵护”飞机 每一次安全着陆就是最好的荣誉
- 热门文章