Gee elke aiohttp-volmag sy eie gelyktydigheidsbegroting
Beperk werk wat onderweg is per gekose volmag terwyl aiohttp se verbindingspoelperke en responsopruiming behou word.
’n Volmagpoel kan eindpunte met baie verskillende kapasiteit bevat. Om vyftig bewerkings regoor die toepassing toe te laat, keer nie dat nege-en-veertig daarvan dieselfde volmag kies nie.
As die beleid “hoogstens vier bewerkings onderweg deur elke gekose volmag” is, druk daardie beleid direk uit. Hou ’n semafoor vir elke volmagidentiteit, en verkry dit rondom die werk wat die volmag se kapasiteit verbruik.
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()Hierdie skets veronderstel asyncio is ingevoer en die volmag-URL's is gevalideer. Vir publieke versoeke op ’n toegelate publieke-volmagroete, verskaf die HTTP-volmaglys kandidate vir aiohttp se volmag-URL's. ’n Werklike toepassing moet ook sy eie versoektydsverloop stel en besluit hoeveel responsdata dit nodig het. Om ’n groot lêer heeltemal in die geheue te lees, is ’n aparte hulpbronbesluit.
Hou die permit vir die duur deel
Om die semafoor vry te stel sodra die responsopskrifte aankom, kan die beoogde beperking verydel. ’n Stromende liggaam kan die verbinding lank daarna nog gebruik. Hou die permit totdat die liggaam verbruik is of die respons volgens die toepassing se werkvloei gesluit is.
Die geneste konteksbestuurders maak opruiming sigbaar wanneer ’n uitsondering of kansellasie die bewerking verlaat. Vermy om handmatig te verkry en eers aan die onderkant van ’n suksesvolle funksie vry te stel.
Verbindingsperke beantwoord ’n ander vraag
aiohttp se verbindingsperke beperk verbindings volgens die verbindings se gedokumenteerde reëls. Hulle bly nuttig saam met ’n toepassingsemafoor. ’n Verbindingsperk per bestemming druk nie, bloot deur sy naam, ’n begroting uit wat deur alle bestemmings wat aan een volmag toegewys is, gedeel word nie.
Onderskei ook gelyktydigheid van versoektempo. Vier langdurige versoeke en vier baie kort versoeke gebruik dieselfde gelyktydigheidstoelating terwyl hulle verskillende versoeke-per-sekonde-tempos lewer. ’n Diens met ’n tempobeleid mag pasmaking of ’n aparte tempobeperker vereis.
Kies ’n stabiele, nie-geheime volmagidentifiseerder vir logs en aanwysers. As twee URL's met geloofsbriewe na dieselfde kapasiteitspoel verwys, besluit of hulle een begroting moet deel. Omgekeerd kan verskillende poorte of rekeninge afsonderlike perke verteenwoordig wanneer die operateur dit so dokumenteer.
Wanneer deurset daal, ondersoek waar werk wag: jou semafoor, die verbinding, volmagverbindingsopstelling, of responslesings. Om elke perk gelyktydig te verhoog, maak daardie onderskeid moeiliker en kan die tou na ’n volmag skuif wat jy nie beheer nie.