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/9/29 9:39:47 阅读更多 →
Webpack 迁 Vite 别硬切:双构建与 Legacy 语法兼容

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

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

2026/10/14 3:41:21 阅读更多 →
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/10/14 16:38:34 阅读更多 →

最新新闻

GEO生成式引擎优化:从传统搜索到AI引用的宣发新范式

GEO生成式引擎优化:从传统搜索到AI引用的宣发新范式

这两年做媒介宣发,最明显的变化是:投放出去的稿子,用户到底看没看到,越来越说不清了。以前我们靠阅读量、搜索排名和外链数量做判断,现在这些指标还在,真正的转化路径却已经变了——很多人遇到问题不再去搜…

2026/10/17 0:34:00 阅读更多 →
善付通支付结算接入全攻略:从报文加解密到订单对账闭环

善付通支付结算接入全攻略:从报文加解密到订单对账闭环

简介:建设银行善付通支付结算接入文档是一份面向企业开发与财务人员的详细技术指南,适用于需要将善付通采购订单、销售订单、收付款及结算对账流程嵌入自有系统的场景。文档完整覆盖对接流程、数据传输规范、报文格式与数据加解密要求,并逐一…

2026/10/17 0:34:00 阅读更多 →
降维实战:从PCA到SVD与LDA的完整推导与工程陷阱

降维实战:从PCA到SVD与LDA的完整推导与工程陷阱

降维这个主题,我在学的时候绕了不少弯路。课本上堆了一堆公式,但没人告诉我这些公式到底在干什么。后来自己动手推了一遍,又把主成分分析(PCA)、奇异值分解(SVD)和线性判别分析(LDA&…

2026/10/17 0:34:00 阅读更多 →
MATLAB GUI机制解析:gui_mainfcn与handles/guidata数据管理

MATLAB GUI机制解析:gui_mainfcn与handles/guidata数据管理

说实话,用 MATLAB 写 GUI 的人不少,但很多人的认知边界就停在“双击 .fig 进 GUIDE、拖几个控件、双击控件写回调”这一层。等哪天点开自动生成的 .m 文件,看到最上面那段调 gui_mainfcn 的骨架代码,第一反应基本都是“这是系统代…

2026/10/17 0:34:00 阅读更多 →
云平台选型对比指南:从部署形态到避坑实践

云平台选型对比指南:从部署形态到避坑实践

简介:《各大云平台对比》文档系统梳理云计算平台的定义、分类与核心价值,并对比阿里云、百度BAE、腾讯云、华为云等国内主流云平台。内容涵盖存储型、计算型及综合型云平台的区别,企业采用云平台在成本、灵活性、安全性上的收益,以…

2026/10/17 0:34:00 阅读更多 →
操作系统核心算法复试考点全梳理:调度、页面置换与死锁

操作系统核心算法复试考点全梳理:调度、页面置换与死锁

考研复试操作系统算法这东西,说难也难,说简单也简单。难是因为它横跨了并发、调度、内存、文件系统、死锁五座大山,每座山里都蹲着几个绕不开的经典问题;简单是因为复试考来考去就那么几十道题,出题人绕不开那些“祖宗…

2026/10/17 0:33:00 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →