Python concurrent.future线程池和进程池

concurrent.futures是Python的一个高级并发库,提供线程池ThreadPoolExecutor和进程池ProcessPoolExecutor。该库简化了多线程/多进程编程,通过线程池和进程池管理任务,适用于IO密集型和计算密集型场景。本文介绍了这两个类的使用方法,如submit、done、cancel、result、wait、map、as_completed等方法,并对比了计算密集型场景下两者的效率,结果显示ProcessPoolExecutor更快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        concurrent.futrues是个高级的的库,它只在“任务”级别进行操作,意思是你不需要关注同步和线程、进程的管理了。Future 其实是生产-消费者模型的一种扩展,在生产-消费者模型中,生产者不关心消费者什么时候处理完数据,也不关心消费者处理的结果。你只需要指定一个“max_workers”数量的线程/进程池,然后提交任务和整理结果即可,另一个好处是相对于threading和multiprocessing模块应用于多线程/多进程场景,频繁创建/销毁进程或者线程是非常消耗资源的,而concurrent.futrues有自己的线程池/进程池,以空间换时间。

        concurrent.futrues有两个类:concurrent.futrues.ThreadPoolExecutor(线程池),通常用于IO密集型场景;concurrent.futrues.ProcessPoolExecutor(进程池),通常用于计算密集型场景,为什么这样分使用场景,那是python GIL锁的原因,多个线程只能用一个CPU,这里不再赘述了。两者的使用方法是一样。

        ThreadPoolExecutor/ProcessPoolExecutor常用的方法如下:

1、ThreadPoolExecutor/ProcessPoolExecutor构造实例的时候,传入max_workers参数来设置线程池中最多能同时运行的线程数目。

2、submit(self, fn, *args, **kwargs)函数来提交线程需要执行的任务(函数名和参数)到线程池中,并返回该任务的句柄(类似于文件、画图),注意submit()不是阻塞的,而是立即返回。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值