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 კავშირის ადგილის მიღებას ეხება. მხოლოდ «პროქსის timeout» ჩაწერა იმ განსხვავებას კარგავს, რომელიც გამოსწორების ასარჩევად საჭიროა.

ბოლო წერტილების IP-ების შეცვლამდე ღია პასუხები, ერთდროული ამოცანები და კავშირების შეზღუდვები შეამოწმეთ. უფრო დიდი პული გამართლებული პარალელური დატვირთვისთვის შეიძლება შესაფერისი იყოს, მაგრამ არასოდეს დახურულ პასუხებს არ ასწორებს. მხოლოდ აპს აძლევს დასაკავებელ მეტ ტევადობას.

კლიენტი მთელი დატვირთვის განმავლობაში ხელახლა გამოყენებადი შეინარჩუნეთ. ყოველი მოთხოვნა მოქმედად რომ გამოჩნდეს, კლიენტის თავიდან შექმნამ შეიძლება სასიცოცხლო ციკლის პრობლემა დამალოს და კავშირების ხელახლა გამოყენება დაკარგოს.

დაკავშირებული სტატიები