Django 5.0.x async с необработанным набором запросов и итератором
У меня есть необработанный набор запросов, который возвращает несколько миллионов элементов. На самом деле, я использую функцию iterator()
в django для улучшения производительности.
Проблема заключается в том, что я хочу сделать функцию, в которой вызывается запрос, асинхронной. Из-за этого я больше не могу сделать Django raw queryset, потому что получаю эту ошибку: django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
Использование sync_to_async делает невозможным использование iterator
. Есть функция aiterator()
, но она
Код :
def _get_elements_to_process(self):
return Elements.objects.raw(
"""
My query
""",
)
async def fetch_data(self):
for element in _get_elements_to_process().iterator():
# make some asynchronous action