Celery: xử lý tác vụ nền và hàng đợi công việc
Người dùng bấm “Đăng ký” và phải chờ 8 giây vì hệ thống đang gửi email. Giải pháp: trả lời ngay, còn việc gửi email đẩy sang hàng đợi cho worker xử lý. Đó chính…
Người dùng bấm “Đăng ký” và phải chờ 8 giây vì hệ thống đang gửi email. Giải pháp: trả lời ngay, còn việc gửi email đẩy sang hàng đợi cho worker xử lý. Đó chính…
pip và requirements.txt vẫn chạy tốt, nhưng chúng không khóa được phiên bản phụ thuộc gián tiếp và không quản lý môi trường ảo giúp bạn. Poetry và uv sinh ra để…
Bạn viết một script hữu ích và muốn đồng nghiệp dùng được. Thay vì bắt họ sửa biến trong file, hãy biến nó thành lệnh CLI. Typer làm việc đó chỉ từ type hints.…
Hàm của bạn gọi API thật thì test sẽ chậm, phụ thuộc mạng và có thể tốn tiền. Mocking cho phép thay thành phần bên ngoài bằng một bản giả có hành vi do bạn quy…
Quy tắc số một của tối ưu: đừng đoán. Lập trình viên gần như luôn đoán sai chỗ nào chậm. Hãy đo, rồi mới sửa.
Đo một đoạn nhỏ với timeit
import timeit
timeit.t…
Viết thẳng mật khẩu database vào file .py rồi đẩy lên GitHub là một trong những lỗi tốn kém nhất mà lập trình viên mắc phải. Cách đúng là tách cấu hình ra khỏi…
Python có hai cách chạy song song, và chọn sai thì chương trình không những không nhanh hơn mà còn chậm đi. Điều quyết định nằm ở một thứ tên là GIL.
GIL là gì…
Gọi 50 API, mỗi lần chờ 1 giây — chạy tuần tự mất 50 giây, nhưng thực ra CPU chỉ ngồi chờ. asyncio cho phép chờ đồng thời, rút xuống còn hơn 1 giây.
Hàm bất đồn…
Trạng thái nên là enum, bản ghi bất biến nên là NamedTuple, còn dữ liệu vốn là dict thì giữ nguyên với TypedDict. Bài viết chỉ ra khi nào dùng cái nào và khác dataclass ở đâu.