Miałem dokładnie ten sam problem co twój. Zaimplementowałem skrypt monitorujący za pomocą biblioteki watchdogs i pod koniec "wait_timeout" został zgłoszony błąd MySQL.
Po kilku próbach z funkcją "django.db.close_old_connections()" nadal nie działała, ale próbowałem zamykać stare połączenia co określony przedział czasu, co nie działało. Zmieniłem polecenie zamykania, aby było uruchamiane tylko przed wywołaniem mojego niestandardowego polecenia zarządzania (które jest poleceniem, które będzie współdziałać z db i powoduje awarię z błędem MySQL) i zaczęło działać.
Najwyraźniej z tej strony , powodem tego jest fakt, że funkcja „close_old_connection” jest połączona tylko z sygnałami żądań HTTP, więc nie zostanie uruchomiona w określonych skryptach niestandardowych. Dokumentacja Django tego nie mówi i szczerze rozumiałem wszystko w taki sam sposób, w jaki ty rozumiałeś.
Więc możesz spróbować dodać wywołanie, aby zamknąć stare połączenie przed interakcją z db:
from django.db import close_old_connections
close_old_connections()
do_something_with_db()