Python 多线程 学习记录1
思考问题为什么需要多线程,Python又怎么使用多线程呢?
1:有哪些程序提速的方法,涉及到的技术。
单线程串行程序:不加改造的程序, CPU和IO交替执行
多线程并发:Threading
多CPU并行:Multiprocessing
多机器并行:hadoop/hive/spark 大数据技术会用到(暂时不学)
2:Python 对并发编程的支持:(总览)
多线程:threading ,利用CPU和IO可以同时执行的原理,让CPU不会干巴巴的等待IO完成
多进程:multiprocessing ,利用多核CPU的能力,真正的并行执行任务
异步IO: asynico,在单线程利用CPU和IO同时执行的原理,实现函数异步执行
Python并发编程有三种方式:多线程Thread 多进程Process 多协程Coroutine
关键点:***使用Lock对资源加锁,防止冲突访问
使用Queue实现不同进程/线程之间的数据通信 ,实现生产者--消费者模式
使用线程池Pool/进程池Pool,简化线程/进程的任务提交,等待结束,获取结果
使用subprocess启动外部程序的进程,并进行输入输出交互
3:CPU密集型计算,IO密集型计算
CPU-bound: 也叫计算密集型,IO可以在短时间内完成,CPU需要大量的计算和处理,特点是CPU占有率很高
例如:压缩解压缩,加密解密,正则表达式搜索
I/O bound:是指系统大部分运行的状况是CPU在等待I/O(硬盘/内存)的读/写操作,CPU占用率较低
例如:文件处理程序,网络爬虫程序,读写数据库程序
首先明确 ,一个进程中可以启动多个线程,一个线程中可以启动多个协程。
多进程:multiprocessing 可以利用多核CPU并行运算(进程比较大),占用资源多,可启动数目比线程少,适用于CPU-bound;
多线程:相比进程,更轻量级,占用资源少,但是相比进程只能并发执行,不能利用多CPU(GIL),相比协程,启动数目有限制,占用内存资源,有线程切换开销
适用于IO bound,同时运行的任务数量要求不多
多协程asyncio:内存开销最少,启动协程数量最多,但是支持的库有限制(aiohttp/requests),代码实现复杂。适用于:I/O密集型运算,需要超多任务运行,但是有现
成库支持的场景
4:Python慢的原因:
¥¥动态类型语言,边解释边执行。
¥¥GIL 无法利用多核CPU并发执行 关于GIL ,这里给出资料Python GIL全局解释器锁详解(深度剖析) (biancheng.net)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构