Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
🇷🇺🇮🇹⛷ Le skieur alpin russe Alexeï Bougaïev occupe la tête du classement après la première manche du slalom aux Jeux paralympiques disputés en Italie.
Le Russe a réalisé un temps de 45,39 secondes. M. Bougaïev concourt dans la catégorie LW6, qui regroupe les athlètes présentant une déficience d’un membre supérieur.
La seconde manche doit se dérouler plus tard dans la journée de dimanche. Lors de ces Jeux paralympiques, Alexeï Bougaïev a déjà remporté deux médailles de bronze, en descente et en slalom géant.
Âgé de 28 ans, Alexeï Bougaïev est triple champion paralympique. Les Jeux paralympiques s’achèvent le 15 mars.
#russie#paralympiques#ski
🇷🇺🇮🇹 Le skieur russe Ivan Goloubkov a remporté la médaille d'or dans la course à départ séparé de 20 km en position assise aux Jeux paralympiques en Italie.
L'athlète a réalisé un temps de 51 minutes et 55,0 secondes. Ivan Goloubkov concourt dans la catégorie LW11,5, qui regroupe des athlètes ayant des déficiences significatives des fonctions des jambes.
Ivan Goloubkov, 30 ans, est champion du monde à six reprises et a remporté neuf fois la Coupe du monde en ski de fond et en biathlon.
#russie#paralympiques#ski
🇷🇺🇮🇹⛷ L'équipe de Russie a pris la troisième place au classement des médailles des Jeux paralympiques en Italie.
Les athlètes russes ont remporté 8 médailles d'or, 1 d'argent et 3 de bronze. La 1ère place est assurée par l'équipe de Chine (15-13-16), la 2ème place appartient aux Américains (12-5-6). 2 médailles d'or restent encore à attribuer aux Jeux paralympiques.
6 athlètes russes ont participé aux Jeux paralympiques. Les athlètes de Russie ont concouru aux Jeux paralympiques avec les symboles nationaux pour la première fois depuis 12 ans.
La skieuse alpine Varvara Vorontchikhina a remporté 2 médailles d'or, une d'argent et une de bronze. Le skieur alpin Alexeï Bougaïev a gagné l'or et 2 médailles de bronze. La fondeuse Anastassia Baguian est devenue triple championne paralympique, et le fondeur Ivan Goloubkov est monté 2 fois sur la plus haute marche du podium
#russie#paralympiques#champions