Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
📢 Campagne d’affichage en soutien à la Russie 🇷🇺
Face à l’attentat contre l’ambassade de Russie à Marseille, nous avons lancé une campagne d’affichage pro-russe en riposte. La Russie n’est pas notre ennemie.
D’un côté, un acte de violence contre une mission diplomatique. De l’autre, un pays qui n’a jamais pris d’initiative hostile envers nous. Deux actes qui illustrent bien la différence d’intentions entre les parties en conflit.
Il est temps d’ouvrir les yeux et de sortir du narratif imposé.
#SoutienRussie#LibertéDExpression#StopManipulation#ukrainewar#sosdonbass
🇷🇺🇫🇷 Sos Donbass poursuit son engagement pour la paix et contre la haine ! ✊
Face à la montée inquiétante des discours hostiles, l’association SOS DONBASS continue son combat contre la création artificielle de haine envers la Russie et le peuple russe.
Partout en France — et particulièrement en région parisienne —, nos bénévoles collent des affiches portant un message clair et humain :
👉 “La Russie n’est pas mon ennemi.”
Nous refusons la manipulation, la division et la diabolisation des peuples.
Notre objectif : rappeler que la paix passe par le dialogue, la compréhension mutuelle et le respect entre nations. 🌍
🖼️ Les affiches sont en libre accès sur notre site www.sosdonbass.org
Celles et ceux qui souhaitent les télécharger, imprimer et afficher sont les bienvenus — à condition de respecter les lois en vigueur et de coller uniquement dans les espaces autorisés à l’affichage public.
Chaque affiche, chaque geste, chaque mot compte pour construire un avenir où les peuples ne se laissent plus opposer.
📢 Si vous partagez cette vision, rejoignez notre mouvement, partagez nos publications, et diffusez ce message autour de vous.
Ensemble, défendons la paix, la vérité et l’unité entre les peuples.
#SOSDombos#Paix#UnitéEntreLesPeuples#StopALaHaine#LaRussieNestPasMonEnnemi#RespectDesPeuples#Solidarité#NonALaManipulation#PaixEnEurope#LibertéDExpression