Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
В заключительный день Паралимпийских игр в Париже #ParalympicsGB завоевали еще четыре медали, получив в итоге 124 медали - 49 🥇золотых, 44 🥈серебряных и 31 🥉бронзовую.
Таким образом, сборная Великобритании заняла второе место в таблице лидеров по медалям, уступив только 🇨🇳Китаю. Это третья подряд Паралимпиада, в которой 🇬🇧 Великобритания финиширует второй по количеству медалей.
#ParalympicsGB, спасибо 🫶 за все невероятные моменты в Париже!
Завтра в 21.00 по московскому времени начнется церемония открытия 🏆 Паралимпийских игр «Париж 2024», которые будут проходить с 28 августа по 8 сентября.
Игры ❗соберут 4400 спортсменов со всего мира, которые будут соревноваться в 549 медальных состязаниях по 22 видам спорта.
Xoтя спорт для спортсменов с ограниченными возможностями существует уже более 100 лет, широкое распространение он получил только в 1944 г., когда по просьбе британского правительства в больнице Сток-Мандевилл в Великобритании был открыт центр лечения травм 🩻 позвоночника.
Со временем реабилитационный спорт перерос в рекреационный, а затем и в соревновательный. Истоки паралимпийских игр находятся именно в 🇬🇧 Великобритании - Игры Сток-Мандевилл впоследствии стали Паралимпийскими играми.
Несмотря на то, что в Париже Олимпийские игры состоялись уже три раза (в 1900, 1924 и 2024 гг.), Паралимпийские игры этого года войдут в историю как 🥇первые летние Паралимпийские игры во Франции.
Желаем ✌️ удачи в Играх спортсменам Великобритании #ParalympicsGB!
Всего через неделю мы станем 👁️ свидетелями Паралимпийских игр 2024 года в Париже!
Как показывают исследования, успех Паралимпийских игр способствует повышению осведомленности общества и улучшению 🤝 понимания людей с ограниченными возможностями. По данным опросов, 70 процентов жителей Великобритании считают, что Паралимпийские игры 2012 года в Лондоне положительно повлияли на отношение к людям с ограниченными возможностями.
А знаете ли вы, что сборная команда Великобритании #ParalympicsGB - это международный лидер паралимпийских игр? Спортсмены Великобритании вошли в тройку лидеров по числу медалей уже на 6 Паралимпийских играх подряд. Более того, на Паралимпийских играх в Токио три года назад паралимпийцы Великобритании установили 🚀рекорд, завоевав медали в 18 видах спорта!
Но несмотря на то, что игры еще не начались, уже достигнуто многое. В этом году в сборной #ParalympicsGB самая высокая доля женщин-спортсменок - 46 процентов из 215 участников❗ Это самая высокая доля женщин-спортсменок в сборной Великобритании за всю историю, и даже большее гендерное равенство, чем в Токио-2020.
Будете ли вы следить за Паралимпийскими играми❓
#ParalympicsGB | #Paralympics | #Paris2024