Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
from fastapi.concurrency import run_in_threadpool
async def execute(data: DataRequest) -> DataResponse:
try:
result = await run_in_threadpool(sync_function, data)
return DataResponse(data=result)
except Exception as e:
return DataResponse(
error=str(e),
success=False,
)
В общем работает нормально. Для всех вызовов под капотом используется общий тредпул, всё работает предсказуемо.
Но потребовалось изменить количество запускаемых в пуле потоков (по умолчанию создается 40 воркеров).
Так как дело происходит с FastAPI, делается это через lifespan используя настройки anyio:
import anyio
@asynccontextmanager
async def lifespan(app: FastAPI):
limiter = anyio.to_thread.current_default_thread_limiter()
limiter.total_tokens = 100
yield
# если вдруг нужно вернуть обратно
limiter.total_tokens = 40
Зачем менять количество воркеров?
- уменьшить, если оперативки мало (один тред занимает ~8мб)
- увеличить чтобы выдержать нагрузку
Если есть предложения получше при тех же вводных - предлагайте😉
#async
Último día de Venta Flash
🙌••• ¡SOLO POR HOY! •••🙌
😎 Todo por 1 MLC 😎
Oferta disponible para los pedidos que se realicen hoy y que tengan estos modelos que compartiremos a continuación👇
Triángulos
2 Margaritas
Romerillo silvestre
Estilos Art Deco
Argollas - Flores
Margaritas XL
Margaritas Mini
Simple
Áureas Tejidas
#enventa
Muy buenas noches ❤🔥🔥
Espero no tengan el mismo calor que yo 😅
Por acá les dejo el resto de los pendientes que se encuentran en stock 🛒🛍️👈🏻
🌼 Jenny
💦 Water
🍃 Hoja
🌎 Tierra
👻 No Face
🐝 Abstract
💥 Abstract 2
Y recuerden que hay descuento del 25% para los pedidos de más de 5 artículos 🛍️@biacoldporcelain
#pendientes#enventa
⚠️‼️VENTA FLASH‼️⚠️
╔═.✵.═════════════════╗
⚠️🅓🅔🅢🅒🅤🅔🅝🅣🅞 del 25%
para todos los pedidos de más de
5 artículos 🛍️⚠️
Las ofertas están disponibles para
pagos en CUP y MLC
╚═════════════════.✵.═╝
Interesados contactar @biacoldporcelain
#pendientes#enventa