资讯详情

资讯详情

一文读懂Python并发:莫烦Python tutorials多线程threading与GIL完全指南

一文读懂Python并发莫烦Python tutorials多线程threading与GIL完全指南【免费下载链接】tutorials机器学习相关教程项目地址: https://gitcode.com/gh_mirrors/tut/tutorials 还在纠结多线程到底有没有用本文基于莫烦Python tutorials的并发系列教程带你一文读懂Python并发的核心如何用threading 模块创建多线程、用Queue安全传递数据、用Lock锁避免出错以及 **GIL全局解释器锁**为什么会让 CPU 密集型任务帮倒忙——最后告诉你何时该切换多进程方案新手看这篇就够了。 Python并发与threading线程是什么并发Concurrency通俗讲就是让程序同时做多件事。在 Python 里最常用的工具就是标准库threading 模块线程Thread一个轻量的执行流多个线程共享同一块内存并发优势线程创建成本低、切换快特别适合等待网络/文件的场景主要限制受GIL影响CPU 密集型任务无法真正并行后文详解本教程的并发部分集中在 threadingTUT/ 目录下从最基础的创建线程讲到 GIL 与锁配套讲解循序渐进。 快速上手启动你的第一个线程创建线程只需要两步构造Thread对象 → 调用start()。教程中的第一个示例 thread2_add_thread.py 演示了最简写法thread threading.Thread(targetthread_job) thread.start() # 这一步才是真正启动线程 常见新手坑只new了线程却忘了调start()线程根本不会执行。⏳ join让主线程等一等其他线程线程是异步的主线程不会自动等它们跑完。thread3_join.py 演示了同时启动 T1、T2 两个线程后用join()逐一等待added_thread.join() # 阻塞直到该线程结束 thread2.join() print(all done)join()的作用等价于等这道菜上齐再收工——它是保证主线程安全退出的关键一步。 Queue队列线程之间如何安全传数据线程之间不能直接喊话需要一座桥梁——队列Queue。thread4_queue.py 展示了经典范式每个线程计算完成后把结果q.put(l)放入队列主线程join()全部完成后再q.get()逐一取出这样各线程互不干扰数据交接既有序又安全是多线程编程的黄金模式。 GIL是什么为什么多线程有时不加速GILGlobal Interpreter Lock全局解释器锁是 CPython 解释器的一把全局锁同一时刻只有一个线程能执行 Python 字节码。教程专门用 thread5_GIL.py 做了实测对比对 100 万个数求和分别用普通单线程和4 线程并发计算耗时——结果会发现多线程并不比单线程快甚至还有额外开销。一句话总结 GIL 的影响任务类型threading 多线程表现原因I/O 密集型网络请求、读写文件✅ 明显提速等待 I/O 时 GIL 释放其他线程可工作CPU 密集型大量计算❌ 基本不提速GIL 锁住解释器线程轮流执行而非并行 Lock锁避免多线程脏数据如果两个线程同时修改同一个全局变量就会出现脏读脏写。thread6_lock.py 演示了解决方案——互斥锁lock.acquire() # 上锁其他线程只能等待 A 1 lock.release() # 解锁规则很简单同一时刻只有一个线程能持有锁谁想改共享数据先排队。⚡ 线程还是进程看任务类型选CPU 密集型任务该用谁教程的 multiprocessing4_efficiency_comparison.py 用同一份百万级计算任务对比了三种方案的耗时普通单进程 / 多线程 / 多进程multiprocessing。结论非常清晰I/O 密集型→ 用threading多线程简单轻量CPU 密集型→ 用multiprocessing多进程每个进程独立 GIL吃满多核 多进程同样用队列通信可继续看 multiprocessing3_queue.py 与 multiprocessing5_pool.py 新手避坑清单忘调start()线程不会自己启动忘调join()主线程可能提前退出子任务被腰斩裸共享全局变量要么用Queue传数据要么加Lock保护迷信多线程提速CPU 密集型任务在 GIL 下不加速请换多进程锁的顺序多把锁时固定获取顺序避免死锁 延伸学习本教程是莫烦Python tutorials 的一部分涵盖 Python 基础、机器学习、数据处理等方向完整目录见 README.md。与并发相关的核心文件一览创建线程thread2_add_thread.pyjoin 等待thread3_join.py队列通信thread4_queue.pyGIL 实测thread5_GIL.pyLock 互斥锁thread6_lock.py线程 vs 多进程效率对比multiprocessing4_efficiency_comparison.py掌握 threading、Queue、Lock 与 GIL 这四把钥匙你就已经打开了 Python 并发的大门 【免费下载链接】tutorials机器学习相关教程项目地址: https://gitcode.com/gh_mirrors/tut/tutorials创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →