如果你写过一段 Python 脚本去抓几百个页面、批量处理图片或者读一堆日志文件,然后发现 CPU 只跑了一核、风扇都不怎么转,那这门课要解决的就是你手上这个问题。多线程和多进程不是「进阶语法」,而是把「能跑」变成「跑得动」的那道坎。这门 Python2024 课程围绕并发编程展开,下面从能力缺口的角度说说它适合谁、看完能回答什么。

先确认一下你是不是真的需要它

几种典型情况:脚本单线程跑批要等十几分钟,想在可控范围内压缩时间;听说过 GIL,但说不清它到底卡住了什么、什么时候该绕开它;用 threading 写过几行代码,结果要么没变快,要么偶尔出现数据对不上;想用进程池,但卡在返回值收集、异常处理、参数传递这些细节上。

反过来,如果你目前连函数、类、异常处理都还没写顺,或者日常只是写点简单脚本、从没遇到过耗时瓶颈,先补基础更划算,不必急着上并发。并发的坑大多来自「还没遇到问题就先上工具」,而不是工具本身难。

这门课真正要弄清楚的三组问题

第一组是概念边界:线程和进程在内存、开销、通信方式上差在哪;GIL 约束的是哪一类任务,为什么 I/O 密集和 CPU 密集要选不同方案。这一层不清楚,后面写出来的代码基本靠猜。

第二组是控制手段:锁、信号量、事件、队列分别在解决什么竞争问题;线程池和进程池怎么提交任务、怎么等待、怎么拿结果;共享状态什么时候该避免、什么时候必须同步。

第三组是工程判断:任务拆多细合适,进程数开多少,超时和异常怎么兜,程序退出时线程/进程怎么收尾。这些不是背出来的,是踩过之后形成的判断。

建议的练习方式

  • 拿一个你手头真实存在的慢脚本改造成并发版本,记录改造前后的耗时对比,而不是用课程里的示例数据。
  • 分别用线程和进程实现同一个任务,对比结果差异,亲眼看一次「该用进程却用了线程」的后果。
  • 故意制造一次共享变量竞争,再分别用锁和队列修好它,体会两种方案的适用边界。
  • 给每个并发任务加上超时和异常捕获,观察不处理异常时程序会以什么方式结束。
  • 给任务加上进度反馈,因为并发之后最容易被忽略的就是「不知道跑到哪了」。

练习的目的不是把代码写对一次,而是让你在出错时知道往哪个方向查。并发问题的排查成本远高于普通代码。

看完应该能回答的问题

如果学完还是答不上下面这些,说明还停留在抄代码阶段:为什么同样是多线程,有的任务变快了有的反而更慢;什么情况下必须用多进程,什么情况下多进程反而是负担;加锁之后程序变慢了,这个代价值不值;线程池里的任务抛异常了,主线程怎么知道;程序要退出时,还在跑的线程和子进程该怎么处理;以及一个具体的需求摆在面前,你怎么判断该用哪种并发模型、开多少个并发单元。

这门课属于体系课,内容按概念到实践的顺序铺开,适合边看边动手。建议不要一口气看完,每学完一种机制就回到自己的项目里试一次。并发编程的知识密度高,但真正卡人的往往是细节和取舍,只有在自己的代码里跑过一遍,才算真的会了。

python2024课程-多线程与多进程

课程详情

课程标题:Python2024课程-多线程与多进程

课程简介:

本课程旨在帮助想要学习Python的用户深入理解并掌握多线程与多进程技术。

适合人群:

  • 对Python编程感兴趣的学习者
  • 希望提升Python程序性能的开发者
  • 有志于从事Python后端开发或系统优化的工程师

学习收获:

  • 掌握Python多线程与多进程的基本概念和原理
  • 学会如何在实际项目中应用多线程与多进程技术
  • 提高Python程序的性能和效率

课程亮点:

  • 深入浅出,从基础到进阶,逐步提升技能
  • 结合实际案例,理论与实践相结合
  • 丰富的教学资源,方便学员课后复习

课程目录

01 多线程入门线程通信
  01 p28.1多线程核心目标并发.mp4
  02 p28.2主线程与小弟线程.mp4
  03 p28.3多线程解决加速.mp4
  04 p28.4多线程的加速.mp4
  05 p28.5线程冲突.mp4
  06 p28.6基于类实现多线程.mp4
  07 p28.7基于类实现多线程的顺序与乱序.mp4
  08 p28.8互斥锁解决线程冲突.mp4
  09 p28.9死锁-使用锁要注意.mp4
  10 p28.10Rlock解决一个线程反复加锁单线程死锁.mp4
  11 p28.11创建线程的三种风格.mp4
  12 p28.12信号量限制线程数量.mp4
  13 p28.13限定线程数量.mp4
02 多线程实战
  01 p29.1线程通信.mp4
  02 p29.2线程通信强化.mp4
  03 p29.3线程condition.mp4
  04 p29.4高级线程调度.mp4
  05 p29.5生产者消费者.mp4
  06 p29.6线程池.mp4
  07 p29.7延时线程.mp4
  08 p29.8with作用.mp4
  09 p29.9前台进程后台进程.mp4
  10 p29.10TLS线程独立存储.mp4
  11 p29.11作业.mp4
03 多进程实战
  01 p30.1多线程回顾.mp4
  02 p30.2多进程拷贝代码.mp4
  03 p30.3多进程拷贝全局变量.mp4
  04 p30.4获取进程编号.mp4
  05 p30.5subprocess执行LinuxShell.mp4
  06 p30.6信号.mp4
  07 p30.7Linux进程小结.mp4
  08 p30.8__name__.mp4
  09 p30.9进程mutiprocessing创建过程.mp4
  10 p30.10join作用 (1).mp4
  11 p30.10join作用 (2).mp4
  12 p30.11进程同步.mp4
  13 p30.12进程不可以用全局变量共享数据.mp4
  14 p30.13进程pipe发送接收数据.mp4
  15 p30.14进程队列.mp4
  16 p30.15进程队列传输数据.mp4
  17 p30.16进程共享数据.mp4
  18 p30.17进程之间共享数组.mp4
  19 p30.18进程共享字典与list.mp4
04 多进程多线程综合实战
  01 p31.1读取CSV.mp4
  02 p31.2写入csv.mp4
  03 p31.3单线程统计行数.mp4
  04 p31.4多线程统计行数.mp4
  05 p31.5多进程统计行数.mp4
  06 p31.6多线程检索数据第一步.mp4
  07 p31.7多线程检索赵琳.mp4
  08 p31.8多线程检索找到通知其他人退出.mp4
  09 p31.9多线程检索开放数据并保存同一个文件.mp4
  10 p31.10作业.mp4
05 多进程多线程综合实践
  01 p32.1多进程检索第一步.mp4
  02 p32.2多进程检索开房数据.mp4
  03 p32.3求平均市值.mp4
  04 p32.4多线程解决平均市值.mp4
  05 p32.5多进程统计平均市值.mp4
  06 p32.6.1多线程并行抓取邮箱.mp4
  07 p32.6单线程BFS抓取邮箱.mp4
  08 p32.7多线程采集邮箱并保存.mp4
  09 p32.8csv归并.mp4
  10 p32.9多线程归并文件.mp4