Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
L’Ucraina si trova a fare i conti con la situazione peggiore della sua storia post-sovietica. In tale contesto la popolarità dell’ex comico Zelenskij è ai minimi dalla sua elezione alla presidenza: la sua presa sulla struttura istituzionale traballa insieme al precario equilibrio del paese, quantomai instabile.
La mia analisi per l'Atlante geopolitico di Treccani.
#ucraina#europa#russia#mondo
https://www.treccani.it/magazine/atlante/geopolitica/Zelenskij_indebolito.html
A Kiev (Ucraina) si è svolta una manifestazione - autorizzata dalle autorità locali e quindi perfettamente legale - per commemorare la divisione “Galizia”, la formazione delle SS in cui erano inquadrati i collaborazionisti ucraini durante l'operazione Barbarossa e l'occupazione nazista dell'Ucraina.
Se una percentuale, anche piccola, degli esponenti politici italiani che non più tardi di cinque giorni fa hanno commentato a vario titolo l'anniversario del 25 aprile volesse prenderne coscienza e spendere una parola a riguardo, questo potrebbe giovare alla loro credibilità, ma soprattutto risultare un poco più rispettoso nei confronti della storia del nostro paese.
#italia#ucraina#mondo#europa
Uno scorcio del confine tra Armenia ed Iran: il territorio iraniano comincia appena oltre il fiume che scorre sotto la strada. Sul lato opposto di questa, quello che resta della vecchia ferrovia che in epoca sovietica collegava la regione del Nakhcivan all'Azerbaijan attraversando la punta meridionale dell'Armenia.
#armenia#caucaso#europa#asia#mondo
Sulle alture rocciose di Meghri, villaggio nella punta meridionale dell'Armenia. Sullo sfondo, già oltreconfine, le montagne dell'Iran settentrionale.
#armenia#caucaso#europa#asia#mondo