大家好,我是程序员晚枫。

Python 写网络应用,是核心技能。

"Python 用什么做网络编程?"

今天这篇文章,给你 5 大网络库完整对比。


一、5 大 Python 网络库

类型协议学习难度
socket底层TCP/UDP⭐⭐
asyncio异步通用⭐⭐⭐
aiohttpHTTP 异步HTTP⭐⭐
Twisted事件驱动通用⭐⭐⭐⭐
websocketsWebSocketWS⭐⭐

二、库 1:socket(底层基础)

socket

  • Python 内置
  • 网络编程的"基础"
  • 理解原理的起点

5 大优势

  • 内置
  • 底层:理解网络原理
  • 通用:所有协议
  • 稳定
  • 教育价值

简单示例(TCP 服务器)

1
2
3
4
5
6
7
8
9
10
11
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 12345))
server.listen()

while True:
client, addr = server.accept()
data = client.recv(1024)
client.send(b'Hello, World!')
client.close()

30 行 = TCP 服务器

适合场景

  • 学习网络原理
  • 底层协议
  • 嵌入式

三、库 2:asyncio(异步之王)

asyncio

  • Python 3.4+ 内置
  • 异步编程标准
  • 未来 5 年趋势

5 大优势

  • 内置
  • async/await 语法:现代
  • 高性能:单线程处理万级并发
  • 生态丰富:aiohttp、aiomysql、aioredis
  • 类型注解:现代 Python

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
import asyncio

async def fetch(url):
# 模拟 HTTP 请求
await asyncio.sleep(1)
return f"Result from {url}"

async def main():
tasks = [fetch(f"https://example.com/{i}") for i in range(10)]
results = await asyncio.gather(*tasks)
return results

results = asyncio.run(main())

10 个"请求"并发,1 秒完成

适合场景

  • 高并发服务
  • 实时通信
  • AI 模型推理
  • 微服务

asyncio 生态

  • aiohttp(HTTP)
  • aiomysql、asyncpg(数据库)
  • aioredis(缓存)
  • websockets(WebSocket)

四、库 3:aiohttp(HTTP 异步)

aiohttp

  • 异步 HTTP 客户端/服务器
  • 基于 asyncio
  • requests 的异步版

5 大优势

  • 异步 HTTP
  • 客户端 + 服务器
  • 性能优
  • 生态丰富
  • WebSocket 支持

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
import aiohttp
import asyncio

async def fetch_all():
async with aiohttp.ClientSession() as session:
tasks = [
session.get(f'https://api.example.com/{i}')
for i in range(100)
]
responses = await asyncio.gather(*tasks)
return [await r.json() for r in responses]

results = asyncio.run(fetch_all())

100 个请求,1 秒完成

适合场景

  • 爬虫
  • API 调用
  • 微服务

五、库 4:Twisted(事件驱动老牌)

Twisted

  • 老牌事件驱动框架
  • 2000+ 年发布
  • asyncio 之前的事实标准

5 大优势

  • 成熟:20+ 年
  • 协议丰富:HTTP、SMTP、SSH、DNS
  • 性能优
  • 跨平台
  • 生产稳定

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
from twisted.internet import reactor, protocol

class Echo(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)

class EchoFactory(protocol.Factory):
def buildProtocol(self, addr):
return Echo()

reactor.listenTCP(12345, EchoFactory())
reactor.run()

适合场景

  • 协议服务器(SMTP、SSH、DNS)
  • 长期运行服务
  • 老牌项目维护

Twisted vs asyncio

维度Twistedasyncio
学习难度⭐⭐⭐⭐⭐⭐⭐
生态
性能⭐⭐⭐⭐⭐⭐⭐⭐
维护✅ 持续✅ 标准库
推荐度老牌新首选

新项目建议用 asyncio


六、库 5:websockets(WebSocket 标准)

websockets

  • WebSocket 库
  • 基于 asyncio
  • 实时通信必备

5 大优势

  • WebSocket 标准
  • asyncio 集成
  • 简单易用
  • 高性能
  • 生产稳定

简单示例

1
2
3
4
5
6
7
8
9
import asyncio
import websockets

async def echo(websocket, path):
async for message in websocket:
await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "localhost", 8765)
asyncio.run(start_server)

20 行 = WebSocket 服务器

适合场景

  • 实时聊天
  • 实时通知
  • 在线协作
  • 金融行情

七、5 大网络库详细对比

维度socketasyncioaiohttpTwistedwebsockets
学习难度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
性能⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
异步支持✅ 原生✅ 原生
HTTP⚠️ 手动⚠️ 需配合
WebSocket⚠️ 手动⚠️ 需配合
生态
现代⚠️ 传统✅ 现代✅ 现代⚠️ 老牌✅ 现代
学习资源⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

八、5 大场景选型

场景 1:学习网络原理

推荐socket

  • 底层
  • 理解 TCP/UDP
  • 教育首选

场景 2:写高并发服务

推荐asyncio + aiohttp

  • 现代
  • 高性能
  • 未来趋势

场景 3:异步 HTTP 客户端

推荐aiohttp

  • 异步 HTTP
  • requests 替代品
  • 爬虫首选

场景 4:WebSocket 服务

推荐websockets

  • WebSocket 标准
  • 实时通信
  • 聊天/通知

