Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
UN EXPERTS DEMAND SAFE PASSAGE FOR ‘MADLEEN’
JOIN THEM
Today, UN experts called for safe passage for the Madleen — our civilian ship carrying vital aid and international volunteers to Gaza.
Now we need your voice. Let’s turn international law into action.
📣 Take one minute: go to bit.ly/IsraelOnNotice and send a letter to the Israeli government, UN officials, and diplomatic missions demanding that Israel abide by international law and refrain from attacking, sabotaging or otherwise interfering with the Madleen and her mission.
Together, we can open a people’s sea corridor to Gaza. #SafePassage#BreakTheSiege#FreedomFlotilla
Six of the seven U.S. citizens aboard the Freedom Flotilla’s ‘Handala’ just read a powerful open letter to Donald Trump and the U.S. government. From the founder of Amazon Labor Union’s to a U.S. war veteran, a lawyer, a marine rescue worker, a human rights attorney, and an actor—each one delivered a searing truth: the U.S. is an active participant in Israel’s war crimes against Palestinian children in Gaza. If the U.S. does not support the deliberate starvation of children, they should guarantee safe passage of ‘Handala’.
‘Handala’ plans to deliver food, medicine, and baby formula to Gaza in a few days. They are unarmed, trained in nonviolence, and yet, are under threat by Israel. If anything happens to them, the world will know who is responsible.
Share this. Tag your politicians. Break the silence. Let the world see who’s standing on the right side of history.
#PresidentTrump#Handala#SafePassage#FreedomFlotilla#ForTheChildrenOfGaza#StandWithGaza#AllEyesOnDeck
🚨 ACTION ALERT: The UK MUST protect ‘Madleen’ 🚨
The ‘Madleen’ is a UK-flagged civilian ship sailing to Gaza with life-saving aid as part of the #FreedomFlotilla. The UK has a legal duty to protect its vessel and the civilians aboard from Israeli interference.
🇬🇧 Under international law, the UK must:
• Prevent genocide
• Reject Israel’s illegal blockade of Gaza
• Defend its flagged ship from unlawful attacks
Support us by taking action! Contact the Foreign Office and your MP. Demand protection for the ‘Madleen’ and accountability for any aggression.
Email: [email protected]
X: @FCDOGovUK
IG: @ForeignAndDevelopmentOffice
Tel: 020 7008 5000
#SafePassage#UKResponsibility#BreakTheSiege#BreakIsraelsSiege#EndComplicity#Madleen#GazaGenocide#FreedomFlotilla
🚀 Malaysian Prime Minister Confirms Safe Passage of Oil Tankers Through Hormuz Strait
On April 10, Malaysian Prime Minister Anwar confirmed that six out of seven oil tankers heading to Malaysia have successfully navigated the Hormuz Strait. According to BlockBeats, the remaining vessel is currently undergoing repairs due to mechanical issues and remains docked at the port.
#MalaysianPrimeMinister#OilTankers#HormuzStrait#SafePassage#Anwar#MechanicalIssues#BlockBeats#Malaysia