一、Python 类型转换

 json.dumps()

作用:Python 对象 → JSON 字符串 方向:内存数据 → 可网络传输 / 写入文本的字符串

dict_data = {"title":"券商研报"}
json_str = json.dumps(dict_data, ensure_ascii=False)
# 结果:字符串 '{"title":"券商研报"}'

常用参数: ensure_ascii=False → 正常显示中文(写大模型请求体必加)

 json.loads()

作用:JSON 字符串 → Python 字典 / 列表 方向:接口收到的文本 → 程序可操作对象

json_str = '{"title":"券商研报"}'
data = json.loads(json_str)
# 结果:字典,可以直接 data["title"] 取值

一句话口诀

  • dumps:堆成字符串(对象→字符串)
  • loads:加载成对象(字符串→对象)

LLM 项目典型流程

构造请求字典 → dumps 转为字符串发给 API 接收接口返回文本 → loads 转回字典读取回答

break / continue

。。。

二、Python 同步 / 异步协程

(一)思维导图

核心一句话先记住:同步 = 排队挨个做;异步协程 = 一个线程里切换干多件事,不等 IO 空窗就切去别的活

问题:sleep 期间线程卡死,啥都不干

✅ 异步协程执行

import asyncio
async def work():
    await asyncio.sleep(2) # 非阻塞等待,让出控制权
    print("干完")
asyncio.run(work()) # 启动事件循环跑协程

(二)并发怎么实现?

  • 单协程:顺序跑,没有并发
  • 多协程并发:asyncio.create_task() 或者 asyncio.gather()
import asyncio
# 同时跑多个任务
async def main():
    t1 = asyncio.create_task(work())
    t2 = asyncio.create_task(work())
    await t1
    await t2
asyncio.run(main())

耗时:2 秒左右,而同步要 4 秒

(三)什么时候用异步协程?

  • ✅ 适合:IO 密集型(网络请求、数据库读写、文件读写)
  • ❌ 不适合:CPU 密集型(大量计算,异步没用,要用多进程)

(四)容易踩的坑(傻子必看避坑)

  1. async 函数直接调用 → 只生成对象,不运行!必须交给 asyncio
  2. await 不能写在普通 def 函数里面,会报错
  3. 不能用 time.sleep ()!会阻塞整个事件循环,要用 await asyncio.sleep ()
  4. 异步里不要混大量同步阻塞代码,会废掉并发效果

(五)同步 / 异步一句话总结

  • 同步:串行排队,阻塞等待,简单慢
  • 异步协程:单线程并发,IO 空档复用,IO 场景速度快

## 📌 额外补充(傻瓜式区分口诀)
> 遇IO就等=同步
> 遇IO就切=异步协程
> async造任务,await等结果,asyncio来调度

三、WSGI & ASGI

前置一句话:WSGI / ASGI 不是服务器,是【web 框架 和 web 服务器之间的接口标准】 就像插座标准:电器(Django/Flask/FastAPI)、插排(gunicorn/uvicorn)必须遵守同一个插座规范才能通电通信

(一)思维导图

(二)WSGI(Web Server Gateway Interface)

✅ 核心属性

同步接口标准! 诞生很早,专门适配同步 Python Web 框架(老 Django、Flask)

  • 只支持同步函数,不支持异步
  • 一个请求过来,就占用一个工作线程,处理完才释放
  • 无法原生支持长连接:WebSocket、服务推送 SSE 都不行

✅ 工作流程

客户端请求 → WSGI 服务器(Gunicorn/uWSGI) → 调用框架同步函数处理 → 返回响应

类比:银行窗口,1 个窗口一次只能接待 1 个人,这个人没办完,后面所有人排队等着

✅ 配套组件

  • WSGI 服务器:gunicorn、uwsgi
  • 框架:Flask、Django(老版本默认 wsgi 模式)

✅ 缺点

遇到 IO 等待(查数据库、调第三方接口)时,线程卡死干等着,没法处理别的请求,并发上限低

(三)ASGI(Asynchronous Server Gateway Interface)

✅ 核心属性

异步接口标准! WSGI 的升级版,支持异步,兼容同步

  • 支持 async def 异步函数(和咱们刚才学的协程配套)
  • 单线程可以同时处理大量请求(IO 空档切换任务)
  • 原生支持长连接:WebSocket、SSE、实时推送

✅ 工作流程

客户端请求 → ASGI 服务器(Uvicorn/Granian) → 可以调用异步协程处理 → 返回响应

类比:客服同时对接很多客户,A 客户在等待资料(IO)的时候,客服先回复 B 客户,不用干等

✅ 配套组件

  • ASGI 服务器:uvicorn、granian、daphne
  • 框架:FastAPI、Starlette、Django3.2+(支持 asgi)

✅ 优势

IO 密集场景并发高,支持实时通信,是现在主流新框架的标准

(四)核心对比表(极简)

(五)高频坑(重点)

  1. gunicorn 默认是 WSGI,但是 gunicorn 可以搭配 uvicorn 的 worker,变成 ASGI 服务!
    # gunicorn + uvicorn worker 跑FastAPI(生产常用)
    gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker
    
  2. FastAPI 必须 ASGI,不能直接丢给纯 WSGI 服务器跑异步能力(会退化成同步)
  3. Django 同时支持 WSGI 和 ASGI,配置文件里 wsgi.py / asgi.py

(六)一句话终极总结

  • WSGI:老同步标准,只处理一次性 http 请求,不支持 websocket
  • ASGI:新版异步标准,基于协程,支持高并发 + 长连接

更多推荐