Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Клиника "Источник" вновь вошла в ТОП-150 престижного медицинского рейтинга✨
Деловой журнал об индустрии здравоохранения Vademecum составил и опубликовал ежегодный рейтинг частных многопрофильных клиник России.
📌Четвертый год подряд мы подтверждаем стабильность своей работы, оставаясь в ТОП-150 этого списка. По итогам 2021 года клиника заняла в рейтинге 116-ю позицию (год назад была 118-я строка).
☝В ТОП-200 #Vademecum включены самые крупные и технологичные частные многопрофильные клиники России. Аналитики запрашивают и исследуют самые разные данные, в том числе:
- количество уникальных пациентов,
- размер выручки,
-зону охвата,
- общее число направлений,
- заработные платы персонала и другие показатели.
💚Благодарим пациентов, наш коллектив и партнёров за стабильную работу и эффективное сотрудничество!
Guía de uso racional de antimicrobianos en perros y gatos
https://drive.google.com/file/d/1ohBoeX05pM1sHM0g3lEK-yDAe4zwoZCm/view?usp=drivesdk
#Farmacologia
#Vademecum
Dosificación de medicamentos para perros y gatos
Kraft
https://drive.google.com/file/d/1UPj-abMKoorIxjlz2fGrpgvQ-eCxnGCs/view?usp=drivesdk
#Farmacologia
#Vademecum
Consulta veterinaria en 5 minutos de pequeños mamíferos
Aporte del doctor Fernando López
https://drive.google.com/file/d/1OnAJHMxJmiHkycnRmT3tR0750_RGGh6t/view?usp=drivesdk
#clinica
#vademecum
#exoticos