场景 5:协议服务器

推荐Twisted

  • SMTP、SSH、DNS
  • 成熟
  • 老牌项目

九、4 个真实案例

案例 1:Instagram

  • 选择:Django + asyncio
  • 原因:高并发
  • 结果:10 亿+ 用户

案例 2:Dropbox

  • 选择:Twisted(部分)
  • 原因:协议多样性
  • 结果:5 亿+ 用户

案例 3:OpenAI API

  • 选择:aiohttp + asyncio
  • 原因:高并发 AI 服务
  • 结果:服务百万开发者

案例 4:Slack

  • 选择:WebSocket + asyncio
  • 原因:实时消息
  • 结果:千万级企业

十、5 个性能优化技巧

技巧 1:用 asyncio.gather

1
2
3
4
5
6
# 慢:串行
for url in urls:
data = await fetch(url)

# 快:并发
data = await asyncio.gather(*[fetch(url) for url in urls])

技巧 2:用连接池

1
2
3
4
5
6
7
8
# 慢:每次新建
async with aiohttp.ClientSession() as session:
...

# 快:复用连接
connector = aiohttp.TCPConnector(limit=100)
async with aiohttp.ClientSession(connector=connector) as session:
...

技巧 3:用 Semaphore 限流

1
2
3
4
5
sem = asyncio.Semaphore(10)  # 最多 10 个并发

async def fetch(url):
async with sem:
return await session.get(url)

技巧 4:用 uvloop

  • 替代 asyncio 默认事件循环
  • 性能提升 2-4 倍
1
2
3
import asyncio
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

技巧 5:避免阻塞调用

1
2
3
4
5
# 慢:阻塞
time.sleep(1)

# 快:异步
await asyncio.sleep(1)

十一、5 个常见误区

误区 1:异步一定快

  • ❌ 错
  • ✅ 异步适合 I/O 密集
  • CPU 密集用多进程

误区 2:requests 够用

  • ⚠️ 部分对
  • ✅ 小项目够
  • 大项目要 aiohttp

误区 3:Twisted 已死

  • ❌ 错
  • ✅ 还在维护
  • 新项目用 asyncio

误区 4:asyncio 很难

  • ⚠️ 部分对
  • ✅ 概念多
  • 学 1 周就够

误区 5:必须用最新库

  • ❌ 错
  • 够用就行
  • 老库也能用

十二、asyncio 5 大核心概念

概念 1:协程(Coroutine)

1
2
async def my_func():
return 1

概念 2:await

1
2
async def main():
result = await my_func()

概念 3:任务(Task)

1
2
task = asyncio.create_task(my_func())
result = await task

概念 4:Future

  • 异步操作的"未来结果"
  • 底层概念

概念 5:事件循环(Event Loop)

1
asyncio.run(main())  # 启动事件循环

十三、5 个真实异步项目

项目 1:异步爬虫

1
2
3
4
5
6
7
8
9
10
11
12
import aiohttp
import asyncio

async def fetch_url(session, url):
async with session.get(url) as response:
return await response.text()

async def main():
async with aiohttp.ClientSession() as session:
urls = [f'https://example.com/{i}' for i in range(100)]
tasks = [fetch_url(session, url) for url in urls]
return await asyncio.gather(*tasks)

项目 2:WebSocket 聊天

1
2
3
4
5
6
7
8
import asyncio
import websockets

async def chat():
async with websockets.connect('ws://localhost:8765') as ws:
await ws.send('Hello')
response = await ws.recv()
print(response)

项目 3:异步数据库

1
2
3
4
5
6
7
import asyncpg
import asyncio

async def main():
conn = await asyncpg.connect('postgresql://...')
rows = await conn.fetch('SELECT * FROM users')
await conn.close()

项目 4:实时 API

1
2
3
4
5
6
7
8
# FastAPI
from fastapi import FastAPI

app = FastAPI()

@app.get("/users")
async def get_users():
return {"users": [...]}

项目 5:异步队列

1
2
3
4
5
6
7
8
9
10
11
12
import asyncio

queue = asyncio.Queue()

async def producer():
for i in range(10):
await queue.put(i)

async def consumer():
while True:
item = await queue.get()
print(item)

十四、给 Python 网络开发者的 4 个建议

建议 1:先学 socket

  • 理解原理
  • 2 周搞定

建议 2:再学 asyncio

  • 现代 Python
  • 1 周上手

建议 3:HTTP 选 aiohttp

  • requests 替代品
  • 2 周精通

建议 4:实时选 websockets

  • WebSocket 标配
  • 1 周上手

十五、最后的最后

Python 网络编程,3 句话总结

  1. socket 是基础:理解原理
  2. asyncio 是未来:现代异步
  3. aiohttp 是 HTTP 首选:高性能

学 Python 6 年,我学到的最重要的事:

"asyncio 是 Python 网络编程的未来。"

5 年后,asyncio 会和 requests 一样普及。

现在学 asyncio,5 年后你就是专家


相关阅读


科技不高冷,AI很好用。
我是晚枫,关注我,带你一起玩AI!

🎓 AI 编程实战课程

程序员晚枫专注AI编程培训,通过 《50讲 · AI编程训练营》,让小白也能用AI做出实际项目。帮你从零上手!