Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
#QNT/USDT analysis :
#QNT is currently in a correction phase. Price is expected to decline further and test the previous swing high support level before continuing its bullish momentum. It’s advisable to wait for the price to retest the previously respected zone for a short entry, as the price is anticipated to decline and test lower levels.
TF : 1D
Entry : $126
Target : $81
SL : $156
#QNT/USDT analysis :
#QNT is currently in a downtrend, trading below the 200 EMA. The price is likely to retrace and test the resistance zone before continuing its bearish momentum. The current swing low is expected to be tested.
TF : 1H
Entry : $70.4
Target : $66.5
SL : $72.5
#QNT broken down the trendline on 12H Time frame,we expect another dump after pullback,more correction incoming..👀
❄️@signals_bitcoin_crypto❄️
❄️@Shadow_support0o❄️
📊#QNT price break below the $97 major support area. The last hope is the $90 support level; if the price breaks below this, we see a heavy selloff. Price needs to reclaim the $100 level to gain some positive movement. It is better to wait for some time to open new trades.⌛️
❄️@signals_bitcoin_crypto❄️
❄️@Shadow_support0o❄️
#QNT/USDT UPDATE:
#QNT is now trading around 106$. #QNT is moving inside a symmetrical triangle on 4hr time frame. So the Possible scenarios are If the price pumps up and breaks out of the triangle, we can see bullish momentum in it. Otherwise If the price dumps and breaks down of the triangle, we can see bearish momentum in it. Stay tuned with us for further updates✔️
#Do You Know Your Crypto Logos? #XEC#QNT#BSV#ENJ#KCS#ZEC
#cryptogemtokenshttps://cryptogemtokens.com/do-you-know-your-crypto-logos-xec-qnt-bsv-enj-kcs-zec/