Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Frontline: Truck Simulator
🆕Симулятор тягача, где вам предстоит доставлять важные грузы на фронт во времена Второй мировой войны: от медицинских средств до техники и боеприпасов, в условиях сложной боевой обстановки.
⚙️Мод на деньги (бесплатные покупки). Кэш встроен в установщик.
#Симуляторы@pm_plus
#Frontline@pm_plus
📱Play Market +
⚡️ НАШ ЧАТ
🚢Frontline фиксирует рекордную годовую ставку VLCC на фоне активности Mercuria.
Связанная с Джоном ФредриксеномFrontline установила новый ориентир на рынке годовых тайм-чартеров танкеров типа VLCC.
По данным брокерских источников, один из танкеров постройки 2019 года зафиксирован по ставке $110 000 в сутки.
Контракт сроком 12 месяцев оценивается примерно в $40 млн и отражает беспрецедентную конъюнктуру рынка крупнотоннажных танкеров. Сделка связана с активностью трейдера Mercuria, усиливающего флот под текущие торговые потоки.
Рост периодных ставок подтверждает переход части фрахтователей от спотовой экспозиции к закреплению тоннажа на фиксированных условиях. Для судовладельцев это возможность зафиксировать денежный поток на исторически высоких уровнях, снижая волатильность спота.
Рынок крупнотоннажных нефтетанкеров VLCC демонстрирует структурный дефицит доступного флота на фоне высокой загрузки экспортных маршрутов из ключевых нефтяных регионов.
📌Frontline plc — международная танкерная компания, основанная в 1985 году. Специализируется на эксплуатации танкерного флота типа VLCC, Suezmax и LR2. Компания зарегистрирована на Кипре, акции обращаются на NYSE и бирже Осло; крупнейшим акционером является норвежский предприниматель Джон Фредриксен.
#VLCC#Frontline#Tankers#TimeCharter#OilShipping