Принудительный запуск асинхронных BackgroundTasks, как если бы они были синхронизированы под капотом с помощью run_in_thPython

Программы на Python
Ответить
Anonymous
 Принудительный запуск асинхронных BackgroundTasks, как если бы они были синхронизированы под капотом с помощью run_in_th

Сообщение Anonymous »

Мне бы хотелось запускать async_task так, как если бы он не был асинхронным, чтобы под капотом он не запускался в том же процессе, что и fastapi, блокирующий цикл событий, а запускался одновременно в другом потоке с помощью run_in_threadpool() из starlette, поскольку FastAPI BackgroundTasks использует его. Как это реализовать?

Код: Выделить всё

from fastapi import FastAPI
app = FastAPI()

async def async_task():
import asyncio
import time
await asyncio.sleep(1)  # simulate sequential non-blocking code
time.sleep(2)           # simulate sequential blocking code
await asyncio.sleep(3)  # simulate sequential non-blocking code
time.sleep(4)           # simulate sequential blocking code

@app.get("/")
async def run_task(tasks: BackgroundTasks):
tasks.add_task(async_task)
Должен ли я просто импортировать run_in_threadpool() из starlette и использовать его в строках кода последовательной блокировки? Возможно ли это с дизайном FastAPI?
EDIT: Вопрос не в концепциях await/async в Python и FastAPI, поэтому я не считаю, что это дубликат. упомянутого вопроса (где объясняются концепции), но здесь я прошу помощи в том, как добиться конкретной логики реализации в отношении BackgroundTasks.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ood-with-r
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»