Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
📩#LTCUSDT 1h | Mid-Term
📉Long Entry Zone: 123.69-117.94
🎯 - Strategy Accuracy: 93.29%
Last 5 signals: 100.0%
Last 10 signals: 100.0%
Last 20 signals: 100.0%
⏳ - Signal details:
Target 1: 125.27
Target 2: 126.86
Target 3: 128.44
Target 4: 133.19
_____
🧲Trend-Line: 117.94
❌Stop-Loss: 116.44
💡After reaching the first target you can put the rest of the position to breakeven
#LTCUSDT has broken out of a Descending Channel, supported by the $60.00 level. However, for this rally to strengthen, it needs to clear the $75.00-$80.00 resistance zone, which was previously support. A successful breakout here could lead to a stronger push toward the next major resistance.
---
#LTCUSDT пробил нисходящий канал, опираясь на поддержку на уровне $60.00. Однако для усиления ралли необходимо преодолеть зону сопротивления $75.00-$80.00, которая ранее служила поддержкой. Успешный пробой этого уровня может привести к более сильному росту к следующему важному сопротивлению.
---
#LTCUSDT از کانال نزولی خارج شده و با حمایت قوی در سطح $60.00 پشتیبانی شده است. اما برای تقویت این صعود، باید از محدوده مقاومت $75.00-$80.00 که قبلاً حمایت بوده، عبور کند. شکست موفقیتآمیز در این سطح میتواند منجر به فشار قویتری به سمت مقاومت بعدی شود.
Signal for a futures trade
#LTCUSDT.P
📌 Logged in to LONG
Entry: ±$65.85
Take profit: $76; $90; $100
Stop loss: $59.5
On the daily chart, the price of the coin is preparing to exit consolidation. It is also possible to develop a double bottom pattern. It is most likely that alts will catch up with Bitcoin in their dynamics.
#LTCUSDT UPDATE:
#LTC is now currently trading around $86.46. It has already broken out of the Symmetrical triangle on the 4hr time frame. So, the possible scenarios are: if the price pumps from here and breaks above the resistance zone, then we can see bullish momentum, and the price can go towards $91-$93. Otherwise, if the price dumps from here and trades inside the triangle again, then the breakout will be considered a fakeout. Keep an eye on it and stay tuned with us for further updates
🚨Candlestick Patterns Detected:
⭐Shooting Star on #ADAUSDT (4h)
⭐Shooting Star on #ETHUSDT (4h)
⭐Shooting Star on #NEARUSDT (4h)
⭐Shooting Star on #XRPUSDT (4h)
⭐Shooting Star on #FORMUSDT (4h)
⭐Shooting Star on #LTCUSDT (4h)
====================
🔨Hammer on #CAKEUSDT (4h)
🔨Hammer on #SUIUSDT (4h)
🔨Hammer on #LINKUSDT (4h)
🔨Hammer on #WLFIUSDT (4h)
🔨Hammer on #ASTERUSDT (4h)
🔨Hammer on #DOGEUSDT (4h)
🔨Hammer on #ENAUSDT (4h)
🔨Hammer on #PUMPUSDT (4h)
🔨Hammer on #ZECUSDT (4h)
🔨Hammer on #SOLUSDT (4h)
====================
🚀Marubozu Bullish on #TAOUSDT (4h)
====================