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/11/14 13:09:35 阅读更多 →
Webpack 迁 Vite 别硬切:双构建与 Legacy 语法兼容

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

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

2026/11/4 7:54:10 阅读更多 →
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/11/5 7:04:07 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/14 5:13:29 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/14 5:13:29 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/14 5:13:29 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/13 22:08:41 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/14 2:41:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/14 5:13:29 阅读更多 →

日新闻

周新闻

月新闻