Ik had precies hetzelfde probleem als de jouwe. Ik heb een monitoringscript geïmplementeerd met behulp van de watchdogs-bibliotheek en tegen het einde van "wait_timeout" zou de MySQL-fout worden gegenereerd.
Na een paar pogingen met de functie "django.db.close_old_connections()" werkte het nog steeds niet, maar ik probeerde oude verbindingen elk gedefinieerd tijdsinterval te sluiten, wat niet werkte. Ik heb de opdracht close gewijzigd om alleen uit te voeren vóór de aanroep van mijn aangepaste beheeropdracht (de opdracht die zal communiceren met db en die crashte met een MySQL-fout) en het begon te werken.
Blijkbaar van deze pagina , de reden waarom dat gebeurt, is omdat de functie "close_old_connection" alleen is gekoppeld aan HTTP-verzoeksignalen, dus het wordt niet geactiveerd in specifieke aangepaste scripts. De documentatie van Django vertelt dat niet, en eerlijk gezegd begreep ik de dingen ook op dezelfde manier als jij begreep.
Wat u dus kunt proberen, is de oproep toevoegen om de oude verbinding te sluiten voordat u met db communiceert:
from django.db import close_old_connections
close_old_connections()
do_something_with_db()