Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Дорогие друзья!
Союз Отцов России - важная общественная организация, объединяющая лучшие семьи нашей страны! Мы хотим, чтобы в ваших домах царила чистота и красота, наш постоянный партер социальных проектов компания SYNERGETIC помогает вам в этом.
Средства для стирки и уборки, уход за телом и товары для малышей - весь ассортимент экологичных моющих средств и натуральной косметики по самым выгодным ценам вы можете найти на сайте synergetic.ru со специальным ПРОМОКОДОМ.
Движение Союз Отцов России набирает обороты, и мы рады предложить нашим активистам, сторонникам и членам их семей продукцию компании SYNERGETIC с дополнительной скидкой до 7%.
⁉️Что для этого нужно⁉️
👉Пройти по ссылке, зарегистрироваться, ответив на 3 вопроса, и получить ПРОМОКОД.
👉Условия и порядок использования промокода в конце регистрации.
👉Для регистрации перейдите по ссылке в телеграмм - https://clck.ru/34xHCc
#союзотцовроссии#synergetic
Дорогие друзья!
Союз Отцов России - важная общественная организация, объединяющая лучшие семьи нашей страны! Мы хотим, чтобы в ваших домах царила чистота и красота, наш постоянный партер социальных проектов компания SYNERGETIC помогает вам в этом.
Средства для стирки и уборки, уход за телом и товары для малышей - весь ассортимент экологичных моющих средств и натуральной косметики по самым выгодным ценам вы можете найти на сайте synergetic.ru со специальным ПРОМОКОДОМ.
Движение Союз Отцов России набирает обороты, и мы рады предложить нашим активистам, сторонникам и членам их семей продукцию компании SYNERGETIC с дополнительной скидкой до 7%.
⁉️Что для этого нужно⁉️
👉Пройти по ссылке, зарегистрироваться, ответив на 3 вопроса, и получить ПРОМОКОД.
👉Условия и порядок использования промокода в конце регистрации.
👉Для регистрации перейдите по ссылке в телеграмм - https://clck.ru/34xHCc
#союзотцовроссии#synergetic
Вчера была на торжественном открытии Экоцентра “Сборка” на Чистых прудах!
⠀
Знакомый многим бренд #SYNERGETIC стал генеральным партером экоцентра «Сборка»🔥 И не случайно, потому что они производят #экопродукты из растительных компонентов, которые заботятся о семье, доме и планете♻️
⠀
Миссия Экоцентра - стать “точкой сборки” экологического сообщества Москвы и сформировать у москвичей практические навыки раздельного сбора отходов♻️ ⠀
⠀
Если вы еще не сортируете вторсырье, значит вам обязательно нужно прийти в Экоцентр “Сборка” и проникнуться идеей осознанного потребления, ведь 50 до 70 процентов отходов обычной семьи могут быть переработаны в России уже сейчас!
#экология#экоцентр#сборка#отходы#вторсырье#переработка#synergetic#SynergeticEcoSpace#ecospace#раздельныйсборотходов#осознанноепотребление#отходы#семейныеценности#recycling