Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
¿Que puede hacer este bot?
@EmailGateBot
EmailGateBot asigna una dirección de correo electrónico especial a los canales y grupos de Telegram y publica los mensajes enviados a este correo electrónico en ellos. EmailGateBot no requiere acceso a sus cuentas de correo electrónico. El bot no requiere derechos de administrador en grupos y es gratuito para uso personal.
Idiomas: inglés ruso
(Visto en @botsgram_cu)
#correo#notificaciones
¿Que puede hacer este bot?
@NoticeboardXBot
Utilizando este Bot, puede crear un mensaje de aviso o noticia en tu grupo que puede ser editado por cualquiera de los administradores
Idioma: inglés
(Visto en @botsgram_cu)
#notificaciones#noticias#grupos
¿Que puede hacer este bot?
@compexbot
Compex es un administrador de notificaciones financieras. Úselo para crear alertas para monedas criptográficas, fiduciarias y metales preciosos.
Idiomas: inglés
(Visto en @botsgram_cu)
#crypto#notificaciones#mercado
¿Que puede hacer este bot?
@crssbot
Este bot crea un feed RSS para su canal en Telegram.
Idiomas: inglés, ruso, portugués, alemán
(Visto en @botsgram_cu)
#rss#canales#notificaciones#feed
¿Que puede hacer este bot?
@ChannelUsersBot
Este bot te envía un mensaje cada vez que un usuario se une o sale de tu canal
Idiomas: inglés
(Visto en @botsgram_cu)
#canales#h#notificaciones#alertas
@BirthdayReminderBot
Qué puede hacer este bot?
Este bot recordará el cumpleaños de la gente en grupos y mucho más
Idioma: Inglés, Italiano
(visto en @BotsGram_cu)
#social, #birthday, #reminder, #alarm, #recordar, #notificaciones