HTTPX PoolTimeout مهلت اتصال به پراکسی نیست
انتظار در استخر اتصال HTTPX را تشخیص دهید و پاسخهای جریانی را پیش از تعویض پراکسیای آزاد کنید که شاید درخواست بعدی را اصلاً نگرفته باشد.
PoolTimeout یعنی HTTPX در زمان انتظار تنظیمشده نتوانسته از استخر اتصال بگیرد. این، مدرک پایان مهلت یک اتصال TCP تازه به پراکسی نیست. درخواست دوم شاید هنوز داخل فرایند شما منتظر است.
وقتی کلاینت فقط یک اتصال مجاز دارد و پاسخ جریانی اول باز میماند، این حالت بهراحتی تکرار میشود. شروع درخواست دیگر آن اتصال را خودبهخود آزاد نمیکند.
مسئول پاسخ جریانی را روشن نگه دارید
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)
پیش از اجرا آدرس مستندات پراکسی را جایگزین کنید. درخواست بعدی پس از خروج از زمینهٔ جریان شروع میشود. این خروج پاسخ را میبندد، حتی اگر کد از حلقه بیرون برود یا استثنا ایجاد کند.
در جریاندهی دستی، مانند client.send(request, stream=True)، بستن نهایی بر عهدهٔ کد شماست. برای AsyncClient، پاکسازی دستی متناظر با response.aclose() انتظار کشیده میشود. بستن پاسخ خواندهنشده ظرفیت آزاد میکند، ولی ممکن است لازم باشد اتصال زیرین دور انداخته شود نه دوباره استفاده.
نام استثنا را بخوانید
ConnectTimeout به برقراری اتصال مربوط است. ReadTimeout به انتظار دادهٔ پاسخ. PoolTimeout به گرفتن جای اتصال. ثبت صرفاً «مهلت پراکسی» تمایز لازم برای انتخاب راهحل را از بین میبرد.
قبل از عوض کردن IP نقطههای اتصال، پاسخهای باز، کارهای همزمان و محدودیت اتصالها را بررسی کنید. استخر بزرگتر ممکن است برای بار همزمان موجه مناسب باشد، ولی پاسخهایی را که هرگز بسته نمیشوند اصلاح نمیکند. فقط ظرفیت بیشتری برای اشغال در اختیار برنامه میگذارد.
کلاینت را برای استفادهٔ مجدد در کل بار کاری نگه دارید. ساخت دوبارهٔ آن برای اینکه هر درخواست ظاهراً کار کند میتواند مشکل چرخهٔ عمر را پنهان کند و استفادهٔ مجدد از اتصالها را از دست بدهد.