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
, то его можно распараллелить?