Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
#VideoOfTheDay
🇷🇺🇨🇳 President of the People’s Republic of China Xi Jinping and President of Russia Vladimir Putin met in Beijing, with an official welcome ceremony held ahead of the Russia-China talks.
#RussiaChina
📹#VideoOfTheDay
🇷🇺🇨🇺🤝 Foreign Minister Sergey Lavrov greets Minister of Foreign Affairs of Cuba Bruno Rodríguez Parrillaahead of bilateral talks in Moscow.
#RussiaCuba
#VideoOfTheDay
🇷🇺🇨🇳 President of the People’s Republic of China Xi Jinping and President of Russia Vladimir Putin met in Beijing, with an official welcome ceremony held ahead of the Russia-China talks.
#RussiaChina
#VideoOfTheDay
🤝 Russia's Foreign Minister Sergey Lavrov greets External Affairs Minister of India Dr Subrahmanyam Jaishankar at the Russian MFA Reception House in Moscow ahead of talks earlier today
🇷🇺🇮🇳#RussiaIndia#DruzhbaDosti
#VideoOfTheDay
🤝 Russia's Foreign Minister Sergey Lavrov greets External Affairs Minister of India Dr Subrahmanyam Jaishankar at the Russian MFA Reception House in Moscow ahead of talks earlier today
🇷🇺🇮🇳#RussiaIndia#DruzhbaDosti
🤩🤩🤩#BRICS2024
The XVI #BRICS Summit is a go!
On #Day1 President of Russia Vladimir Putin held bilaterals with President of China Xi Jinping, Prime Minister of IndiaNarendra Modi, President of South Africa Cyril Ramaphosa, President of Egypt Abdel Fattah el-Sisi and President of the New Development Bank Dilma Rousseff.
🎼 In the evening the Heads of delegation attended a concert and an informal dinner in honour of the Leaders of the #BRICS countries.
📹#VideoOfTheDay
Fresh morning energy boost from Mother Nature..💚🌱☀️🙏🏻
..Среди нас есть те,кто говорят «мне скучно.Позвольте доказать Вам обратное!Мир неповторим каждую секунду,запоминайте его разным,не упускайте его,знакомьтесь с ним каждый раз как первый!Он единственный такой в своем роде!Впитывайте в себя все его краски!Дышите им,ешьте глазами,слушайте ушами,впускайте в сердце и душу..и не отпускайте никогда!Доброе утро Мир!Доброе утро Дорогие МираПланетяне!
P.S.-отмечайте всех,кому бы Вы хотели пожелать доброго утра и природу на завтрак🕊️🤍😉
#goodmorning#sundayfunday#sundayvibes#mothernature#planetearth#heavenonearth#hooponopono#purelove#video#videooftheday#adventure#ancestors#sister#sisterhood#доброеутро#всемотличногонастроения#positivevibes#levitation#beauty#nature#travelling#petitefemme#mira#мирославакарпович#женщинамира#sun#water#air#earth#fire