Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
#Italia
Domani prenderà il via il congresso di #A1MDP|S&D, dove parteciperanno Letta, Conte, Orlando, Di Maio, Landini e Calenda. Non è stato inviato invece Matteo Renzi, poiché, secondo #Scotto, Italia Viva si è collocata col centrodestra.
@UltimoraPolitics
https://x.com/SavinoBalzano/status/1971129589729562929?t=lFhJPoIZlMv1Vvnt_O9B3Q&s=19
Guardate questi 60 secondi di video e ditemi se in questo Paese non c’è un problema democratico grande come un grattacielo.
Ci si indigna per il mancato sostegno del governo alla #GlobalSumudFlotilla, ma appena fai notare che anche #Mattarella resta in silenzio, subito scattano l’imbarazzo, i balbettii, la prudenza.
Insomma: attaccare #Meloni o #Salvini va bene (lasciamo perdere #Tajani che ormai non lo possono vedere manco i 300 dipendenti della Farnesina), ma guai a toccare il Presidente della Repubblica.
Eppure, tra le imbarcazioni colpite sembra ce ne fossero anche alcune battenti bandiera italiana, il nostro tricolore.
Il Capo dello Stato rappresenta l’unità nazionale, lo dice l’articolo 87 della Costituzione. E allora? Pensa come siamo ridotti.
In diretta dalla #Flotilla, l’onorevole #Scotto ci spiega che #SergioMattarella non è tenuto a intervenire. Avrà pensato lo stesso quando ha paragonato la #Russia al Terzo Reich?
Se c’è un potere che non si può criticare, la democrazia non esiste: fatevene una ragione. E se certi silenzi li condannate e altri li giustificate, la vostra battaglia perde autorevolezza e credibilità.
100 punti in meno al GrifonSergio.
#BattitoriLiberi: dal lunedì al venerdì alle 17, con Gianluca Fabi, su Radio Cusano.
Il Presidente della Camera #Fontana comunica le seguenti censure con interdizioni ai lavori del parlamento dopo i fatti sfociati nell'aggressione a #Donno: 15 giorni a Igor #Iezzi (#Lega); 7 ad #Amich (#Fdi), #Cangiano (#Fdi), #Forgiuele (#Lega), #Mollicone (#Fdi) e #Stumpo (#Pd); 4 a #Donno (M5S); 3 ad #Amendola (#Pd) e 3 a #Candiani (#Lega); 2 a #Scotto (#Pd) e 2 a #Stefanazzi (#Pd). (Dire)
@UltimoraPolitics