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

python中的线程和线程池

文章目录

        • 线程示例
        • 线程池示例(简单)
        • 线程池示例(需要响应的)
线程示例
importthreadingimporttimedefworker(msg):print(f"Working on{msg}")time.sleep(1)print(f"Finished{msg}")# 1. 创建线程对象t1=threading.Thread(target=worker,args=("Task-1",))t2=threading.Thread(target=worker,args=("Task-2",))# 2. 启动线程t1.start()t2.start()# 3. 【重要】等待线程执行完毕 (join)# 这样主程序会阻塞在这里,直到 t1 和 t2 跑完,避免主程序提前退出导致子线程被截断t1.join()t2.join()print("所有任务完成!")
线程池示例(简单)
fromconcurrent.futuresimportThreadPoolExecutorimporttimeimportrequestsdeffetch_data(url:str)->str:"""模拟IO密集型任务"""print(f"正在请求:{url}")time.sleep(1)# 模拟网络延迟returnf"来自{url}的数据"if__name__=="__main__":urls=[f"https://example.com/{i}"foriinrange(5)]# max_workers:# Python 3.13 默认值通常是 min(32, os.cpu_count() + 4)# 对于IO密集型,建议手动设置大一点,比如 20-50withThreadPoolExecutor(max_workers=10)asexecutor:# map 会按输入顺序返回结果results=executor.map(fetch_data,urls)forurl,resultinzip(urls,results):print(f"{url}:{result}")print("所有任务完成!")
线程池示例(需要响应的)
fromconcurrent.futuresimportThreadPoolExecutor,as_completedimporttimeimportrandomdefprocess_task(task_id:int)->str:duration=random.uniform(0.5,2.0)time.sleep(duration)iftask_id==3:raiseValueError(f"任务{task_id}故意失败")returnf"任务{task_id}完成 (耗时{duration:.2f}s)"if__name__=="__main__":withThreadPoolExecutor(max_workers=5)asexecutor:# 提交任务并记录 Future 对象future_to_id={executor.submit(process_task,i):iforiinrange(6)}# as_completed 会在任务完成时立即返回,不等待其他慢任务forfutureinas_completed(future_to_id):task_id=future_to_id[future]try:result=future.result()print(f"✅ 成功:{result}")exceptExceptionase:print(f"❌ 任务{task_id}失败:{e}")print("主程序结束")
http://www.jsqmd.com/news/490068/

相关文章:

  • SM2算法实战解析:从原理到国产密码标准的落地应用
  • Git-RSCLIP模型训练:基于VMware的分布式计算方案
  • 手把手教你用Speech Seaco Paraformer:会议录音转文字只需3步
  • 2026年设计行业AI搜索优化公司深度测评:从技术壁垒到效果落地的选型指南 - 小白条111
  • CTF新手必看:3个月小白进阶实战路线图(收藏版)
  • CISP-PTE考试必备:Windows 2003靶机常见提权漏洞利用指南
  • 实战演练:基于claude code和快马平台开发销售数据仪表盘
  • 老旧Mac设备系统焕新指南:使用OpenCore Legacy Patcher实现旧设备优化
  • 2026年人生仓库企业发展前景几何?从行业现状看未来潜力
  • Mirage Flow 辅助C语言学习:指针与文件读写操作代码详解
  • Lychee-Rerank助力软件测试用例管理:智能关联需求与用例
  • 突破瓶颈:AMD显卡如何通过ZLUDA实现Blender渲染性能解锁?
  • Phi-3-vision-128k-instruct环境部署:GPU显存优化下的多模态推理实战
  • 老设备升级困境的终极破解方案:OpenCore Legacy Patcher全攻略
  • 避坑指南:为什么90%的免费股票数据网站最后都收费?这个工具我用了3年
  • ZLUDA:释放AMD显卡潜能的CUDA兼容层实现
  • nmap伪造源地址扫描的5个实用场景与3个必知风险(2024最新版)
  • 从零到上线:企业微信扫码登录全流程配置(含Vue前端+ThinkPHP后端代码)
  • ESP32S3变身迷你路由器:5步搞定Wi-Fi共享(附完整代码)
  • AT32F403A ADC采集避坑指南:V2库配置中的5个常见错误与解决方法
  • Windows下GraalVM 22.1.0安装全攻略:从JDK11到native-image一键搞定
  • 手把手教你用Super Resolution镜像:老照片修复3倍放大实战
  • 优化 vue-virtual-scroller 在动态传输列表中的性能实践
  • 利用limma包的voom方法优化RNA-seq差异分析流程
  • Realistic Vision V5.1效果实测:手部/脸部崩坏率降低82%的写实优化方案
  • 2026年全栈工程师转型AI大模型:最快6个月打造“AI×全栈”复合竞争力(附教程)
  • moment.js时区统一配置实战:从安装到固定北京时间应用
  • 零前端经验如何用Cursor开发Vue3项目?SpringBoot点餐系统踩坑实录
  • Win11家庭版无Hyper-V?5分钟搞定WSL2+Ubuntu24.04完整配置流程
  • ComfyUI-Manager必备插件清单:确保Nunchaku FLUX.1-dev工作流正常运行