Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
🎙 INVEST REPORT Announce #FINEproject update
#FINE is Trending first in Dextool. Reaching out Millions of investors.
👉 Order dextool Trend starting with 6500$ per 24 hours
1️⃣ Dextool trending working
2️⃣ Big marketing Campaign incoming
3️⃣ Reached 30 mil mcap 🔜 50 Mil $ Mcap
We announced at 9 mil $ Mcap. We just hit 30mil $ mcap and we are getting closer to 100,000,000 Mcap.
At the moment we made for you 230% Profit
⚠️Always do your own research and due diligence when considering your participation in any blockchain project.
🎙 NEW GEM #FINE
I think here is big potential to grow, marketing incoming. 🆘Be careful, put small bag here.
Marketcap: 9.5 MIL $
Price now: 0.000000023618598849591634 $
1️⃣Dextool trending working, order Dextool Trending
2️⃣Big marketing Campaign incoming
✅ More information
Telegram: https://t.me/+YIevhi57q2phY2Y6
Website:https://www.finerc.vip/
👉 BUY HERE: https://www.dextools.io/app/en/ether/pair-explorer/0xb54ce26f2e30f64c5b684b141311ce138ab5e00e
🧨 Push cooperating with@Whales100xsignals
#MEMECOIN#GEM
The increase in fines for a number of traffic violations will come into force on January 1, 2025
📌"In Article 2, the word" Law "should be replaced with the words "Federal Law", the words "after thirty days from the date of its official publication" should be replaced with the words "from January 1, 2025," the text of the amendment posted in the Duma electronic database says.
📌Under this law, failure by a driver to perform the duty to insure his civil liability, as well as driving a vehicle, if the Compulsory third Party Insurance (CTP) policy is deliberately absent, entails the imposition of an administrative fine in the amount of 800 rubles.
📌Earlier, the Parliament of the Kabardino-Balkar Republic submitted to the State Duma a bill that proposes to establish a fine for repeated violation of the Administrative Code of the Russian Federation, namely the absence of a driver's CTP policy, up to 5 thousand rubles.
CTP policy means Compulsory Third Party Insurance Policy
#news#russia#nido_russia#traffic#fine#regulations
https://t.me/nido_russia