HTTPX PoolTimeout, proxy bağlantı zaman aşımı değildir
HTTPX bağlantı havuzunda beklemeyi tanıyın; belki yeni istek bile almamış proxy’yi değiştirmeden akış yanıtlarını serbest bırakın.
PoolTimeout, HTTPX’in ayarlanan bekleme süresi içinde havuzdan bağlantı alamadığı anlamına gelir. Proxy’ye yeni TCP bağlantısının zaman aşımına uğradığını kanıtlamaz. İkinci istek hâlâ sürecinizin içinde bekliyor olabilir.
İstemci tek bağlantıya izin veriyor ve ilk akış yanıtı açık bırakılıyorsa bunu yeniden üretmek kolaydır. Başka istek başlatmak o bağlantıyı sihirli biçimde serbest bırakmaz.
Akış yanıtının sorumlusunu görünür tutun
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)
Çalıştırmadan önce belge için kullanılan proxy adresini değiştirin. Sonraki istek akış bağlamından çıkıldıktan sonra başlar. Kod döngüden çıksa veya istisna fırlatsa bile bu çıkış yanıtı kapatır.
client.send(request, stream=True) gibi manuel akışta son kapatma kodunuzun sorumluluğundadır. AsyncClient için karşılık gelen manuel temizlik response.aclose() ile beklenir. Okunmamış yanıtı kapatmak kapasite açar, ancak alttaki bağlantıyı yeniden kullanmak yerine atmayı gerektirebilir.
İstisnanın adını okuyun
ConnectTimeout bağlantı kurulmasıyla ilgilidir. ReadTimeout yanıt verisi beklemekle ilgilidir. PoolTimeout bağlantı yuvası edinmekle ilgilidir. Yalnızca «proxy zaman aşımı» kaydetmek, düzeltmeyi seçmek için gereken ayrımı kaybettirir.
Uç nokta IP’lerini değiştirmeden önce açık yanıtları, eşzamanlı görevleri ve bağlantı sınırlarını kontrol edin. Daha büyük havuz meşru eşzamanlı yük için uygun olabilir ama hiç kapatılmayan yanıtları düzeltmez. Yalnızca uygulamaya dolduracağı daha çok kapasite verir.
İstemciyi iş yükü boyunca yeniden kullanılabilir tutun. Her isteği çalışıyor göstermek için istemciyi yeniden kurmak yaşam döngüsü sorununu gizleyebilir ve bağlantı yeniden kullanımını kaybettirebilir.