Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
✨ Unlock the Power of Keywords in Nicegram!
Tired of digging through endless chats to find that one important message? We hear you! Your search struggles are officially over!
How it works:
1️⃣ Search for a word in Keyword tab → Save it as a Keyword Chat.
2️⃣ Open it anytime — all messages with that keyword appear instantly!
3️⃣ Add multiple keywords to a single chat for even smarter organization.
4️⃣ All your Keyword chats live neatly in a 📁 "Keywords" folder!
Perfect for:
✔️ Work (#Deadline)
✔️ Recipes (#DinnerIdeas)
✔️ Important links (#Download)
What’s the first keyword you’ll save? Tell us below!
👉Share in X: click here
Download Nicegram:
🛒AppStore | 🛒GooglePlay
Join Chat:
🇬🇧EN Chat | 🇷🇺RU Chat
Follow us:
✖️X | 📹YouTube
Website |Features | Navigation
# Очередной гастрономический эксперимент от #СибирскаяТрапеза🍽️🔥
## Говяжьи рёбра в собственном соку с овощами гриль 🌟
Хотите попробовать нечто особенное?
Представляю вашему вниманию новый кулинарный шедевр от нашей команды: говяжьи рёбра, приготовленные особым способом!
### Как мы готовили блюдо:
1. ☀️Маринад: Рёбрышки замаринованы с добавлением ароматных овощей гриль и натурального вкуса вакуумирования.
2. ✨Су-вид: После маринования, рёбра отправляются в путешествие на 14 часов в режим "томления", сохраняя сочность и нежность мяса.
3. 🧈Финальный штрих: Сок и овощи блендируются с чесноком, придавая блюду насыщенный вкус и тонкий аромат.
4. 🔥Обжарка: Под конец приготовления рёбра слегка обжариваются на гриле, создавая аппетитную хрустящую корочку.
5. 🌿Подача: Блюдо украшается свежей зеленью и подается с собственным уникальным соусом. А гарнир каждый выбирает себе по вкусу 😉
---
P.S. Если хотите сохранить удовольствие надолго, наши повара готовы предложить вам специальное решение: реторт-пакетирование. Мясо вместе с соусом аккуратно упаковывается в прозрачную упаковку, проходит стерилизацию и готово радовать вас долгое время!
Желаем приятного аппетита и новых ярких вкусов! 💛✨
---
⭐ _Подписывайтесь на нашу страницу и следите за новыми рецептами._
_Экспериментируйте дома и наслаждайтесь каждым кусочком!_
#гастроэксперимент#мясо#грилль#говядина#рецепт#поварскиехитрости#гастротренд#еда#обожаюготовить#povarskiehitrosti#edablog#instafood#tasty#vscofood#goodfood#cooking#lovecooking#myrecipe#recept#mystory#dailyfood#meat#steak#ribs#grillveggies#sousvide#chefsecrets#dinnerideas#cuisineinspiration