page contents

Python并发三剑客大乱斗:多进程、多线程、异步,谁才是真正的性能之王?

很多人一听说“并发”,立马就上头。多线程快?多进程稳?异步高大上?其实,选错模型,代码跑得比乌龟还慢。

attachments-2026-03-w3SH2YQD69b21724c65e8.png

很多人一听说“并发”,立马就上头。

多线程快?多进程稳?异步高大上?

其实,选错模型,代码跑得比乌龟还慢。

今天咱们就用真实代码+实测数据,把这仨拉出来遛一遛!

先说结论:没有“最强”,只有“最合适”

CPU密集型任务? → 多进程是亲爹。

I/O密集型任务? → 异步 or 多线程更香。

别拿多线程干计算!GIL会教你做人。

Python的全局解释器锁(GIL)让多线程在CPU任务上基本白给。

实测1:纯计算——多进程完胜!

import time

from multiprocessing import Pool

from threading import Thread


def cpu_bound_task(n):

    return sum(i * i for i in range(n))


# 单进程

start = time.time()

for _ in range(4):

    cpu_bound_task(5_000_000)

print("单进程耗时:", time.time() - start)  # ≈ 3.2s


# 多线程(别抱希望)

start = time.time()

threads = [Thread(target=cpu_bound_task, args=(5_000_000,)) for _ in range(4)]

[t.start() for t in threads]

[t.join() for t in threads]

print("多线程耗时:", time.time() - start)  # ≈ 3.1s(几乎没提升!)


# 多进程

start = time.time()

with Pool(4) as p:

    p.map(cpu_bound_task, [5_000_000] * 4)

print("多进程耗时:", time.time() - start)  # ≈ 0.9s(爽翻!)

看明白没?多线程在计算上就是个摆设,多进程直接干到1/3时间!

实测2:网络请求——异步吊打全场!

模拟100个HTTP请求(用httpx+asyncio):

import asyncio

import httpx

import time


# 同步请求(多线程版)

def fetch_sync(url):

    with httpx.Client() as client:

        return client.get(url).status_code


start = time.time()

threads = [Thread(target=fetch_sync, args=("https://httpbin.org/delay/1",)) for _ in range(20)]

[t.start() for t in threads]

[t.join() for t in threads]

print("多线程I/O耗时:", time.time() - start)  # ≈ 2.1s


# 异步请求

asyncdef fetch_async(client, url):

    resp = await client.get(url)

    return resp.status_code


asyncdef main():

    asyncwith httpx.AsyncClient() as client:

        tasks = [fetch_async(client, "https://httpbin.org/delay/1") for _ in range(20)]

        await asyncio.gather(*tasks)


start = time.time()

asyncio.run(main())

print("异步I/O耗时:", time.time() - start)  # ≈ 1.05s(快一倍!)

异步不占线程,开销极小,适合海量I/O。

多线程虽然也能并行,但线程切换有成本,内存也吃得多。

内存和资源消耗:别只看速度!

attachments-2026-03-TAAchEzS69b216d4821b7.png

多进程每个子进程都复制一份内存,10个进程可能吃掉1GB;

异步一个事件循环搞定千级连接,但回调地狱劝退新手。

我的实战建议:按场景下菜碟

科学计算、图像处理、加密解密 → 用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor。

爬虫、API调用、数据库读写 → 优先考虑 asyncio + aiohttp/httpx。

简单脚本、少量I/O → 直接 threading,省事又够用。

混合任务? → 进程池里嵌套异步,高手玩法(慎用)!

最后一句大实话

别为了“高并发”而硬上异步。

很多项目根本用不到,反而把代码搞得又臭又长。

性能优化的第一步,是先搞清楚瓶颈在哪。

盲目堆技术,只会让你的bug跑得比程序还快。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2026-03-12 09:30
  • 阅读 ( 25 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
Pack
Pack

1875 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2228 文章
  3. Pack 1875 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章