python_way day11 自定义线程池
python_way day11
线程池
为什么需要线程池
线程多一些固然好,但是过多的线程反倒影响系统的负荷,所以我们就需要创建合适多的线程,哪我们把线程放到哪里?这时就放到线程池中。
线程池中存放着固定数量的线程池,谁需要使用线程,就从这个容器中取。取空了就要等待,什么时候有什么时候拿去用
但是python中没有给线程池提供比较好的方法,所以我们要自己写,或者使用第三方模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import threading import queue import time class Mythreadpoll: #自定义一个线程池类 def __init__( self ,maxsize = 5 ): """ 初始化类,并生成队列,将线程放到队列中,这个队列就可以作为线程池 :param maxsize: 传入一个数值,这个数作为线程池最大线程数 """ self .maxsize = maxsize self ._q = queue.Queue(maxsize) for i in range (maxsize): self ._q.put(threading.Thread) #把线程类存入到这个队列中 def get_thread( self ): """ 获取线程池中的线程 :return: """ return self ._q.get(timeout = 1 ) def add_thread( self ): """ 因为取走一个线程就少一个线程,所以需要向线程池中添加线程 :return: """ self ._q.put(threading.Thread) def f1(arg,p): #接受poll 然后执行添加add_thread方法 time.sleep( 1 ) p.add_thread() #线程就是执行这个任务,每一个任务执行完就往线程池中添加一个 print (arg) poll = Mythreadpoll() for i in range ( 30 ): t = poll.get_thread() #获取的线程的类,每从队列中获取一个线程类队列中就少一个线程类,这样执行5次后队列中就空了,到这里就会阻塞住 obj = t(target = f1,args = (i,poll)) #传入参数实例化这个线程类,将poll传进去 obj.start() #实行线程类的start方法 |
上面的线程有一些问题
1.原线程没有被重用,需要反复的创建线程
2.如果任务小于线程数量,就会有浪费,如果可以实现需要使用一个就创建一个,如果不用了就减少线程池
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· dotnet 源代码生成器分析器入门
· 官方的 MCP C# SDK:csharp-sdk
· 一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
· 一步一步教你部署ktransformers,大内存单显卡用上Deepseek-R1
· 一文搞懂MCP协议与Function Call的区别