Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
The Royal Game of Ur: Ancient Mesopotamia’s Board Game was rediscovered in the tombs of Ur. Although we might have lost part of the original gameplay, it is still played after 4,600 years.
The picture on top includes the rules, don't forget to decipher them before playing.
[Click here to learn more]
[click here to play for free]
@googlefactss#history#boardgames
Как проходят игротеки PandaSale в Кластере С52?
Смотрите видеоролик с прошедшей, ведь лучше увидеть!
А самое лучшее - принять участие в следующей, которая состоится 22 февраля 🐼
Адрес: Кластер С52, ул. Суворова, 52 А (Центр)
Всем Креатива ✌
#Игротека#НастольныеИгры#BoardGames
Представь, что ты не просто играешь в игру, а сам становишься героем фантастической истории! Ты можешь быть храбрым рыцарем, могущественным магом или ловким вором. Ты можешь исследовать древние замки, сражаться с драконами и искать сокровища. Все это и многое другое возможно в игре Dungeons & Dragons (D&D)!
Ждём тебя в ближайшую субботу на игре ДнД для подростков.
⏰Дата и время: 12 октября (суббота), 12:00.
👦Возраст: от 10 лет
🏠Место: @Bishkek_gamezone (Матросова 41, 2 этаж).
💰Стоимость: 700 сом (предоплата 200 сом).
🧙♂️Мастер: Сардар
Запись: обязательна.
Не упусти свой шанс стать легендой!
#ДнД#dnd#D&D #настольныеигры#dndteens#приключения#boardgames#funny#adventure
🇺🇿◽️2️⃣2️⃣2️⃣
Level Up Your Life!
Bored? Feeling stuck? ➡️ Level up your LIFE with CHESS! ♟ Our Chess Club isn't just about moving pieces; it's about strategy, friends, & unlocking YOUR potential! 💪
Whether you're a total beginner 👶 or a grandmaster in disguise 🕵️♂️, we welcome ALL skill levels.
What are you waiting for? 🤔
https://tally.so/r/mJQNq7
◽️🔤🔤🔤🔤🔤🔤🔤🔤🔤🔤
🇺🇿Inha yoshlar ittifoqi
Join us on social media
🌐Telegram | 🌐Instagram
#ChessClub#Chess#BoardGames#Strategy#NewMembersWelcome#Fun#BrainPower#GameOn#ChessLife