Bir proxy havuzu çok farklı kapasitelere sahip uç noktalar içerebilir. Uygulama genelinde elli işleme izin vermek, bunlardan kırk dokuzunun aynı proxy’yi seçmesini engellemez.

İlke «seçilen her proxy üzerinden en fazla dört sürmekte olan işlem» ise bu ilkeyi doğrudan ifade edin. Her proxy kimliği için bir semafor tutun ve onu proxy’nin kapasitesini tüketen işin etrafında edinin.

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()

Bu taslak, asyncio modülünün içe aktarıldığını ve proxy URL’lerinin doğrulandığını varsayar. İzin verilen bir genel proxy rotasındaki genel istekler için HTTP proxy listesi, aiohttp’nin proxy URL’leri için adaylar sağlar. Gerçek bir uygulama ayrıca kendi istek zaman aşımını belirlemeli ve ne kadar yanıt verisine ihtiyaç duyduğuna karar vermelidir. Büyük bir dosyayı tamamen belleğe okumak ayrı bir kaynak kararıdır.

İzni pahalı kısım için saklayın

Yanıt başlıkları gelir gelmez semaforu serbest bırakmak amaçlanan sınırı bozabilir. Akış halindeki bir gövde bağlantıyı çok sonra bile kullanmaya devam edebilir. Gövde tüketilene veya yanıt uygulamanın iş akışına göre kapatılana kadar izni saklayın.

İç içe bağlam yöneticileri, bir istisna veya iptal işlemi bıraktığında temizliği görünür kılar. Elle edinmekten ve yalnızca başarılı bir işlevin sonunda serbest bırakmaktan kaçının.

Bağlantı sınırları başka bir soruyu yanıtlar

aiohttp’nin bağlayıcı sınırları bağlantıları bağlayıcının belgelenmiş kurallarına göre sınırlar. Bir uygulama semaforunun yanında yararlı olmaya devam ederler. Hedef başına bağlantı sınırı, yalnızca adıyla, bir proxy’ye atanan tüm hedefler tarafından paylaşılan bir bütçeyi ifade etmez.

Eşzamanlılığı istek hızından da ayırın. Dört uzun ömürlü istek ile dört çok kısa istek aynı eşzamanlılık tahsisini kullanırken farklı saniyedeki istek hızları üretir. Hız ilkesi olan bir hizmet, tempolama veya ayrı bir hız sınırlayıcı gerektirebilir.

Günlükler ve metrikler için kararlı, gizli olmayan bir proxy tanımlayıcısı seçin. Kimlik bilgisi taşıyan iki URL aynı kapasite havuzuna başvuruyorsa tek bir bütçeyi paylaşmaları gerekip gerekmediğine karar verin. Tersine, farklı bağlantı noktaları veya hesaplar, işletmeci bunları böyle belgelediğinde ayrı sınırları temsil edebilir.

Verim düştüğünde işin nerede beklediğini inceleyin: semaforunuz, bağlayıcı, proxy bağlantısının kurulması veya yanıtların okunması. Tüm sınırları aynı anda yükseltmek bu ayrımı zorlaştırır ve kuyruğu kontrol etmediğiniz bir proxy’ye taşıyabilir.

İlgili makaleler