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, как сказано здесь:

django RuntimeError at /admin/users/user/1/change/, Single thread executor already being used, would deadlock

>

но это не помогло. Я не понимаю, происходит ли это от чего-то в том, как я настроил асинхронный код, или от исключения, которое поднимается в одной из функций и скрыто в traceback.

Вернуться на верх