Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
Project Infinity X - Official | A14| Nothing Phone 2 (Pong)
📝 Details:
- Version: v1.6
- Device: #Pong
- Released: 25/10/24
⬇️ Download: Here
📖 Changelogs: Device | Source
📔 Instructions: Here
🎄 Device tree : Here
🖼 Screenshot : Here | Here
🆘 Support: Device
🏷 Tags: #AOSP#ROM#InfinityX#U#QPR3#Official
✍️ Note:
• Read changelogs
• OTA available
• Base firmware 2.6.0 is recommended
• Dirty flash possible from previous build
• Based on Qpr3 September Security Patch
• Dolby Atmos available
• Flash meteoric kernel for KSU support
• Nik gapps recommend for vanilla version
🏆 Credits:
- Chandu Dyavanapelli for DT Base
- Hellboy for kernel tree
- Fabian and Hellboy for Glyph Implementation
👤 Maintainer: @Ghosutox
🔔 Updates: @NothingPhone2Updates
🐙 Chat: @NothingPhone2
Project Infinity X - Official | A14| Nothing Phone 2 (Pong)
📝 Details:
- Version: v1.5
- Device: #Pong
- Released: 11/09/24
⬇️ Download: Here
📖 Changelogs: Device | Source
📔 Instructions: Here
🎄 Device tree : Here
🖼 Screenshot : Here | Here
🆘 Support: Device
🏷 Tags: #AOSP#ROM#InfinityX#U#QPR3#Official
✍️ Note:
• Read changelogs
• Base firmware 2.6.0 is recommended
• Dirty flash possible from previous build
• Based on Qpr3 September Security Patch
• Dolby Atmos available
• Flash meteoric kernel for KSU support
• Nik gapps recommend for vanilla version
🏆 Credits:
- Chandu Dyavanapelli for kernel & DT Base
- Fabian and Hellboy for Glyph Implementation
👤 Maintainer: @Ghosutox
🔔 Updates: @NothingPhone2Updates
🐙 Chat: @NothingPhone2
Project Infinity X - Official | A14| Nothing Phone 2 (Pong)
📝 Details:
- Version: v1.4
- Device: #Pong
- Released: 27/08/24
⬇️ Download: Here
📔 Instructions: Here
🎄 Device tree : Here
🖼 Screenshot : Here | Here
🆘 Support: Device
🏷 Tags: #AOSP#ROM#InfinityX#U#QPR3#Official
✍️ Note:
• Initial official release
• Base firmware 2.6.0 is recommended
• Clean flash mandatory
• Based on Qpr3 August Security Patch
• Dolby Atmos available
• Flash meteoric kernel for KSU support
• Nik gapps recommend for vanilla version
🏆 Credits:
- Chandu Dyavanapelli for kernel & DT Base
- Fabian and Hellboy for Glyph Implementation
👤 Maintainer: @Ghosutox
🔔 Updates: @NothingPhone2Updates
🐙 Chat: @NothingPhone2