rõ ràng bạn không ngắt kết nối. Sử dụng db.close_connection()
sau khi kết thúc truy vấn sẽ hữu ích. Ngoài ra Nếu tôi hiểu đúng CONN_MAX_AGE
đến một số giá trị ngắn có thể hữu ích. Và hãy xem xét sử dụng một số trình gộp phiên, ví dụ:pgbouncer cho các kết nối django. Bằng cách này nếu bạn có quá nhiều kết nối, nó sẽ đợi (hoặc sử dụng lại trước đó, tùy thuộc vào cấu hình) thay vì hủy thực thi với lỗi ...
cập nhật :giải thích lý do tại sao tôi đề xuất nó
Vì vậy, nếu bạn có nhiều chủ đề hơn thì hãy đăng bài max_connections
, bạn nhận được lỗi được đề cập. Mỗi luồng có thể sử dụng lại kết nối nếu CONN_MAX_AGE chưa vượt qua. Cài đặt của bạn là 0, vì vậy kết nối sẽ bị đóng sau khi hoàn thành truy vấn, nhưng bạn thấy 100 kết nối không hoạt động. Vì vậy, họ không đóng cửa. Số lượng lớn kết nối có nghĩa là chúng cũng không được sử dụng lại (logic:nếu bạn có 100 truy vấn song song, chúng sẽ không hoạt động và nếu bạn có nhiều như vậy, chúng sẽ không được sử dụng lại - mở mới). Vì vậy, tôi nghĩ rằng django không đóng chúng dưới dạng phóng to - vì vậy CONN_MAX_AGE được đặt thành 0 không hoạt động trong mã của bạn. Vì vậy, tôi đề xuất sử dụng db.close_connection()
buộc ngắt kết nối và đặt CONN_MAX_AGE thành một giá trị nhỏ nào đó có thể thay đổi hành vi.