Python 线程同步与异步编程 全解析
目录Python 线程同步与异步编程 全解析一、线程同步(多线程场景)1. 为什么需要线程同步?2. 常用线程同步工具(附代码示例)(1)互斥锁 Lock(最常用)(2)可重入锁 RLock(3)条件变量 Condition(4)信号量 Semaphore(5)事件 Event二、Python 异步编程(asyncio)1. 异步核心原理2. 核心关键字3. 基础示例4. 异步 vs 多线程 核心对比三、适用场景总结Python 线程同步与异步编程 全解析先给核心概念大白话比喻,彻底搞懂同步、异步、多线程的区别:同步:排队执行,一个任务完全结束后,下一个任务才能开始,全程按顺序来,不会穿插。异步:任务穿插执行,一个任务遇到「等待 / 阻塞」(比如等网络请求、等文件读写)时,先把 CPU 让给其他任务,等阻塞结束再回来继续执行,不用干等。线程同步:多线程场景下,为了避免多个线程同时操作共享数据导致出错,加锁让线程排队访问共享资源,保证数据安全。异步编程:单线程内的并发方案,靠「协程 + 事件循环」实现任务切换,不用开多线程,就能处理多个 IO 密集型任务。一、线程同步(多线程场景)1. 为什么需要线程同步?多线程场景下,多个线程会同时操作同一份共享数据,如果不加控制,会出现「数据竞争」,导致结果错误、数据混乱。经典的「卖票超卖」问题示例(无同步的错误场景):pythonimport threading import time # 共享数据:总票数 ticket = 10 def sell_ticket(): global ticket while ticket 0: # 模拟卖票的IO操作 time.sleep(0.1) ticket -= 1 print(f"线程{threading.current_thread().name} 卖出1张票,剩余{ticket}张") # 开启3个卖票线程 for i in range(3): t = threading.Thread(target=sell_ticket, name=f"售票员{i+1}") t.start()错误结果:会出现剩余票数为负数、多个线程卖出同一张票的情况,因为多个线程同时读取了ticket=1,都执行了ticket-=1。2. 常用线程同步工具(附代码示例)(1)互斥锁Lock(最常用)核心作用:保证同一时间只有一个线程能获取到锁,只有获取到锁的线程能执行临界区代码(操作共享数据的代码),其他线程会阻塞等待。核心方法:acquire()获取锁、release()释放锁,推荐用with语句自动管理锁(避免忘记释放导致死锁)。pythonimport threading import time ticket = 10 # 创建锁对象 lock = threading.Lock() def sell_ticket(): global ticket while True: # 1. 获取锁:如果锁被其他线程占用,当前线程阻塞等待 lock.acquire() # 2. 临界区:操作共享数据,只有获取到锁的线程能执行 if ticket 0: time.sleep(0.1) tick

相关新闻

Java枚举深度解析:从类型安全到实战应用

Java枚举深度解析:从类型安全到实战应用

1. 从“魔法数字”到枚举:为什么我们需要它? 如果你写过一段时间的Java代码,尤其是在处理一些固定的、有限的“状态”或“类型”时,下面这种代码你一定不陌生: public static final int ORDER_STATUS_CREATED 0; pu…

2026/8/12 19:47:15 阅读更多 →
Webpack 迁 Vite 别硬切:双构建与 Legacy 语法兼容

Webpack 迁 Vite 别硬切:双构建与 Legacy 语法兼容

Webpack 迁 Vite 别硬切:双构建与 Legacy 语法兼容 Webpack 项目迁移到 Vite 时,常见差异包括 require.context()、process.env、资源路径和 CSS 解析。一次替换所有配置会把这些差异集中暴露,排查成本很高。 迁移 Vite 的工程精髓在于&#…

2026/8/12 19:46:15 阅读更多 →
vue基础(第三章 路由)

vue基础(第三章 路由)

目录 1:vue路由使用 1.1:路由的使用 1.2:app.vue超链接 1.3:子组件 1.4:路由出口就是app.vue 1.5:路由器配置 1.6:app使用路由 2:嵌套路由 3:父组件向子组件参数传递 3.1:query方式 3.2:params方式 3.3:Props传递参数 3.4:ts配置 4:编程式路由 1:vue路…

2026/8/12 19:46:15 阅读更多 →

最新新闻

UVa 12505 Searching in sqrt(n)

UVa 12505 Searching in sqrt(n)

题目描述 给定一个整数 nnn(2≤n≤1062 \le n \le 10^62≤n≤106)和一个二进制字符串 SSS(长度不超过 202020),需要在 n\sqrt{n}n​ 的二进制表示的小数部分中,找到 SSS 第一次出现的位置。小数部分第一位的…

2026/8/12 20:29:34 阅读更多 →
2026年HDMI矩阵厂商怎么选?业内可靠品牌大盘点

2026年HDMI矩阵厂商怎么选?业内可靠品牌大盘点

会议室投屏黑屏、报告厅信号掐断、指挥中心画面撕裂——这些问题背后的元凶,往往不是显示设备,而是藏在机柜里的HDMI矩阵。过去几年,我们走访了大量项目现场,发现一个规律:信号问题高发的项目中,80%都使用了…

2026/8/12 20:29:34 阅读更多 →
2026年专业HDMI矩阵制造商怎么选?认准这几点不踩坑

2026年专业HDMI矩阵制造商怎么选?认准这几点不踩坑

作为弱电项目老兵,我今年刚交付完一个涉及 32 个信号源、8 块拼接屏的会议室改造项目。在选 HDMI 矩阵时,差点被某电商平台的"低价爆款"坑到返工。今天不聊虚的,直接结合我跑过的工地经验和真实参数,聊聊 2026 年选专业…

2026/8/12 20:29:34 阅读更多 →
YARN Capacity Scheduler:多租户Hadoop集群资源调度实战指南

YARN Capacity Scheduler:多租户Hadoop集群资源调度实战指南

1. 从资源管理的混乱到有序:为什么需要容量调度器如果你负责过公司的大数据集群,或者尝试过在共享的Hadoop集群上跑过多个任务,那你大概率经历过这样的场景:一个部门提交了一个巨型的Spark SQL分析作业,瞬间吃光了集群…

2026/8/12 20:29:34 阅读更多 →
Android 蓝牙开启关闭卡顿问题优化

Android 蓝牙开启关闭卡顿问题优化

目录 1.背景 2.优化方案 1.背景 由于蓝牙的开启和关闭的过程都是底层传递上来状态才会真正开启和真正关闭,根据设备性能不同,开启时间2秒到4秒不等,在快速开启和关闭的过程中就会感到卡顿 2.优化方案 由于底层的优化空间很小,所以这里我们的思路是从上层进行优化,让其…

2026/8/12 20:29:34 阅读更多 →
Vue+ElementUI封装下拉树组件:实现树形数据选择与模糊搜索

Vue+ElementUI封装下拉树组件:实现树形数据选择与模糊搜索

1. 项目概述与核心价值最近在重构一个后台管理系统时,遇到了一个挺典型的需求:用户需要在一个表单的下拉框里,选择一个具有层级结构的数据,比如“省-市-区”或者“部门-小组-成员”。直接用el-select配上一维数组,层级…

2026/8/12 20:28:34 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →