Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Внимание! #Розыск!
Друзья! А помогите мне, пожалуйста, а? Сегодня, около 11:00, мой автомобиль #Mercedes, который стоял на парковке возле Novus на Святошино, поддался жесткому сношению со стороны бляховода на #Volkswagen#Passat (часть номера 1055 LT). Конечно же, с места оно сразу же уехало. Прошу вас помочь мне найти виновника и наказать (по всей строгости закона, конечно же). Может, это чей-то сосед или надоедливый родственник. Сделайте репост, пожалуйста.
Всё просто - просто въехал и просто уехал
Видео: https://youtu.be/KXV4jXnQSZw
Внимание! #Розыск!
Друзья! А помогите мне, пожалуйста, а? Сегодня, около 11:00, мой автомобиль #Mercedes, который стоял на парковке возле Novus на Святошино, поддался жесткому сношению со стороны бляховода на #Volkswagen#Passat (часть номера #PP1055H ). Конечно же, с места оно сразу же уехало. Прошу вас помочь мне найти виновника и наказать (по всей строгости закона, конечно же). Может, это чей-то сосед или надоедливый родственник. Сделайте репост, пожалуйста.
Фото тут: https://www.facebook.com/KyivOperativ/posts/466387360424022
🚗✨Introducing the All-New Volkswagen Passat in China!🇨🇳
Say hello to the latest sedan that combines sleek design with innovative features! While it may resemble the European wagon, the Chinese Passat boasts a unique look with aggressive bumpers and stylish black accents. 😍
🌟Key Features:
- 11.6-inch Passenger Display for ultimate entertainment! 📱
- Convenient Seat Adjustment Button for rear passengers to maximize comfort! 🪑
Under the hood, choose between two powerful turbo engines:
- 1.5L with 160 hp ⚡️
- 2.0L with 220 hp 🚀
🗓️Sales Begin on September 10th!
#Volkswagen#Passat#NewRelease#China#CarEnthusiasts#Innovation#LuxuryOnWheels#Auto