Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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 s’est déclaré dans l’hôtel Bristol, à proximité du palais de l’Élysée à Paris, faisant un blessé et entraînant l’évacuation de 400 personnes, a rapporté BFMTV, citant le maire du VIIIe arrondissement.
#paris#hôtel#incendie
🇱🇧🇮🇱Au moins quatre personnes ont été tuées et dix autres ont été blessées dans une frappe israélienne contre un hôtel du centre de Beyrouth, a rapporté la chaîne de télévision Al Jazeera, citant le ministère libanais de la Santé.
Quatre personnes ont été tuées et dix autres ont été blessées dans une frappe israélienne contre un appartement de l'hôtel Ramada à Beyrouth,
est-il indiqué.
#israël#liban#frappes#hôtel
🇦🇪 Un missile est tombé à côté de l’hôtel cinq étoiles Fairmont The Palm à Dubaï, provoquant un violent incendie sur place, a rapporté à TASS un témoin oculaire.
Il y a eu une forte explosion près de l’hôtel, un incendie s’est déclaré sur place et un énorme panache de fumée noire s’élève. La défense aérienne continue de fonctionner,
a déclaré l’interlocuteur de l’agence.
#dubaï#missile#hôtel
🇵🇰🇺🇸🇮🇷 L’hôtel Serena à Islamabad se prépare à accueillir des délégations des États-Unis et de l’Iran, attendues dans la capitale pakistanaise pour des négociations. C’est ce qu’a indiqué à un correspondant de TASS un employé de l’établissement.
#hôtel#délégations#pourparlers