这门课解决什么问题:让脚本不再卡死在单任务上

很多上班族和转行者在学完基础语法后,都会卡在同一个瓶颈:写出来的脚本能跑通,但效率太低。比如要批量下载几千张图片、同时处理十几个日志文件,或者要一边监控数据库一边接收外部请求,单线程程序只能排队执行,界面卡死、任务超时是常态。这门讲并发编程的进阶课,解决的就是这类真实工作场景。它不教基础语法,默认你已经掌握函数、类和文件读写,直接切入进程和线程的创建、调度与协作。如果你的日常工作涉及数据处理、自动化运维、后端接口开发,或者经常写需要同时做多件事的脚本,这部分内容是绕不开的硬骨头。但如果你目前只写几十行的简单脚本,暂时不需要并行处理,这门课可以先放放,等遇到性能瓶颈再看。

适合什么基础,建议先看哪几块

这门课要求你至少能独立写出两百行左右的面向对象程序,清楚类继承和实例化的过程,知道模块怎么导入。如果这些还不熟练,建议先补基础,否则看到继承 Process、重写 run 方法时会一头雾水。进入正课后,建议的观看顺序是:先集中看进程部分的前几个小节,把直接实例化和继承两种创建方式对比着学,理解父进程与子进程的关系;然后跳到线程部分,用同样的对比方法学 Thread 的两种写法。中间关于多进程执行不确定性的那一节,不要跳过,它是理解后续锁机制和同步问题的前提。很多人学到后面觉得混乱,就是因为没搞清楚操作系统调度带来的随机性。把这几块吃透,后面的通信和同步问题才有地基可踩。

学完能独立做什么,资料怎么配合练习

学完之后,你应该能独立完成这几类任务:写一个多进程批量文件处理脚本,把一个耗时任务拆成几个进程同时跑;用多线程实现一个简单的并发请求工具,同时抓取多个网页并汇总结果;在遇到共享资源冲突时,知道该用锁还是队列来协调。这些能力直接对应日常的自动化办公、数据清洗和轻量级后端开发场景。练习方法上,建议每看完一个创建方式的小节,就暂停视频,自己写一个最小可运行的例子:创建两个子进程分别打印不同的数字,观察输出顺序;然后用线程再做一遍。不要只看不动手,并发编程的坑只有自己踩过才记得住,比如子进程不自动退出、线程间变量共享导致数据错乱。视频资料配合本地环境,边看边敲,遇到报错先自己查文档,实在卡住再继续往下看,这样吸收效率最高。

课程目录

