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

python 多线程join如何让他不要卡住控制台

python 多线程join如何让他不要卡住控制台?像.NET一样等多线程运行完,有没有不卡的模式?

Python 多线程join()卡住控制台,核心原因是join()是阻塞式调用(会让主线程暂停,等待子线程全部执行完再继续),和 .NET 中默认阻塞模式一致;想要不卡控制台,本质是让主线程不被join()阻塞,实现 “后台等待子线程完成,同时主线程可正常响应”,推荐 3 种简单易实现、贴合 .NET 类似体验的方式,全程无卡顿:

1. 最简洁:用daemon=True+ 主线程非阻塞等待(推荐,类似 .NET 后台线程)

核心逻辑:给子线程设置daemon=True后台线程,主线程结束时自动终止未完成的子线程,主线程不调用join(),而是用time.sleep()或循环做非阻塞等待,既等子线程完成,又不卡控制台

import threading import time # 定义子线程任务 def task(name): for i in range(5): print(f"子线程{name}运行中...") time.sleep(1) # 创建子线程,设置为后台线程 t1 = threading.Thread(target=task, args=("A",), daemon=True) t2 = threading.Thread(target=task, args=("B",), daemon=True) # 启动线程 t1.start() t2.start() # 主线程非阻塞等待(不卡控制台,可做其他操作) while t1.is_alive() or t2.is_alive(): time.sleep(0.5) # 每隔0.5秒检查一次,不阻塞主线程 print("主线程正常运行,不卡顿...") # 可替换成控制台响应逻辑 print("所有子线程运行完毕,主线程结束")

2. 最贴合 .NET 体验:用concurrent.futures.ThreadPoolExecutor(无手动join()

ThreadPoolExecutor自带线程管理,shutdown(wait=True)类似 .NET 中 “等待所有线程完成”,但可通过主线程并行执行其他操作,避免卡顿,无需手动管理join()

from concurrent.futures import ThreadPoolExecutor import time def task(name): for i in range(5): print(f"子线程{name}运行中...") time.sleep(1) # 创建线程池(类似 .NET 线程池) with ThreadPoolExecutor(max_workers=2) as executor: # 提交任务 future1 = executor.submit(task, "A") future2 = executor.submit(task, "B") # 主线程可并行做其他操作(不卡顿) while not (future1.done() and future2.done()): print("主线程可正常响应,不卡住...") time.sleep(0.5) print("所有子线程执行完毕,主线程继续")

3. 进阶:用threading.Event实现非阻塞等待(灵活控制)

类似 .NET 中的信号量,通过事件标记子线程完成状态,主线程循环检查事件,不被join()阻塞,可灵活控制等待逻辑。

import threading import time # 创建事件(标记所有子线程完成) all_done = threading.Event() thread_count = 2 # 子线程数量 def task(name): global thread_count for i in range(5): print(f"子线程{name}运行中...") time.sleep(1) # 子线程完成,计数减1 thread_count -= 1
http://www.jsqmd.com/news/785458/

相关文章:

  • 如何为你的Python项目接入多个大模型API并统一管理调用
  • 2026 年浦口区 GEO 优化公司深度测评:南京赢之乐信息科技领跑本土合规赛道 - 小艾信息发布
  • AI赋能非洲农业:轻量级技术方案与本地化实践
  • 内容创作团队如何利用 Taotoken 聚合不同模型特长提升稿件生成质量
  • 别再让电机乱跑了!用Arduino和A4950给直流减速电机做个“速度管家”(附完整代码)
  • OPC UA协议在工业场景的标准化应用:工业通信的“普通话“
  • Excel 行与列相关的函数
  • 普宁脱发白发理疗哪家效果好?黑奥秘90秒精准溯源,精准科学护理头发 - 美业信息观察
  • 从公式到图形:一步步拆解非对称3-SPR机器人工作空间的Matlab仿真流程(附完整代码)
  • 20253902 吴晨宇 2025-2026-2 《网络攻防实践》第七周作业
  • 保姆级教程:用Python和Pandas快速上手Argoverse2数据集(附代码避坑指南)
  • 微信双开终极指南:3步解锁平板模式,实现手机平板同时登录
  • 发个HTTP请求就蓝屏?MS15-034内核漏洞实战:从POC到补丁防御
  • 300GB Procreate插画教程合集零基础到接稿
  • AI Agent参与软件开发遇挑战,UModel代码知识图谱助力AI原生软件工程
  • MPAI-EEV:AI端到端视频编码如何重塑视频压缩技术格局
  • 20251917李鑫明-实践七 Linux系统攻防
  • AEC行业AI与机器人伦理挑战:安全、公平与治理框架
  • Redis学习5 分布式缓存(下)
  • 深度学习在眼科AI诊断中的应用:从模型构建到临床落地
  • KITTI不够用?深度评测ORFD:这个专为越野打造的免费数据集到底香不香
  • meituan mtgsig1.2
  • CANN/pyasc架构介绍
  • cann/sip asdConvolve卷积滤波算子
  • 2026 年鼓楼区 GEO 优化公司深度测评:南京赢之乐凭本土深耕与合规技术领跑 - 小艾信息发布
  • AI智能体技能开发实战:从黄历查询看垂直领域知识封装
  • 多模态机器学习:从融合范式到MULTIBENCH基准实践
  • 3篇3章8节:Obsidian 的全方位写作工作流
  • 解锁私人游戏云:用Sunshine打造专属游戏串流服务器
  • AI数据污染与模型退化:扩散模型自训练实验揭示反馈循环风险