Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
💥 CFMOTO 800MT-X. Эпизод 2
✏️ Продолжаю колдовать в гараже. Сегодня установил:
🔹 Дополнительный свет (теперь светло, хоть ночью снимай)
🔹 Защиту (гарды + протектор бака)
🔹 Шарнирные зеркала (неубиваемые)
🔹 Подогрев ручек (чтобы не мерзли пальцы)
🔹 Новое стекло
🔹 Багаж: сумка Rhinowalk на бак и кофры Westwind Hussar Panniers.
✔️ Байк реально преобразился и стал выглядеть как настоящий путешественник! 🧳 Кто уже ставил такие кофры? Делитесь опытом в комментариях!
⬇️⬇️⬇️ССЫЛКИ НА ВИДЕО
https://vkvideo.ru/video-226736897_456239441?list=74403a51bcb94caa9c
https://youtu.be/c7fPX5ubvSg?si=s3wB7BbGJICk3qzO
https://dzen.ru/video/watch/69a14c29a994f2140657ea7f
https://rutube.ru/video/7608068f568f57beb2eb1616b30dc724/?r=a/
#cfmoto#800mtx#motoprep#hardenduro#мотоцикл#путешествия
💥 KTM 450 RALLY REPLICA: ГОТОВЬТЕСЬ К БЕЗДОРОЖЬЮ! БАЙК ДАНИЭЛЯ САНДЕРСА ВЫХОДИТ В ПРОДАЖУ!
✏️ Мотоцикл, на котором Даниэль Сандерс штурмует подиумы ралли-рейдов (включая Дакар!), теперь доступен и вам! KTM только что представила долгожданную 450 Rally Replica 2025 года. Это не просто мотоцикл — это чистокровная гоночная машина для бездорожья, адаптированная для эндуро-ралли.
🔥 Главные фишки байка:
1. Сердце чемпиона: Тот же мощный 450-кубовый SOHC двигатель, что и на заводской раллийной машине Сандерса. Облегченные компоненты (поршень, шатун), полый распредвал, титановые клапаны и их пружины — все для максимальной мощности и надежности в экстремальных условиях.
2. Заводская ходовая: Полностью карбоновая рама и задняя подвеска напрямую от гоночного прототипа! Легкость и прочность на новом уровне.
3. Высокотехнологичная подвеска: Передняя вилка WP XACT PRO 7548 и задний амортизатор WP XACT PRO 6748 с ручной настройкой сжатия/отбоя — полный контроль на любом рельефе.
4. Эксклюзивная комплектация:
* Заводские кевларовые бензобаки** (большой 31,5л + два малых по 7,5л) для огромного запаса хода.
* Карбоновые защитные элементы (крылья, защита руля, радиаторов).
* Легкосплавные колесные диски DID DirtStar с бескамерными покрышками Michelin Desert Race.
* Специальное сиденье Rally для комфорта на марафонских спецучастках.
* Датчик нейтрали (единственная "уступка" дорожной регистрации, легко снимается для гонок).
* Светодиодная фара (редкость для чисто раллийного байка!).
5. Внешний вид: Агрессивный дизайн в фирменных цветах KTM Factory Racing и личной графике Даниэля Сандерса. Выделяться будете не только скоростью!
💵 Цена и Доступность:
* Цена пока не объявлена (ожидайте премиальный сегмент).
* Производство ОЧЕНЬ ограничено (как и у предыдущих релизов).
* Старт продаж — июнь 2025 года.
#KTM#KTMRally#450Rally#ДаниэльСандерс#DakarRally#RallyReplica#Эндуро#РаллиРейд#Бездорожье#Мотоновинка2025#AdventureBike#HardEnduro#Мотоспорт#Экстрим