课程目录71 集
  • 1-1 [进程和线程] 进程和线程的概述 (11:18).mp4
  • 1-2 [进程和线程] 自动创建与启动的进程 (07:54).mp4
  • 1-3 [进程和线程] 子进程的创建与启动之直接实例化Process(上) (09:41).mp4
  • 1-4 [进程和线程] 子进程的创建与启动之直接实例化Process(下) (06:14).mp4
  • 1-5 [进程和线程] 子进程的创建与启动之继承Process (12:09).mp4
  • 1-6 [进程和线程] 子进程的创建与启动之调用函数fork() (09:12).mp4
  • 1-7 [进程和线程] 自动创建与启动的父线程 (07:26).mp4
  • 1-8 [进程和线程] 子线程的创建与启动之直接实例化Thread (08:13).mp4
  • 1-9 [进程和线程] 子线程的创建与启动之继承Thread (06:12).mp4
  • 1-10 [进程和线程] 多进程执行的不确定性 (05:31).mp4
  • 1-11 [进程和线程] 多线程执行的不确定性 (02:56).mp4
  • 1-12 [进程和线程] 守护父进程的子进程 (06:11).mp4
  • 1-13 [进程和线程] 守护父线程的子线程 (05:17).mp4
  • 1-14 [进程和线程] 阻塞父进程的子进程之方法join() (08:23).mp4
  • 1-15 [进程和线程] 阻塞父线程的子线程之方法join() (03:38).mp4
  • 1-16 [进程和线程] 进程池Pool (12:51).mp4
  • 1-17 [进程和线程] 线程池ThreadPool (07:54).mp4
  • 1-18 [进程和线程] 进程池ProcessPoolExecutor(上) (10:48).mp4
  • 1-19 [进程和线程] 进程池ProcessPoolExecutor(中) (06:39).mp4
  • 1-20 [进程和线程] 进程池ProcessPoolExecutor(下) (15:00).mp4
  • 1-21 [进程和线程] 线程池ThreadPoolExecutor (03:47).mp4
  • 1-22 [进程和线程] 全局变量在多个进程中不能共享 (03:47).mp4
  • 1-23 [进程和线程] 全局变量在进程的所有线程中可以共享 (02:00).mp4
  • 1-24 [进程和线程] 多线程操作共享数据的不安全性 (06:58).mp4
  • 1-25 [进程和线程] 进程间通信之共享内存 (09:53).mp4
  • 1-26 [进程和线程] 多进程操作共享数据的不安全性 (03:42).mp4
  • 1-27 [进程和线程] 多线程同步之Lock(上) (08:51).mp4
  • 1-28 [进程和线程] 多线程同步之Lock(下) (07:43).mp4
  • 1-29 [进程和线程] 多进程同步之Lock (02:36).mp4
  • 1-30 [进程和线程] 多线程的死锁(上) (06:51).mp4
  • 1-31 [进程和线程] 多线程的死锁(下) (04:58).mp4
  • 1-32 [进程和线程] 多进程的死锁 (04:03).mp4
  • 1-33 [进程和线程] 多线程同步之RLock(上) (06:27).mp4
  • 1-34 [进程和线程] 多线程同步之RLock(中) (07:48).mp4
  • 1-35 [进程和线程] 多线程同步之RLock(下) (07:00).mp4
  • 1-36 [进程和线程] 多进程同步之RLock (02:07).mp4
  • 1-37 [进程和线程] 多线程同步之Condition(上) (09:43).mp4
  • 1-38 [进程和线程] 多线程同步之Condition(下) (10:15).mp4
  • 1-39 [进程和线程] 多进程同步之Condition (02:01).mp4
  • 1-40 [进程和线程] 经典生产者消费者问题(多线程Condition版) (08:21).mp4
  • 1-41 [进程和线程] 经典生产者消费者问题(多进程Condition版) (02:29).mp4
  • 1-42 [进程和线程] 多线程同步之Semaphore(上) (09:29).mp4
  • 1-43 [进程和线程] 多线程同步之Semaphore(下) (03:19).mp4
  • 1-44 [进程和线程] 多进程同步之Semaphore (03:29).mp4
  • 1-45 [进程和线程] 多线程同步之Event (08:53).mp4
  • 1-46 [进程和线程] 多进程同步之Event (02:49).mp4
  • 1-47 [进程和线程] 管道 (10:35).mp4
  • 1-48 [进程和线程] 进程间通信之管道 (09:36).mp4
  • 1-49 [进程和线程] 进程间通信之Manager (05:34).mp4
  • 1-50 [进程和线程] 全局解释器锁GIL (12:09).mp4
  • 1-51 [进程和线程] 定时器线程Timer (06:26).mp4
  • 1-52 [进程和线程] 为什么需要ThreadLocal (07:23).mp4
  • 1-53 [进程和线程] 什么是ThreadLocal (08:38).mp4
  • 2-1 [正则表达式] 正则表达式的简介 (10:54).mp4
  • 2-2 [正则表达式] 使用模块re实现字符串的匹配(上) (12:28).mp4
  • 2-3 [正则表达式] 使用模块re实现字符串的匹配(下) (07:24).mp4
  • 2-4 [正则表达式] 正则表达式的预编译 (12:44).mp4
  • 2-5 [正则表达式] 单个字符的匹配 (14:15).mp4
  • 2-6 [正则表达式] 正则表达式与原始字符串 (13:59).mp4
  • 2-7 [正则表达式] 贪婪匹配与勉强匹配 (09:42).mp4
  • 2-8 [正则表达式] 分组匹配(上) (06:59).mp4
  • 2-9 [正则表达式] 分组匹配(下) (09:34).mp4
  • 2-10 [正则表达式] 逻辑匹配 (05:55).mp4
  • 2-11 [正则表达式] 使用模块re实现字符串的查找(上) (12:09).mp4
  • 2-12 [正则表达式] 使用模块re实现字符串的查找(中) (05:03).mp4
  • 2-13 [正则表达式] 使用模块re实现字符串的查找(下) (06:18).mp4
  • 2-14 [正则表达式] 使用模块re实现字符串的替换(上) (13:14).mp4
  • 2-15 [正则表达式] 使用模块re实现字符串的替换(下) (06:13).mp4
  • 2-16 [正则表达式] 使用模块re实现字符串的劈分 (11:10).mp4
  • 2-17 [正则表达式] 边界匹配 (13:48).mp4
  • 2-18 [正则表达式] Match对象的属性和方法 (15:13).mp4