当前位置: 首页 > news >正文

多线程任务管理系统

# 核心目的是提供异步任务执行、回调处理和任务状态管理功能
from concurrent.futures import ThreadPoolExecutor,as_completed
import time
import threading
from types import MethodType
class ThreadTask:# 长期各类任务线程池def __init__(self):self.executor = ThreadPoolExecutor(max_workers=3)self.future = [] #活跃等待任务self.count = 0 #任务计数且充当iddef run_call_back(self,fn):# 检查 Future 是否被取消if not fn.cancelled():self.future_call_back(fn)else:print('任务已被取消')def future_call_back(self, fn):print(f"回调结果:{fn.result()}")def add_task(self,fun,*args,**kwargs):future = self.executor.submit(fun,*args,**kwargs)self.count += 1self.update_future()task_info = {'future': future,'name': fun.__name__,'args': args,'kwargs': kwargs,'task_id': self.count,'submit_time': time.ctime()}self.future.append(task_info)# 当任务结束时进行回调,相比于在外部获取result(),可以不阻塞且自动处理结果future.add_done_callback(self.run_call_back)return self.count# 等待所有任务完成def wait_all_result(self):for future in as_completed(self.future):future.result()# 取消某个任务def cancel_future(self, task_id = None):self.update_future()cancel_task = list(filter(lambda x:x['task_id'] == task_id,self.future))if cancel_task:if cancel_task[0]['future']._state == 'PENDING':cancel_task[0]['future'].cancel()print('取消任务')else:print('任务已启动,无法取消')else:print('任务为不活跃状态,无需取消')    # 获取当前任务信息@propertydef get_task_info(self):self.update_future()info = {'all_task_count': self.count,'now_active_task_info': self.future}return infodef update_future(self):self.future = list(filter(lambda x:x['future']._state in ['RUNNING', 'PENDING'], self.future))def shutdown(self):self.executor.shutdown()
def task(name, duration, par = 'test'):print(f"{time.ctime()}任务 {name} 开始执行",par)time.sleep(duration)print(f"任务 {name} 完成",par)return f"结果_{name}"
thread = ThreadTask()
def future_call_back(self, fn):print(f"特别回调结果:{fn.result()}")
# 如果某个实例需要额外的回调方法,修改回调方法
thread.future_call_back = MethodType(future_call_back,thread)
task_id = []
for i in range(6):submit_task_id = thread.add_task(task,'user'+str(i),i,par='test'+str(i))task_id.append(submit_task_id)
thread.cancel_future(task_id[-1])
print(thread.future)
time.sleep(1)
thread.cancel_future(task_id[0])
thread.cancel_future(task_id[-3])
print('当前任务',thread.get_task_info)
http://www.jsqmd.com/news/160950/

相关文章:

  • 如何定制自己的PyTorch-CUDA镜像?基于v2.7二次开发指南
  • 第六课Open3D点云数据处理:点云、mesh可视化(Visualizer类)
  • WSL2下运行PyTorch-CUDA-v2.7镜像的完整配置流程
  • Conda环境导出与导入:PyTorch-CUDA-v2.7跨机器迁移技巧
  • 软件工程 课程回顾 102301321 吴颖哲
  • Git克隆项目后如何快速运行?配合PyTorch镜像免依赖烦恼
  • 2025年12月淮北无人机表演、淮北CAAC无人机培训、淮北政企无人机培训、淮北退役军人无人机培训、淮北无人机培训机构哪家强 - 2025年品牌推荐榜
  • CNN图像分类项目快速上手:基于PyTorch-CUDA-v2.7镜像教程
  • 中性点直流偏磁在线监测推荐生产厂家 - 品牌推荐大师1
  • 无需手动编译:PyTorch-CUDA-v2.7镜像自动匹配驱动版本
  • Anaconda配置PyTorch环境太麻烦?试试PyTorch-CUDA-v2.7镜像
  • Linux软链接应用详解:从原理到实战案例
  • 傅里叶变换(四):直角坐标与极坐标
  • PyTorch官方安装步骤太复杂?这个镜像简化90%流程
  • 轻量级深度学习环境:PyTorch-CUDA-v2.7仅需2分钟启动
  • 手把手教学:在云平台拉取并运行PyTorch-CUDA-v2.7镜像
  • 2026年上半年徐州室内装修/室内设计/全屋定制/精装局改/软装搭配公司综合评估与选型指南 - 2025年品牌推荐榜
  • Markdown笔记记录实验过程:配合Jupyter和PyTorch镜像高效科研
  • PyTorch安装教程GPU版:基于CUDA-v2.7镜像的高效配置方案
  • PyTorch-CUDA-v2.7镜像是否支持A100?实测结果公布
  • Markdown语法高亮设置:正确显示PyTorch代码块
  • 旧版PyTorch升级指南:迁移到v2.7镜像的注意事项
  • 2025年高性价比的精密铝材加工工厂推荐,精密铝材加工供应商全解析 - 工业品牌热点
  • 2025年贵阳推荐西点培训学校排行榜,高性价比西点技能培训中心测评精选 - 工业推荐榜
  • 2025年终盘点:固体加料系统哪家好?固体加料系统/供应商/生产厂家推荐 - 品牌推荐大师1
  • SSH密钥登录PyTorch-CUDA-v2.7容器:安全高效的远程访问方式
  • DeepSeek:AI助手的高效使用指南
  • 市面上比较好的商标律所推荐,这些专业机构值得关注 - 品牌排行榜
  • 102301318 杨垚总结
  • NVIDIA显卡适配性测试报告:PyTorch-CUDA-v2.7全面兼容主流型号