Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
😘 New airdrop ~ Ratcoin Network
🟢
💲 Reward: 100,000,000 $RAT worth of (~$1600) ➕ per each get referral: 25,000,000 #RAT ($400)
💎 Presents Ratings: 😀😀😀
🛒 Pre-sale link: Ratcoinrat.network
👑Winners: All Random lucky participants + The top 150 referrals will each get more #RAT tokens.
➡️ Airdrop Bot For RatCoin Network
↪️ Join Telegram Group
↪️ Join Telegram Channel
↪️ Follow Twitter, like and retweet the pinned post.
↪️ Submit your details to the airdrop Bot.
ℹ️ Distribution date: announced by the project After TGE .
Что такое RAT?
RAT (Ram Air Turbine) — это турбина набегающего потока воздуха, предназначенная для аварийного питания самолёта. Она выдвигается автоматически или вручную из фюзеляжа или крыла и начинает вращаться за счёт набегающего потока воздуха.
RAT используется в экстренных случаях, когда выходит из строя основное электроснабжение (например, при отказе обоих двигателей). В таких ситуациях RAT обеспечивает энергией:
⏺авионику
⏺электроприводы,
⏺одну из гидросистем,
⏺систему управления полётом (Fly-by-Wire).
Рейс Air Transat 236 (2001 год) — Airbus A330 потерял топливо из-за утечки и лишился обоих двигателей над Атлантикой. Благодаря автоматическому развертыванию RAT, экипаж смог сохранить контроль над самолётом, выполнить планирование на 120 км и успешно посадить лайнер на Азорских островах. Никто не погиб.
📌Хотя RAT компактная — диаметром около 30–80 см — она способна генерировать десятки киловатт энергии, чтобы спасти самолёт. Однако она не обеспечивает питание всех систем — только критически важных.
RAT — это скрытый герой авиационной безопасности. Хотя она используется крайне редко, наличие этой системы может стать решающим фактором в спасении пассажиров и экипажа в случае полной потери энергии.
Лёгкое небо
#aviation#ГА#RAT
🌎 The naked mole-rat, native to East Africa, can survive for up to 18 minutes without oxygen by switching to a unique sugar-based metabolism. Unlike most mammals, it is also resistant to cancer and feels little pain from acid or capsaicin due to genetic adaptations in its nerve cells. ✨
#mole⚡#rat⚡#adaptation⚡#mammals
👉subscribe Interesting Planet
👉more Channels