Měl jsem úplně stejný problém jako ty. Implementoval jsem monitorovací skript pomocí knihovny watchdogs a na konci "wait_timeout" by se objevila chyba MySQL.
Po několika pokusech s funkcí "django.db.close_old_connections()" to stále nefungovalo, ale pokoušel jsem se uzavřít stará připojení v každém definovaném časovém intervalu, což nefungovalo. Změnil jsem příkaz close tak, aby se spouštěl pouze před voláním mého vlastního příkazu pro správu (což je příkaz, který bude interagovat s db a používá se ke zhroucení s chybou MySQL) a začalo to fungovat.
Zřejmě z této stránky , důvodem, proč k tomu dochází, je to, že funkce "close_old_connection" je propojena pouze se signály požadavků HTTP, takže nebude spuštěna v konkrétních vlastních skriptech. Dokumentace Djanga to neříká a upřímně jsem také pochopil věci stejným způsobem, jakým jste rozuměli vy.
Takže, co můžete zkusit udělat, je přidat volání k ukončení starého připojení před interakcí s db:
from django.db import close_old_connections
close_old_connections()
do_something_with_db()