Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
📈 El tipo de cambio publicado por el BCV es el promedio ponderado resultante de las operaciones diarias de las mesas de cambio activas de las instituciones bancarias participantes.
EUR. 143,50090776
CNY. 17,43147610
TRY. 3,08980343
RUB. 1,56380540
USD. 125,42470000
Fecha Valor: Viernes, 01 #Agosto 2025
El tipo de cambio publicado por el BCV es el promedio ponderado resultante de las operaciones diarias de las mesas de cambio activas de las instituciones bancarias participantes.
EUR. 39,65787052
CNY. 5,07470046
TRY. 1,10690212
RUB. 0,42614804
USD. 36,63680000
Fecha Valor: Jueves, 01 #Agosto 2024
🌞🤸 Bienvenido #agosto🔥🌡️ con "A" de a derretirse 🥵😂🤣
🥳 Muchas felicidades 🎊
para todos los
♌ Leo 🦁
y
♍ Virgo 😇
que cumplen años este mes
Y recuerden 🤲
🤩👇🏻👇👇🏼👇🏽👇🏾👇🏿
✨ Sin importar lo que pasó ayer, cada mañana hay que decirle a la vida ¡Aquí voy otra vez! 🙌
PD: Si haces un pedido en tu cumpleaños recibes un DESCUENTO de hasta el 10%
🎂
#undiaalavez#pendientes
🌦️💐 Bienvenido #agosto💐🌦️ con "A" de 🥑 aguacate 🥑
🥳 Muchas felicidades 🎊
para todos los
♌Leo🦁
y
♍Virgo😇
que cumplen años este mes
Recuerden que si hacen un pedido en su cumpleaños reciben un descuento🎂🎉
Acá les dejamos una ✨#frase motivacional✨🤲💖👇🏻👇🏻👇👇👇🏼👇🏼👇🏽👇🏽👇🏾👇🏾👇🏿👇🏿
Si el plan “A” no funciona, recuerda que el abecedario tiene 26 letras más y que por muy larga que sea la tormenta, el sol siempre vuelve a brillar entre las nubes⛈️☀️🌧️
😌#undiaalavez