Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Достаньте звёзды с неба вместе с MAGELLANIC CLOUD! ⭐️
Розовый хайлайтер #billionstars создан для тех, кто мечтает сиять как настоящая звезда. Мягкое, деликатное, но заметное свечение — словно ты только что вернулась с прогулки по звёздным туманностям!
Почему стоит попробовать MAGELLANIC CLOUD?
— Лёгко растушёвывается и идеально ложится
— Наслаивается до нужного эффекта сияния
— Освежает и подсвечивает кожу в один миг
Твоя кожа — твоя Вселенная. Дай ей свет от миллиарда звёзд с SODA! 🌙
#sodatips
Образ, пропитанный ветром с вересковых холмов.
Нежность и буря, утончённость и страсть — макияж, вдохновлённый новой ролью Марго Робби в предстоящем фильме «Грозовой перевал». 🤩
🤩Карандаш для губ SWEET TREAT #cherryontop, №101 Cupcake — мягкий контур, как утренний румянец на холодном ветру.
🤩Хайлайтер MAGELLANIC CLOUD #billionstars — свет звёзд, будто отражение луны над пустошью.
🤩Помада Double Tornado #magicalpower (коллекция Winx, 003 Fearsome) — выразительный акцент, соединяющий силу и женственность.
🤩Румяна #rosycheeks, №101 Cherry Cake — лёгкий румянец жизни в холодных тонах Йоркшира.
Создай свой собственный шторм чувств вместе с soda🤩
Уже ждёте выход фильма?
#sodainspiration
H2O just add water energyyyyy 🌊✨
включаем ностальгию и ловим вайб русалок вместе с SODA 🐚
солёный воздух, блеск кожи, влажные текстуры — сегодня ты main mermaid
собрали продукты, чтобы повторить тот самый магический glow 👀
1.Жидкие тени для век Domino #magicalpower. Коллекция Winx, 004 Dragon Fury
2.Хайлайтер STELLAR NEBULA #billionstars
3.Сияющее масло для губ #plumpit, № 101 Fergie
4.Подводка маркер с кисточкой S-CLASS #overpowered, 209 system
Делаем макияж, будто ты только что вышла из воды и готова покорять этот мир 🌊💙
в комментариях пиши, какой сериал вернуть в тренды следующим 👇
#sodainspiration