Tôi đã có chính xác cùng một vấn đề hơn của bạn. Tôi đã triển khai một tập lệnh giám sát bằng cách sử dụng thư viện watchdogs và vào cuối "wait_timeout", lỗi MySQL sẽ xuất hiện.
Sau một vài lần thử với hàm "django.db.close_old_connections ()", nó vẫn không hoạt động, nhưng tôi đã cố gắng đóng các kết nối cũ mỗi khoảng thời gian đã xác định, nhưng không hoạt động. Tôi đã thay đổi lệnh đóng để chỉ chạy trước lệnh gọi của lệnh quản lý tùy chỉnh của mình (là lệnh sẽ tương tác với db và được sử dụng để gặp sự cố với lỗi MySQL) và nó bắt đầu hoạt động.
Rõ ràng từ trang này , lý do tại sao điều đó xảy ra là vì hàm "close_old_connection" chỉ được liên kết với các tín hiệu yêu cầu HTTP, vì vậy nó sẽ không được kích hoạt trong các tập lệnh tùy chỉnh cụ thể. Tài liệu của Django không cho biết điều đó, và thành thật mà nói, tôi cũng hiểu mọi thứ giống như cách bạn đang hiểu.
Vì vậy, những gì bạn có thể thử làm là thêm lệnh gọi để đóng kết nối cũ trước khi tương tác với db:
from django.db import close_old_connections
close_old_connections()
do_something_with_db()