Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
🇳🇱Un incendie sur un terrain d’entraînement militaire aux Pays-Bas a ravagé environ 500 hectares. Les opérations d’extinction sont compliquées par le risque d’explosions de munitions, indique le site Hart van Nederland.
#paysbas#incendie
🇳🇱 Cinq personnes ont été blessées à la suite d’une fuite de gaz suivie d’un important incendie dans une école de la ville néerlandaise d’Oosterhout, rapporte le journal Algemeen Dagblad.
#paysbas#incendie#victimes
🇳🇱 La marche commémorative Régiment immortel a eu lieu à Amsterdam, rassemblant des dizaines de personnes venues de tous les coins des Pays-Bas, rapporte la correspondante de TASS.
#paysbas#marche
🇳🇱 Une manifestation contre l’augmentation des dépenses militaires et la politique de militarisation du gouvernement néerlandais s’est déroulée dans le centre de la Haye, devant le ministère de la Défense. Environ 100 personnes y ont participé.
#paysbas#manifestation#défense
🇳🇱 Un incendie naturel a ravagé un terrain militaire aux Pays-Bas, a indiqué le site NU.nl.
Face à une sécheresse de trois semaines et à l'absence totale de précipitations sur la majeure partie du territoire, un risque élevé d'incendies naturels avait été signalé ces derniers jours dans plusieurs provinces, notamment le Gueldre.
#paysbas#incendie#terrain
🇳🇱 Aux Pays-Bas, des manifestations contre le déploiement d'un camp de réfugiés ont lieu pour le quatrième jour consécutif, la police a interpellé treize personnes, rapporte le journal Algemeen Dagblad.
Vidéo: HEAD-POST/Х
#paysbas#manifestations#réfugiés