Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Студенты НХТИ познакомились с производством KAMA TYRES
На шинных предприятиях побывали студенты второго курса технологического факультета. Пока они прошли лишь общую программу, и пусть до учебной практики еще далеко, ознакомительная экскурсия на промышленные предприятия должна помочь определиться с будущей специальностью.
KAMA TYRES участвует в программе подготовки бакалавров «Федеральная экспериментальная площадка», в рамках которой студенты проходят стажировку на рабочем месте по специальности и одновременно заканчивают обучение. После получения диплома они трудоустраиваются на предприятия компании.
«На заводе все понравилось, почти все процессы автоматизированы, рабочие только следят за параметрами оборудования. Особенно впечатлили сборочные станки. Не исключаю, что после окончания учебы устроюсь именно на KAMA TYRES», – отметил Данис Гайсин, студент 2 курса направления «химическая технология».
#KAMATYRES
Торжественный подиум @silkwayrally - красивое и зрелищное мероприятие.
Мы хотим поблагодарить жителей и гостей города Томск, за то, что разделили с нами этот замечательный вечер.
Делимся первыми снимками праздника.
Фотограф - Антон Еликов.
@kamazmaster_team
#Камаз#ВТБ#Газпром#1C#KamaTyres#энергогарант#GMGen#ArtaEDM#SilkWay#SilkWayRally#KamazMaster
Прошли официальные тесты, готовимся к торжественному старту Баха "Золото Кагана"
25 апреля состоится торжественный старт, где мы ждем всех, сделаем вместе крутые фото, пилоты оставят автограф на память и у каждого есть шанс получить на память сувенир😉
г. Астрахань, ул. Максима Горького, 27 в 15:00
#АвитоСпецтехника#GMGen#Арта
#Кедр#Precab#Теком#KamaTyres#INFORCE#НациональнаяЛотерея
Эдуард Николаев и Сергей Куприянов посетили церемонию открытия новой АГНКС сети «Газпром» в Томской области.
Команда «КАМАЗ-мастер» на практике знакома с преимуществами газомоторного топлива и вносит свой активный вклад в развитии и популяризацию новых решений для автомобилей любых классов.
В параде техники принял участие наш гоночный КАМАЗ. А также, Lada Vesta, Lada Largus, Газель Next, Автомобиль УАЗ, Автобус Yutong, Автобус НЕФАЗ, Автобус ПАЗ, Самосвал КАМАЗ.
Поздравляем жителей области с новой АГНКС сети «Газпром»!
#Камаз#ВТБ#Газпром#1C#KamaTyres#энергогарант#GMGen#ArtaEDM#SilkWay#SilkWayRally#KamazMaster