FastAPI 0.162.5, phát hành ngày 11/11/2026, sửa một lỗi âm thầm: khi client ngắt kết nối giữa chừng và request bị hủy, phần dọn dẹp của dependency đồng bộ dùng yield có thể không chạy, khiến DB session, file hay lock không được giải phóng. Đây là bản vá lỗi thuần túy, không breaking change — chỉ cần nâng cấp là xong.
Lỗi kiểu này không làm API sập ngay mà rò rỉ tài nguyên từng chút một, chỉ hết khi restart server.
Lỗi được sửa là gì?
Dependency dùng yield là mẫu quen thuộc trong FastAPI: code trước yield chuẩn bị tài nguyên, code sau yield dọn dẹp. Ví dụ điển hình là get_db: mở một DB session, yield session đó, rồi đóng session trong khối finally.
Vấn đề nằm ở trường hợp request bị hủy — client đóng tab, mất mạng, hết timeout, hoặc load balancer cắt kết nối giữa chừng. Với dependency bất đồng bộ, phần dọn dẹp vẫn chạy đúng; còn với dependency đồng bộ (hàm def thường dùng yield), phần dọn dẹp có thể bị bỏ qua. Bản sửa trong PR #16734, do chính tác giả Sebastián Ramírez thực hiện, đảm bảo code dọn dẹp của dependency đồng bộ cũng chạy khi request bị hủy.
Hậu quả nếu không vá: mỗi lần client ngắt kết nối lại mất một connection khỏi pool; chạy đủ lâu, pool cạn và API bắt đầu timeout. Lỗi chỉ lộ ra khi tải cao, rất khó lần ra nguyên nhân.
Còn gì khác trong 0.162.5?
Thay đổi còn lại duy nhất mang tính nội bộ: dự án FastAPI bỏ dependency pydantic-ai và dùng pydantic-ai-slim[openai] thay thế (PR #16526). Không ảnh hưởng tới code ứng dụng của bạn.
Một tuần 5 bản vá của dòng 0.162.x
0.162.5 là bản thứ năm của dòng 0.162.x chỉ trong hơn hai tuần:
- 0.162.0 (23/10): field form boolean bị bỏ trống dùng default thay vì tự thành False.
- 0.162.3 (10/11): hỗ trợ chính thức Python 3.15, Pydantic 2.14.3.
- 0.162.4 (10/11): yêu cầu AnyIO 4.1.0 trở lên khi chạy.
- 0.162.5 (11/11): sửa dọn dẹp dependency đồng bộ khi request bị hủy.
Nhịp phát hành nhanh là đặc trưng của FastAPI — hãy pin đúng phiên bản và chạy test trước khi đưa lên production.
Nâng cấp thế nào?
Chỉ cần một lệnh, rồi kiểm tra lại phiên bản:
pip install "fastapi==0.162.5"
pip show fastapi
Sau đó chạy lại toàn bộ test, đặc biệt là test dùng TestClient với dependency yield. Đang ở 0.162.3 hoặc 0.162.4 thì đây là bản nâng cấp nhỏ, an toàn, nên lên ngay.
Điều này có ý nghĩa gì với bạn
Nếu API của bạn có endpoint chạy lâu — streaming, upload file lớn, query nặng — hoặc phục vụ nhiều client mobile hay ngắt kết nối, hãy nâng cấp trong tuần này. Sau khi lên 0.162.5, theo dõi số connection trong DB pool: nếu trước đây pool thỉnh thoảng cạn mà không rõ lý do, rất có thể thủ phạm chính là lỗi này. Dù framework đã sửa, hãy giữ thói quen viết dependency yield với try/finally.
Bài viết liên quan
- FastAPI 0.162.3 và 0.162.4: hỗ trợ chính thức Python 3.15, yêu cầu AnyIO 4.1.0 trở lên
- FastAPI: quản lý DB session an toàn bằng dependency yield trong 5 phút
- FastAPI 0.142 ra mắt: OpenTelemetry tích hợp sẵn, trace – metric – log mà không cần viết thêm code
Câu hỏi thường gặp
Lỗi này ảnh hưởng tới ai?
Ứng dụng FastAPI dùng dependency đồng bộ dạng yield để quản lý tài nguyên — DB session, file, lock — và có request bị hủy giữa chừng. API chỉ phục vụ request ngắn, client ổn định thì gần như không gặp.
Có cần sửa code khi nâng cấp không? 0.162.5 có breaking change không?
Không. Đây là bản vá lỗi, không đổi API: chỉ cần nâng cấp package rồi chạy lại test.
Làm sao biết ứng dụng của mình có đang dính lỗi này?
Dấu hiệu điển hình là connection pool DB cạn dần theo thời gian dù traffic không tăng. Kiểm tra metric của database sau một đợt client ngắt kết nối nhiều.
💬 Tin này ảnh hưởng tới dự án của bạn thế nào? Chia sẻ góc nhìn của bạn trong phần bình luận — mình đọc hết và sẽ tổng hợp những ý hay nhất.
Nguồn tham khảo
- Release Notes FastAPI — 0.162.5: https://fastapi.tiangolo.com/release-notes/
- PR #16734 — Fix synchronous dependency cleanup on cancellation: https://github.com/fastapi/fastapi/pull/16734
- FastAPI trên PyPI: https://pypi.org/project/fastapi/
- Thống kê lượt tải FastAPI: https://pepy.tech/projects/fastapi
