python3多线程-线程池和优先队列
1、介绍
有两种线程池方案。
各线程持续存在,从任务池获取任务进行执行
按照需求创建线程,每个线程只执行一个任务,结束完毕则该线程结束
2、准备
(1)任务池task_list
任务池是用于准备各任务单元的环境,比如http爆破时的请求参数,读写文件时的路径。
任务池的准备可能会占用一定时间,边准备边使用为好
任务池可能会占用较大内存空间,因此最好的是边使用边销毁
(2)线程池thread_list
线程池是用于存放线程对象。但并不一定是list形式,在不涉及调用创建的线程时,也可以是一个变量记录当前的线程数的变量,比如thread_count
(3)最大线程数thread_max_count
表示在同时间,允许的最大线程数
3、线程多任务方案
(1)根据thread_max_count,创建多个线程。每个线程任务,会监控任务池task_list的情况,当存在需要处理的任务时,进行读取和处理
(2)如果任务池task_list占用内存太大,或者完全初始化任务池需要太长时间,或者由于需要关联背景无法直接初始化任务池。则需要一个task_thread线程来生成任务池需要的任务,同时线程池进行消耗处理任务池
4、线程单任务方案
(1)主线程创建任务,如果当前线程数thread_count小于最大线程数thread_max_count,则创建线程来处理该任务。否则,休眠等待已有的线程结束再创建
5、优先队列
Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战