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-ները փոխելը ստուգեք բաց պատասխանները, զուգահեռ առաջադրանքներն ու կապերի սահմանները։ Մեծ ավազանը կարող է հարմար լինել հիմնավոր զուգահեռ բեռի համար, բայց չի ուղղում երբեք չփակվող պատասխանները։ Այն պարզապես ծրագրին ավելի շատ զբաղեցնելի տարողություն է տալիս։

Հաճախորդը պահեք կրկնակի օգտագործման համար ամբողջ բեռի ընթացքում։ Ամեն հարցում աշխատող թվալու համար հաճախորդը վերաստեղծելը կարող է թաքցնել կյանքի ցիկլի խնդիրը և կորցնել կապերի կրկնակի օգտագործումը։

Առնչվող հոդվածներ