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() await ചെയ്യുന്നു. വായിക്കാത്ത പ്രതികരണം അടയ്ക്കുന്നത് ശേഷി ഒഴിവാക്കുന്നു; പക്ഷേ അടിയിലെ കണക്ഷൻ വീണ്ടും ഉപയോഗിക്കുന്നതിനു പകരം ഉപേക്ഷിക്കേണ്ടിവരാം.

എക്സെപ്ഷന്റെ പേര് വായിക്കുക

ConnectTimeout കണക്ഷൻ സ്ഥാപിക്കുന്നതുമായി ബന്ധപ്പെട്ടതാണ്. ReadTimeout പ്രതികരണ ഡാറ്റയ്ക്കുള്ള കാത്തിരിപ്പുമായി. PoolTimeout കണക്ഷൻ സ്ലോട്ട് ലഭിക്കുന്നതുമായി. «പ്രോക്സി ടൈംഔട്ട്» എന്നു മാത്രം രേഖപ്പെടുത്തിയാൽ ശരിയായ പരിഹാരം തിരഞ്ഞെടുക്കാനുള്ള വ്യത്യാസം നഷ്ടപ്പെടും.

എൻഡ്‌പോയിന്റ് IP മാറ്റുന്നതിനുമുമ്പ് തുറന്ന പ്രതികരണങ്ങൾ, സമാന്തര ജോലികൾ, കണക്ഷൻ പരിധികൾ എന്നിവ നോക്കുക. ന്യായമായ സമാന്തരഭാരത്തിന് വലിയ പൂൾ അനുയോജ്യമാകാം; പക്ഷേ ഒരിക്കലും അടയ്ക്കാത്ത പ്രതികരണങ്ങൾ പരിഹരിക്കില്ല. ആപ്പിന് കൈവശപ്പെടുത്താൻ കൂടുതൽ ശേഷി നൽകുക മാത്രമാണ് ചെയ്യുന്നത്.

മുഴുവൻ ജോലിയിലും ക്ലയന്റ് വീണ്ടും ഉപയോഗിക്കാവുന്നതായി നിലനിർത്തുക. ഓരോ അഭ്യർഥനയും പ്രവർത്തിക്കുന്നതായി തോന്നിക്കാൻ ക്ലയന്റ് വീണ്ടും സൃഷ്ടിക്കുന്നത് ജീവിതചക്ര പ്രശ്നം മറയ്ക്കുകയും കണക്ഷൻ പുനരുപയോഗം നഷ്ടപ്പെടുത്തുകയും ചെയ്യാം.

അനുബന്ധ ലേഖനങ്ങൾ