Жұмыс пулын құру шақырушыға жүктелген беттерді бермейді. Жіберілген жұмыс қайтаратын мәндерді сақтап, тұтыныңыз:

from concurrent.futures import ThreadPoolExecutor
import urllib3

manager = urllib3.ProxyManager(
    'http://proxy.example:8080',
    maxsize=4,
    block=True,
)

def fetch(url):
    response = manager.request(
        'GET', url, timeout=urllib3.Timeout(connect=5, read=15),
    )
    return url, response.status, response.data

try:
    with ThreadPoolExecutor(max_workers=4) as workers:
        results = list(workers.map(fetch, urls))
finally:
    manager.clear()

Бұл үзінді URL-дардың шектеулі тізімін және қалыпты жауап өлшемдерін болжайды. Прокси аутентификациясынсыз рұқсат етілген жалпыға ашық URL тексерулері үшін HTTP прокси тізімінен үміткер менеджердің үлгі HTTP соңғы нүктесін алмастыра алады. Әр нәтиже өз URL-ын қамтиды, сондықтан шақырушы күй мен денені дұрыс сұраныспен байланыстыра алады. map нәтижелерді кіріс ретімен қайтарады; жұмысшыдағы ерекше жағдай сол нәтиже алынғанда көтеріледі.

Конфигурацияланған ProxyManager сұраныстардың қосылым пулына ие. Мұнда қолданылатын әдепкі алдын ала жүктелген жауап режимімен urllib3 денені оқып, қосылымды өз пулына қайтарады. Ағынды нұсқа анық тұтынуды және қосылымды босатуды қажет етеді.

maxsize әдетте сақталатын қайта пайдаланылатын қосылымдарды басқарады, әр ашылған сокетке қатаң шектеу емес. block=True тиісті пул әрекетін өзгертеді, сондықтан шақырушылар сол пул шегінен тыс қосымша ашуға емес, бос қосылымды күтеді.

Бұл мысалда жұмысшылар саны қатар шақыруларды шектейді. Көптеген мақсаттар болғанда пул құрылымы мен HTTPS туннельдері үшін қолданылатын маршрут та маңызды; бір пулдың параметрін әр хост үшін бір ғана ғаламдық сокет квотасы деп сипаттауға болмайды.

Қатысты мақалалар