Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
BEPUL online kurslar bilan kelajagingizni o‘zgartiring!
AI, Python, Marketing yoki Excel — qaysi yo‘nalishda rivojlanmoqchi bo‘lsangiz ham, bu kurslar siz uchun!
𝗙𝗥𝗘𝗘 𝗖𝗘𝗥𝗧𝗜𝗙𝗜𝗘𝗗 𝗖𝗢𝗨𝗥𝗦𝗘𝗦
🔘 Dunyo bo‘ylab minglab o‘quvchilar tavsiya qilgan
🔘 Sertifikatga ega bo‘lasiz
🔘 To‘liq bepul!
🔗Kurslar ro‘yxati bu yerda:
https://pdlink.in/49UMXbO
↗️ Foydali deb bilsangiz, do‘stlaringiz bilan ulashishni unutmang!
#bepulkurslar#sertifikat#onlinetalim#kelajakuchun
💻@dasturlash_hayoti — bir xatoni tuzatib, ikkinchisiga tayyorlanish! 😅
BEPUL online kurslar bilan kelajagingizni o‘zgartiring!
AI, Python, Marketing yoki Excel — qaysi yo‘nalishda rivojlanmoqchi bo‘lsangiz ham, bu kurslar siz uchun!
𝗙𝗥𝗘𝗘 𝗖𝗘𝗥𝗧𝗜𝗙𝗜𝗘𝗗 𝗖𝗢𝗨𝗥𝗦𝗘𝗦
🔘 Dunyo bo‘ylab minglab o‘quvchilar tavsiya qilgan
🔘 Sertifikatga ega bo‘lasiz
🔘 To‘liq bepul!
🔗Kurslar ro‘yxati bu yerda:
https://pdlink.in/49UMXbO
↗️ Foydali deb bilsangiz, do‘stlaringiz bilan ulashishni unutmang!
#bepulkurslar#sertifikat#onlinetalim#kelajakuchun
💻@dasturlash_hayoti — bir xatoni tuzatib, ikkinchisiga tayyorlanish! 😅
Free English Language Courses at Green University!
▶️Green University continues to implement another important initiative aimed at supporting young people. Free English language courses have been launched for youth in need of social support and are currently being actively conducted at the university by tutor Shokhrukh Obidov.
💡These courses are designed to enhance participants’ knowledge and skills, with a particular focus on developing fluency in English communication. Classes are delivered using modern, interactive methods, helping learners strengthen their speaking, listening, and grammatical competencies.
#GreenUniversity#FreeCourses#EnglishCourses#Youth#Education _________________
Green University'da bepul ingliz tili kurslari yo‘lga qo‘yildi!
▶️Green University tomonidan yoshlarni qo‘llab-quvvatlashga qaratilgan yana bir muhim tashabbus amalga oshirilmoqda. Universitetda ijtimoiy qo‘llab-quvvatlashga muhtoj yoshlar uchun bepul ingliz tili kurslari yo‘lga qo‘yilgan va hozirda tyutor Shoxrux Obidov tomonidan faol tarzda olib borilmoqda.
💡Mazkur kurslar yoshlarning bilim va ko‘nikmalarini oshirish, ayniqsa ingliz tilida erkin muloqot qilish qobiliyatini rivojlantirishga qaratilgan. Darslar zamonaviy va interaktiv usullar asosida olib borilib, tinglovchilarning nutqiy, eshitib tushunish va grammatik bilimlarini mustahkamlashga xizmat qiladi.
#GreenUniversity#BepulKurslar#EnglishCourses#Yoshlar#Ta’lim
✉️[email protected]
☎️ +998 55 512 00 77
📍Location
🌐Website | 📱Telegram | 📱Instagram | 📱LinkedIn | 🟥YouTube