Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
To clarify, in the post about the Bulcoin Referral Program, by "invitation to the channel" we meant subscription to the channel. To receive rewards, those who wrote your username in the comments must be subscribed
#referrals
FAQ | BUY
Now is the best time to enter BLC Market.
Early stage project:
- actively forming structure
- interfaces are being published
- new mechanics are opening up
If you're already here - you're getting in ahead of most.
Scaling will follow next.
#community#referrals
FAQ | BUY
👥 The system of inviting friends to CITY Holder! 🏠🐹
With the invitation system you get in-game income not only for inviting friends, but also for their further development! The better your buddy's results, the higher your income. Combine strategies and show incredible results! #CITYHolder#Referrals
https://t.me/cityholder🆕👈
°°°°°°
Launching the BulCoin Referral Program
We are starting a referral program for the early BulCoin community.
Now every participant can invite friends to the project and receive additional bonuses.
How it works:
Invite your friends to the BulCoin channel
Ask them to mention your username in the comments to this post
Bonuses BLC are credited for invitations
Rewards:
• 3 invited — You join the private Pioneers chat
• 10 invited — Bonus of 500,000 BLC
• 25 invited — 3mln BLC + Participation in the BulCoin operational staff
We will regularly publish the leaderboard — participants who have invited the most people.
The best participants can receive additional rewards and a special status in the community.
This is just the beginning of the formation of the BulCoin Early Community
Invite your friends and help build the BulCoin community
#Pioneers#Referrals
FAQ | BUY
Invitation mechanics in BLC Market
There will be a separate section in the app through which you can invite new users.
This will allow:
— community to grow faster
— build connections between members
— increase activity within the platform
We will show the interface in the upcoming updates.
#profile#community#referrals
FAQ | BUY
🎉 Invite Reward Boost! 🎉
Invite friends to join SingSing and earn 20 $KARA FREE for each successful invite (up from 10 $KARA)! 🔥
👥 The more, the merrier – stack up your $KARA effortlessly!
💸 Start inviting now and claim your rewards!
#SingSing#KARA#Invite#Referrals
🎤Announcement | Chat | X (Twitter) | Website | Game