Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Various Artists — Greek Folk Dances (Monitor Records, 1990)
#traditional#laika#bouzouki#Greece
Греческая народная музыка от различны малоизвестных ансамблей. Domna Samiou Ensemble – относительно известный среди них. Домна Самиу, руководительница коллектива, внесла довльно большой вклад в распространение греческой деревенской музыки в середине прошлого века. Альбом входит в серию Music Of The World, подготовленную Monitor Records.
🔗Spotify | AppleMusic
Grattons-Labeur — Le Bal Des Sorciers (ABA, 1977)
#traditional#dulcimer#guitar#lute#accordion#bouzouki#France
Grattons-Labeur — французский фолк-коллектив из города Орлеан, в котором в начале 70-х в качестве бэк-вокалистки начинала свою карьеру Даниэль Мессиа, известная во Франции певица. В 1977 году у Grattons-Labeur вышла запись "Le Bal Des Sorciers", "Бал чародеев". Музыка на альбоме исполнена в традиционном акустическом стиле.
Telegram
Your Hand In Mine — Garden Novels (Inner Ear, 2012)
#electronic#dream_pop#laika#theremin#bouzouki#accordion#Greece
Осенью 2012 года Your Hand In Mine выпустили альбом «The Garden Novels», вдохновленный путешествиями по английской и французской сельской местности, а также садами деревни Мелиссохори, расположенной под городом Салоники, где Your Hand In Mine проводили бесчисленные часы и дни. Название альбома не является метафорическим. Все композиции «The Garden Novels» сопровождаются рассказами, написанными участниками группы. Только на этот раз творческий процесс обратный по сравнению с их предыдущим альбомом, саундтреком к немому фильму Микио Нарусэ. Вместо украшения уже существующих образов, здесь сначала родилась музыка, а слова появились потом, чтобы расшифровать мелодии. Во время записи этого альбома скрипка Штроха, труба и аналоговый синтезатор Persephone присоединились к постоянно растущей коллекции необычных инструментов Your Hand In Mine.
Spotify | AppleMusic | Bandcamp
Tail Toddle — Tot Leeringhe Ende Vermaeck (Stoof, 1977)
#traditional#medieval#ballad#banjo#guitar#dulcimer#bouzouki#epinette#mandolin#Netherlands
Почти никому не известный единственный релиз коллектива Tail Toddler. Группа исполняла средневековые традиционные голландские баллады в сопровождении мандалины и флейты. Гравюра на обложке принадлежит перу Лукаса ван Лейдена и была выполнена в Амстердаме в 1524 году.
🔗Telegram