PoolTimeout HTTPX-in təyin edilmiş gözləmə vaxtında hovuzdan bağlantı ala bilmədiyini bildirir. Bu, proksiyə yeni TCP bağlantısının vaxtının bitdiyini sübut etmir. İkinci sorğu hələ prosesinizin içində gözləyə bilər.

Müştəri bir bağlantıya icazə verir və ilk axın cavabı açıq qalırsa, bunu təkrarlamaq asandır. Başqa sorğu başlatmaq həmin bağlantını öz-özünə azad etmir.

Axın cavabına kimin cavabdeh olduğunu aydın saxlayın

import httpx

limits = httpx.Limits(
    max_connections=1,
    max_keepalive_connections=1,
)
timeout = httpx.Timeout(
    connect=5, read=10, write=10, pool=1
)

with httpx.Client(
    proxy="http://203.0.113.10:8080",
    trust_env=False,
    limits=limits,
    timeout=timeout,
) as client:
    with client.stream("GET", "https://example.com/") as response:
        print(response.status_code)
        for chunk in response.iter_bytes():
            print(len(chunk))

    next_response = client.get("https://example.com/")
    print(next_response.status_code)

İşə salmazdan əvvəl sənədləşdirmə proksi ünvanını dəyişin. Növbəti sorğu axın kontekstindən çıxdıqdan sonra başlayır. Kod dövrəni dayandırsa və ya istisna yaratsa belə, bu çıxış cavabı bağlayır.

client.send(request, stream=True) kimi əl ilə axında son bağlanmaya kodunuz cavabdehdir. AsyncClient üçün uyğun əl ilə təmizləmə response.aclose() ilə gözlənilir. Oxunmamış cavabı bağlamaq tutum azad edir, amma əsas bağlantını yenidən istifadə etmək əvəzinə atmağı tələb edə bilər.

İstisnanın adını oxuyun

ConnectTimeout bağlantının qurulmasına aiddir. ReadTimeout cavab məlumatını gözləməyə aiddir. PoolTimeout bağlantı yeri almağa aiddir. Yalnız «proksi vaxtı bitdi» yazmaq düzəlişi seçmək üçün lazım olan fərqi itirir.

Son nöqtə IP-lərini dəyişməzdən əvvəl açıq cavabları, paralel tapşırıqları və bağlantı limitlərini yoxlayın. Böyük hovuz əsaslı paralel yükə uyğun ola bilər, amma heç bağlanmayan cavabları düzəltmir. Sadəcə tətbiqə tutacağı daha çox həcm verir.

Müştərini iş yükü boyunca yenidən istifadə edilən saxlayın. Hər sorğunu işləyirmiş kimi göstərmək üçün müştərini yenidən yaratmaq həyat dövrü problemini gizlədə və bağlantı təkrar istifadəsini itirə bilər.

Əlaqəli məqalələr