Adjon minden aiohttp-proxynak saját egyidejűségi keretet
Korlátozza a folyamatban lévő munkát kiválasztott proxynként, miközben megőrzi az aiohttp kapcsolatkészlet-korlátait és a válaszok tisztítását.
Egy proxykészlet nagyon eltérő kapacitású végpontokat tartalmazhat. Ötven művelet engedélyezése az alkalmazásban nem akadályozza meg, hogy negyvenkilenc közülük ugyanazt a proxyt válassza.
Ha a szabály „legfeljebb négy folyamatban lévő művelet minden kiválasztott proxyn keresztül”, fejezze ki ezt a szabályt közvetlenül. Tartson szemaforot minden proxy-identitáshoz, és a proxy kapacitását fogyasztó munka körül szerezze meg.
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()Ez a vázlat feltételezi, hogy a asyncio importálva van, és a proxy URL-ek ellenőrzöttek. Az engedélyezett nyilvános proxy-útvonalon érkező nyilvános kérésekhez a HTTP-proxylista jelölteket biztosít az aiohttp proxy URL-jeihez. Egy valódi alkalmazásnak saját kérési időtúllépést is be kell állítania, és el kell döntenie, mennyi válaszadatra van szüksége. Egy nagy fájl teljes memóriába olvasása külön erőforrás-döntés.
Tartsa meg az engedélyt a drága részhez
A szemafor felszabadítása, amint megérkeznek a válaszfejlécek, meghiúsíthatja a szándékolt korlátot. Egy streamelt törzs még sokáig használhatja a kapcsolatot. Tartsa meg az engedélyt, amíg a törzs fel nem használódik, vagy a válasz le nem zárul az alkalmazás munkafolyamata szerint.
A beágyazott kontextuskezelők láthatóvá teszik a tisztítást, amikor egy kivétel vagy megszakítás elhagyja a műveletet. Kerülje a kézi megszerzést és a felszabadítást csak egy sikeres függvény alján.
A kapcsolati korlátok más kérdésre válaszolnak
Az aiohttp csatlakozókorlátai a csatlakozó dokumentált szabályai szerint korlátozzák a kapcsolatokat. Hasznosak maradnak egy alkalmazásszemafor mellett. A célonkénti kapcsolati korlát önmagában, csak a neve alapján nem fejez ki egy proxynak kiosztott összes cél által megosztott keretet.
Különböztesse meg az egyidejűséget a kérési rátától is. Négy hosszú életű kérés és négy nagyon rövid kérés ugyanazt az egyidejűségi keretet használja, miközben különböző másodpercenkénti kérési rátákat produkál. Egy rátaszabállyal rendelkező szolgáltatás ütemezést vagy külön rátakorlátozót igényelhet.
Válasszon stabil, nem titkos proxy-azonosítót a naplókhoz és metrikákhoz. Ha két hitelesítő adatot tartalmazó URL ugyanarra a kapacitáskészletre hivatkozik, döntse el, hogy egy keretet osszanak-e meg. Fordítva, a különböző portok vagy fiókok külön korlátokat jelenthetnek, ha az üzemeltető így dokumentálja őket.
Amikor az átviteli sebesség csökken, vizsgálja meg, hol vár a munka: a szemaforjában, a csatlakozóban, a proxykapcsolat létrehozásában vagy a válaszok olvasásában. Az összes korlát egyidejű emelése megnehezíti ezt a megkülönböztetést, és a sort egy Ön által nem irányított proxyba mozdíthatja.