24 lines
671 B
Python
24 lines
671 B
Python
from asgiref.sync import SyncToAsync, sync_to_async
|
|
from django.db import close_old_connections
|
|
|
|
|
|
class DatabaseSyncToAsync(SyncToAsync):
|
|
"""
|
|
SyncToAsync version that cleans up old database connections when it exits.
|
|
"""
|
|
|
|
def thread_handler(self, loop, *args, **kwargs):
|
|
close_old_connections()
|
|
try:
|
|
return super().thread_handler(loop, *args, **kwargs)
|
|
finally:
|
|
close_old_connections()
|
|
|
|
|
|
# The class is TitleCased, but we want to encourage use as a callable/decorator
|
|
database_sync_to_async = DatabaseSyncToAsync
|
|
|
|
|
|
async def aclose_old_connections():
|
|
return await sync_to_async(close_old_connections)()
|