Недавно делал быстрый прототип асинхронного приложения в котором требовалось вызывать много синхронного кода. Да, я знаю, что это не лучший дизайн, но нужно было быстрое решение на один процесс и без очередей. Поэтому я выполнял код в потоках.
Выглядело это примерно так:
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
🇬🇷#Grecia - Il primo ministro Kyriakos #Mitsotakis annuncia che sono state anticipate a maggio le elezioni generali. Il gravissimo incidente ferroviario, che alla fine del mese scorso è costato la vita a 57 persone, ha scatenato un'ondata di rabbia nel Paese contro il suo governo
@UltimoraPolitics
Grecia, attentato nella notte alla prima consigliera dell'ambasciata italiana Susanna #Schlein. Data alle fiamme e fatta esplodere l'auto della diplomatica, sorella della deputata del #PD Elly. Condanna della Farnesina. Oggi #Tajani vedrà ad Atene il premier #Mitsotakis
@UltimoraPolitics
#Grecia
Kyriakos #Mitsotakis (#ND|EPP) ha prestato giuramento come 101esimo Primo Ministro della Grecia.
Verso le 16:00 ci sarà l'annuncio della composizione del suo governo.
@OsservatorioEsteri
🇬🇷#Grecia, schiacciante vittoria per i conservatori di Nea Dimokratia. #Mitsotakis tornerà premier senza necessità di coalizioni, ottenuta la maggioranza assoluta: "Non mi aspettavo un mandato così forte". #Tsipras distante oltre 20 punti percentuali
@UltimoraPolitics
#Grecia#Turchia
Il Presidente greco Kyriakos #Mitsotakis (#ND|EPP) e quello turco Recep Tayyip #Erdoğan (#AKP|Destra) hanno firmato una storica “Dichiarazione di amicizia e buon vicinato” tra le rispettive nazioni, come punto di partenza verso una svolta nelle relazioni tra i due Paesi.
“I nostri sono due Paesi fratelli, non ci sono problemi che non possiamo risolvere insieme”, ha detto il Presidente turco.
@OsservatorioEsteri
#Grecia
È stata pubblicata la lista del governo di Kyriakos #Mitsotakis (#ND|EPP):
-Primo Ministro: Kyriakos Mitsotakis (ND);
-Ministro dell'Economia e delle Finanze: Kostis #Hatzidakis (ND);
-Ministro degli Esteri: Georgios #Gerapetritis (ND);
-Ministro della Difesa: Nikos #Dendias (ND);
-Ministra dell'Interno: Niki #Kerameus (ND);
-Ministro dell'Istruzione, degli Affari Religiosi e dello Sport: Kyriakos #Pierrakakis (ND);
-Ministro della Salute: Michalis #Chrisochoidis (ND);
-Ministro delle Infrastrutture e dei Trasporti: Christos #Staikouras (ND);
-Ministro dell'Ambiente e dell'Energia: Theodoros #Skylakakis (ND);
-Ministro dello Sviluppo: Kostas #Skrekas (ND);
-Ministro del Lavoro: Adonis #Georgiadis (ND);
-Ministro della Tutela dei Cittadini: Notis #Mitarachi (ND);
-Ministro della Giustizia: Giorgos #Floridis;
-Ministra della Cultura: Lina #Mendoni;
-Ministro dell'Immigrazione e dell'Asilo: Dimitris #Kairides (ND);
-Ministra della Famiglia: Sofia #Zacharaki (ND);
-Ministro dello Sviluppo Rurale e dell'Alimentazione: Lefteris #Avgenakis (ND);
-Ministro della Navigazione della Politica Insulare: Miltiadis #Varvitsiotis (ND);
-Ministra del Turismo: Olga #Kefalogianni (ND);
-Ministro della Governance Digitale: Dimitris #Papastergiou;
-Ministro della Crisi Climatica e della Protezione Civile: Vasilis #Kikilias (ND).
Al gabinetto si aggiungono 3 Ministri di Stato:
-Makis #Voridis (ND);
-Stavros #Papastavrou (ND);
-Akis #Schertsos (ND).
@OsservatorioEsteri