Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
#DOCK/USDT analysis -
#DOCK is in a downtrend, trading below the 200 EMA. The price has broken out of the previous support and shown an impulsive bearish move. Right now, the price is retesting the broken zone. It is expected to reverse from there and continue the bearish momentum. Wait for the break of the $0.02069 level to go short.
TF : 1h
Entry : $0.02069
Target : $0.01935
SL : $0.02153
#DOCK upcoming hot events👇
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Integrate Traceable Creds
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Delegatable Credentials
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Ethereum Bridge Audit
🆕New Dock (DOCK) event!
30 June 2023 (or earlier)
Wallet App Staking
🆕New Dock (DOCK) event!
30 September 2023 (or earlier)
Bridge with Ethereum
#DOCK upcoming hot events👇
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
White Label Mobile Wallet
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
Credentials Builder
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
EVM & Native Chain Comm.
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
V2: Relay Service
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
Private Delegatable Creds
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Integrate Traceable Creds
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Delegatable Credentials
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Ethereum Bridge Audit
#DOCK upcoming hot events👇
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
White Label Mobile Wallet
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
Credentials Builder
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
EVM & Native Chain Comm.
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
V2: Relay Service
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
Private Delegatable Creds
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Integrate Traceable Creds
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Delegatable Credentials
🆕 New Dock (DOCK) event!
31 March 2023 (or earlier)
Ethereum Bridge Audit
#DOCK upcoming Events 👇👇
🆕 New Dock (DOCK) event!
30 September 2022 (or earlier)
Wallet App V0.3
🆕 New Dock (DOCK) event!
30 September 2022 (or earlier)
Mobile App V0.4 Staking
🆕 New Dock (DOCK) event!
30 September 2022 (or earlier)
Relay Service
🆕 New Dock (DOCK) event!
30 September 2022 (or earlier)
DSL Integration
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
Web Wallet
🆕 New Dock (DOCK) event!
31 December 2022 (or earlier)
Integrate Anonymous Creds