Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Field research fellowship
If you're a UPSC student and thinking about a Plan B, this could be the perfect opportunity for you. Data Analytics for Public Policy Fellowship is a 2 months , fully online program that allows you to explore the world of quantative research methods. It's a great way to test your interests and see if research could be your Plan B. The program runs from 5th January to 15th March 2025, and you won't need to travel for fieldwork—everything can be done in your own neighborhood. With limited seats, this is a chance to explore new opportunities without a long-term commitment. Apply by 4th January.
https://iisppr.org.in/data-fellowship/
#UPSC#CareerPlanning#Fellowship#NewOpportunities
Field research fellowship
If you're a UPSC student and thinking about a Plan B, this could be the perfect opportunity for you. The IISPPR Field Research Fellowship is a one-month, fully online program that allows you to explore the world of qualitative research methods. It's a great way to test your interests and see if research could be your Plan B. The program runs from September 1 to 30, 2024, and you won't need to travel for fieldwork—everything can be done in your own neighborhood. With limited seats, this is a chance to explore new opportunities without a long-term commitment. Apply by August 15
https://iisppr.org.in/
#UPSC#CareerPlanning#Fellowship#NewOpportunities
Field research fellowship
If you're a UPSC student and thinking about a Plan B, this could be the perfect opportunity for you. The IISPPR Field Research Fellowship is a one-month, fully online program that allows you to explore the world of qualitative research methods. It's a great way to test your interests and see if research could be your Plan B. The program runs from September 1 to 30, 2024, and you won't need to travel for fieldwork—everything can be done in your own neighborhood. With limited seats, this is a chance to explore new opportunities without a long-term commitment. Apply by August 15
https://iisppr.org.in/
#UPSC#CareerPlanning#Fellowship#NewOpportunities
Field research fellowship
If you're a UPSC student and thinking about a Plan B, this could be the perfect opportunity for you. The IISPPR Field Research Fellowship is a one-month, fully online program that allows you to explore the world of qualitative research methods. It's a great way to test your interests and see if research could be your Plan B. The program runs from September 1 to 30, 2024, and you won't need to travel for fieldwork—everything can be done in your own neighborhood. With limited seats, this is a chance to explore new opportunities without a long-term commitment. Apply by August 15
https://iisppr.org.in/
#UPSC#CareerPlanning#Fellowship#NewOpportunities