Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
😋😋Новинка X-RayPad Titanium U9 — в наличии!
🟠Titanium U9 Ultra 8 мм - 1.490₽
🟠Titanium U9 Air 8 мм - 1.250₽
🟠Titanium U9 Air 6.5 мм - 1.250₽
— Контрольные глайды U9 подходят для стеклянных и тканевых ковров, выпускаются в версиях Air (6.5/8 мм) и Ultra (8 мм). Все модели изготовлены из одинакового материала, при этом версия Ultra имеет большую выпуклость за счет дополнительной подкладки.
‼️Все модели доступны на ReShip.pro‼️
САЙТ • МЕНЕДЖЕР • #XRAYPAD
🤯Новые, буквально вечные глайды — X-RayPad Titanium U9:
🟠На картинке вы можете видеть ДО и ПОСЛЕ испытаний, в сравнении с другими моделями из PTFE и POM материалов.
🟠Испытания проводились на текстурированном стеклопаде, с разным давлением на глайды. Всего было произведено 5.000 движений, по итогам которых U9 только начали притираться, а Ptfe и Pom уже потеряли свой ресурс.
—Titanium U9 - это контрольные глайды, их можно использовать как на стеклянном, так и на тканевом ковре. Всего есть 3 вариации: U9 Air 6.5мм, U9 Air 8мм, U9 Ultra 8мм. Отличие Ultra от Air в дополнительной подкладке снизу для большей выпуклости, материал у всех версий одинаковый.
✏️Все модели доступны к предзаказу на нашем сайте ReShip.pro со скидкой!
САЙТ • МЕНЕДЖЕР • #XRAYPAD
🚩Универсальные Глайды-точки от X-RayPad
Огромный выбор по характеристикам, подойдут для любой моделимыши
📍JADE (Белые)
- Самые быстрые
- Материал PTFE
- Только для тканевых ковров
📍JADE AIR (Зеленые)
- Немного медленне
- Материал PTFE
- Более мягкие и плавные
- Подойдут для стеклопадов
📍OBSIDIAN (Красные)
- Контрольные на ткани и быстрые на стеклопадах
- Материал PTFE
- Твердые
📍OBSIDIAN AIR (Фиолетовые)
- По скорости как Obsidian
- Материал PTFE
- Более мягкие и более тихий звук на стеклопадх
📍OBSIDIAN PRO (Черные)
- Очень контрольные на ткани и на стеклопадах
- Материал UНМW-РЕ
- Твердые
- Лучше использовать для стекла
📍OBSIDIAN PRO AIR (Серые)
- По скорости как Obsidian Pro
- Очень контрольные на ткани и на стеклопадах
- Материал UНМW-РЕ
- Очень мягкие и тихие на стеклопадах
В комплекте идет 40 шт чего хватит на долго, две спиртовые салфетки и пластиковый треугольник для смены глайдов
ОФОРМИТЬ ЗАКАЗ • КАТАЛОГ • #XRAYPAD