Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Smile is the only curve that sets things in straight line.
Harsh from Gujarat pens down a thought on smile...!!
Do you know what's satisfying?
When you make someone smile while they were crying.
That smile which holds fire to shine from within, But helplessness just dims their light within.
The smile that wants to burst out laughing,
But their situation insists them to shed another drop of tear.
We can just take a small initiative.
Don't show hatred towards anyone in their low
You never know, when that low might turn everything around.
If possible bring a smile on someone's face
The satisfaction you'll gain can't be expressed.
God's above seeing this, will smile too
And in your life you'll surely ace.
~Harsh
#review#smile
Smile is the only curve that sets things in straight line.
Harsh from Gujarat pens down a thought on smile...!!
Do you know what's satisfying?
When you make someone smile while they were crying.
That smile which holds fire to shine from within, But helplessness just dims their light within.
The smile that wants to burst out laughing,
But their situation insists them to shed another drop of tear.
We can just take a small initiative.
Don't show hatred towards anyone in their low
You never know, when that low might turn everything around.
If possible bring a smile on someone's face
The satisfaction you'll gain can't be expressed.
God's above seeing this, will smile too
And in your life you'll surely ace.
~Harsh
#review#smile