Python - Однопоточный исполнитель уже используется, возникнет тупик
Я пытаюсь создать асинхронное представление, которое обращается к БД и возвращает данные двумя отдельными запросами.
@sync_to_async
def get_tweets(request):
return (Tweet.objects.
annotate(full_text=Concat(F('title'), F('body'))).
order_by(F('date').desc(nulls_last=True)).
values('full_text', 'title', 'body', 'date',
tweet_id=F('uuid'), sent_to_app=F('sent')))
@sync_to_async
def get_users(request):
return User.objects.filter(is_active=True).values('username', 'email',
full_name=Concat(F('first_name'), F('last_name')))
@sync_to_async
@csrf_exempt
@async_to_sync
async def async_view(request):
funcs = [get_tweets, get_users]
tasks = [asyncio.ensure_future(func(request)) for func in funcs]
data = await asyncio.wait(tasks, return_when=FIRST_EXCEPTION)
return JsonResponse({'data': data}, safe=False)
При отладке кода, перед ответом, я получаю исключение для каждой задачи в tasks:
RuntimeError('Single thread executor already being used, would deadlock')
поэтому я не могу собрать результаты, я не понимаю, почему это происходит, за исключением того, что это произошло в asgiref.
Я понизил версию asgiref, как сказано здесь:
>но это не помогло. Я не понимаю, происходит ли это от чего-то в том, как я настроил асинхронный код, или от исключения, которое поднимается в одной из функций и скрыто в traceback.