Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
🚢В Китае спущен на воду новый гибридный аварийно-спасательный буксир Австралии.
Китайская верфь Rizhao Gangda Shipbuilding Heavy Industry спустила на воду гибридный аварийно-спасательный буксир "Reef Responder", который будет эксплуатироваться Boluda Towage Australasia по контракту с Australian Maritime Safety Authority (AMSA).
Проект разработан канадской компанией Robert Allan Ltd. Длина судна 65 метров, тяговое усилие 120 тонн, что на 46% превышает показатели ранее эксплуатируемого "Coral Knight". Оснащение включает двигатели MAN, винторулевые колонки Brunvoll с регулируемым шагом, систему DP2, генераторы Cummins, пожарные насосы и кран Melcal.
Судно планируется ввести в эксплуатацию в районе пролива Торреса и Большого Барьерного рифа в рамках 10-летнего контракта на аварийное реагирование. Помимо буксировки, судно будет обеспечивать обслуживание навигационных средств.
📌Boluda Towage Australasia входит в испанскую группу Boluda Corporación Marítima, основанную в 1837 году. Компания контролируется семьёй Болуда (Boluda) - это полностью частная компания, контролируемая испанским предпринимателем Висенте Болуда Фосом (Vicente Boluda Fos) и его семейной группой. Компания не является государственной и не котируется на бирже.
#tugboats#ETV#hybridvessel#Australia#maritimesafety
🚢Tug Network Team расширяется в Европе через Fairplay Towage.
Международный альянс буксирных операторов Tug Network Team (TNT) объявил о расширении в Европе благодаря присоединению гамбургской компании Fairplay Towage.
После присоединения Fairplay сеть TNT охватывает 113 портов в 13 странах и объединяет флот состоящий из более чем 200 буксиров.
Альянс, изначально созданный в 2024 году компаниями Group Ocean, Sulnorte и CPT Towage, был ориентирован на рынок Америк и теперь получает полноценное присутствие в Европе.
Fairplay Towage работает в 24-х европейских портах, включая Германию, страны Балтии, Польшу, Нидерланды и Бельгию, и располагает флотом более 100 современных буксиров**.
Участие компании усиливает сеть независимых буксирных операторов и расширяет доступ судовладельцев к буксирным услугам в ключевых портовых регионах.
Для портовой отрасли расширение TNT отражает тенденцию к консолидации и созданию глобальных сетей независимых операторов, способных конкурировать с крупными международными буксирными группами.
📌Fairplay Towage Group — немецкая буксирная компания, основанная в 1905 году в Гамбурге, одна из старейших компаний в секторе портового буксирного обслуживания.
Компания является частной и принадлежит группе Fairplay Towage Holding - входит в структуру частной группы под контролем семьи Кюне, то есть связана с Kühne Holding / Klaus-Michael Kühne.
#Towage#Ports#Tugboats#Fairplay#MaritimeServices