python 0基础也能搞懂多任务(进程,协程,线程)
·
把“多任务”当成厨房做饭,0 基础也能秒懂!
一、故事开场
你一个人在家,要做三样吃的:
- 炖牛肉(40 min)
- 煮米饭(20 min)
- 榨果汁(5 min)
如果一件做完再做下一件,总耗时 65 min——这叫串行(单任务)。
能不能同时做?当然可以!这就是多任务。
二、三种“同时做”的办法(对比厨房)
| 办法 | 厨房比喻 | 计算机里的样子 | 优点 | 缺点 |
|---|---|---|---|---|
| 多进程 Process |
直接再请两个厨师,各占一个灶台,真正并行 | 操作系统给你多个独立厨房(内存互不干扰) | 安全,一个厨房着火不影响另一个 | 贵(内存、CPU 占用高) |
| 多线程 Thread |
你自己分身术,炖肉时趁空档淘米、榨果汁 | 一个厨房,你一个人不断切换任务 | 省内存,切换快 | 要小心“踩到脚”(数据错乱),需加锁 |
| 协程 Coroutine |
还是你一个人,但菜谱写得巧:炖肉期间“等待水开”时立刻跳去切水果,水开再回来 | 一个厨房,一个人,自己记录做到哪一步,遇到等就跳 | 极省资源,切换最快 | 只在“等”时才能跳,真正计算密集时无效 |
三、一句话总结
- 进程 = 再请厨师(真并行,贵)
- 线程 = 自己分身(快,但要锁)
- 协程 = 菜谱写得好,空档不浪费(最省,适合网络等“等”的场景)
四、最小代码对照(0 基础也能跑)
# 1. 多进程:两个厨师同时炒
import multiprocessing as mp
def cook(name):
for i in range(3):
print(f"厨师{name} 炒第{i}盘菜")
p1 = mp.Process(target=cook, args=("A",))
p2 = mp.Process(target=cook, args=("B",))
p1.start(); p2.start()
p1.join(); p2.join()
# 2. 多线程:一个人切换
import threading as td
def cook(name):
for i in range(3):
print(f"我({name}) 炒第{i}盘菜")
t1 = td.Thread(target=cook, args=("①",))
t2 = td.Thread(target=cook, args=("②",))
t1.start(); t2.start()
t1.join(); t2.join()
# 3. 协程:菜谱巧,等就跳
import asyncio
async def cook(name):
for i in range(3):
print(f"协程{name} 炒第{i}盘菜")
await asyncio.sleep(0.1) # 遇到等待立刻跳走
asyncio.run(asyncio.gather(cook("A"), cook("B")))
跑一遍,看屏幕输出顺序,就能直观感受三种“同时做”的差异!
五、记忆口诀
进程请厨师,线程分身术,协程菜谱巧;
先学线程写小 demo,遇到性能瓶颈再换进程/协程,0 基础也能步步升级!
更多推荐


所有评论(0)