#django #python-asyncio #python-3.7 #django-orm
#django #python-asyncio #python-3.7 #django-orm
Вопрос:
Я пытаюсь реализовать асинхронную поддержку (https://docs.djangoproject.com/en/3.1/topics/async /) для Django ORM для записи большого количества записей в базу данных (Postgres).
Я получаю ОШИБКУ: root:ФАТАЛЬНАЯ: оставшиеся слоты подключения зарезервированы для нерепликационных подключений суперпользователя
Я создаю сопрограммы, добавляя их к запуску цикла asyincio
# Helper Class
class ModelsHelper:
@staticmethod
@sync_to_async
def __handle_resource_data(data):
// Some calculation to create kwargs dict
return Resource.objects.get_or_create(**kwargs)
async def store_data(metric):
// some calculation to get data
return await ModelsHelper.__handle_resource_data(data)
# Main File
def get_event_loop():
loop = None
try:
loop = asyncio.get_event_loop()
except Exception as e:
print(" New Event Loop ".center(50, '*'))
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return loop
loop = get_event_loop()
future = asyncio.ensure_future(
asyncio.gather(*[ModelsHelper.store_data(metric) for metric in metrics]),
loop=loop
)
loop.run_until_complete(future)