Django sync_to_async блокирует event_loop на ORM-запросах?

Итак, я использую asyncio и Django, и чтобы использовать ORM Django, нужно либо использовать методы asnyc, либо обернуть вызовы ORM в sync_to_async. Однако у меня возникли вопросы, если во время ожидания ответа от базы данных цикл событий будет освобожден для выполнения других операций, например:

def sync_function(user_id, name):
    user = User.objects.get(id=user_id)
    last_name_user = User.objects.filter(name=name).last()
    return user, last_name_user

Если я сделаю это

async def async_function(user_id, name):
   user, last_name_user = await sync_to_async(sync_function)(user_id, name)

будет ли мой цикл событий свободен для выполнения других операций на процессоре, пока выполняются эти запросы?

Я также знаю, что существуют методы aget и alast, но кажется, что все, что они делают, это оборачивают метод sync_to_async, поэтому я также хотел бы знать, будет ли разница между примером, который я привел ранее, и

async def async_function(user_id, name):
   user = await User.objects.aget(id=user_id)
   last_name_user = await User.objects.filter(name=name).alast()

Я немного читал о параметре thread_sensitive в sync_to_async, насколько я понимаю, по умолчанию True означает, что обернутая функция будет выполняться в одном потоке и, таким образом, цикл событий не сможет выполнять другие задачи, а если False, то его можно распараллелить?

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