Anna jokaiselle aiohttp-välityspalvelimelle oma rinnakkaisuusbudjetti
Rajoita käynnissä olevaa työtä valittua välityspalvelinta kohti säilyttäen aiohttp:n yhteyspoolin rajat ja vastausten siivous.
Välityspalvelinpooli voi sisältää hyvin erilaisen kapasiteetin päätepisteitä. Viidenkymmenen toiminnon salliminen sovelluksessa ei estä neljääkymmentäyhdeksää niistä valitsemasta samaa välityspalvelinta.
Jos käytäntö on ”enintään neljä käynnissä olevaa toimintoa kunkin valitun välityspalvelimen kautta”, ilmaise se käytäntö suoraan. Pidä semaforia jokaista välityspalvelimen identiteettiä varten ja hanki se sen työn ympärille, joka kuluttaa välityspalvelimen kapasiteettia.
limits = {proxy: asyncio.Semaphore(4) for proxy in proxy_urls}
async def fetch(session, proxy, url):
async with limits[proxy]:
async with session.get(url, proxy=proxy) as response:
return await response.read()Tämä luonnos olettaa, että asyncio on tuotu ja että välityspalvelimen URL-osoitteet on validoitu. Julkisille pyynnöille sallitulla julkisella välityspalvelinreitillä HTTP-välityspalvelinluettelo tarjoaa ehdokkaita aiohttp:n välityspalvelin-URL-osoitteiksi. Todellisen sovelluksen tulisi myös asettaa oma pyyntöaikakatkaisunsa ja päättää, kuinka paljon vastausdataa se tarvitsee. Suuren tiedoston lukeminen kokonaan muistiin on erillinen resurssipäätös.
Pidä lupa kalliille osalle
Semaforin vapauttaminen heti, kun vastauksen otsikot saapuvat, voi tehdä tyhjäksi aiotun rajan. Virtaava runko voi jatkaa yhteyden käyttöä vielä kauan sen jälkeen. Pidä lupa, kunnes runko on kulutettu tai vastaus on suljettu sovelluksen työnkulun mukaisesti.
Sisäkkäiset kontekstinhallinnat tekevät siivouksesta näkyvää, kun poikkeus tai peruutus jättää toiminnon. Vältä manuaalista hankintaa ja vapauttamista vain onnistuneen funktion lopussa.
Yhteysrajat vastaavat toiseen kysymykseen
aiohttp:n liittimen rajat rajoittavat yhteyksiä liittimen dokumentoitujen sääntöjen mukaisesti. Ne pysyvät hyödyllisinä sovelluksen semaforin rinnalla. Kohdekohtainen yhteysraja ei ilmaise pelkän nimensä perusteella budjettia, jonka kaikki yhdelle välityspalvelimelle osoitetut kohteet jakavat.
Erottele myös rinnakkaisuus pyyntötiheydestä. Neljä pitkäikäistä pyyntöä ja neljä hyvin lyhyttä pyyntöä käyttävät samaa rinnakkaisuuskiintiötä mutta tuottavat erilaisia pyyntöjä sekunnissa -arvoja. Palvelu, jolla on tiheyskäytäntö, voi vaatia tahdistusta tai erillisen tiheysrajoittimen.
Valitse vakaa, ei-salainen välityspalvelimen tunniste lokeja ja mittareita varten. Jos kaksi valtuuksia kantavaa URL-osoitetta viittaavat samaan kapasiteettipooliin, päätä, pitäisikö niiden jakaa yksi budjetti. Päinvastoin eri portit tai tilit voivat edustaa erillisiä rajoja, kun operaattori dokumentoi ne niin.
Kun läpimeno laskee, tutki missä työ odottaa: semaforissasi, liittimessä, välityspalvelinyhteyden muodostuksessa vai vastausten luvussa. Kaikkien rajojen nostaminen kerralla vaikeuttaa tätä erottelua ja voi siirtää jonon välityspalvelimeen, jota et hallitse.