Ishchi pul yaratish chaqiruvchiga yuklab olingan sahifalarni bermaydi. Yuborilgan ish qaytaradigan qiymatlarni saqlang va iste'mol qiling:

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()

Bu parcha cheklangan URL ro'yxati va oddiy javob o'lchamlarini nazarda tutadi. Proksi autentifikatsiyasisiz ruxsat etilgan ommaviy URL tekshiruvlari uchun HTTP proksi ro'yxatidan nomzod menejerning namunaviy HTTP oxirgi nuqtasini almashtirishi mumkin. Har bir natija o'z URL'ini o'z ichiga oladi, shunda chaqiruvchi holat va tanani to'g'ri so'rov bilan bog'lashi mumkin. map natijalarni kirish tartibida qaytaradi; ishchidagi istisno o'sha natija olinganda ko'tariladi.

Sozlangan ProxyManager so'rovlar uchun ulanish puliga ega. Bu yerda ishlatiladigan standart oldindan yuklangan javob rejimida urllib3 tanani o'qiydi va ulanishni o'z puliga qaytaradi. Oqim versiyasi aniq iste'mol va ulanishni bo'shatishni talab qiladi.

maxsize odatda saqlanadigan qayta ishlatiladigan ulanishlarni boshqaradi, har bir ochilgan soketga qattiq chegara emas. block=True tegishli pul xatti-harakatini o'zgartiradi, shunda chaqiruvchilar o'sha pul chegarasidan tashqari qo'shimcha ochish o'rniga bo'sh ulanishni kutadi.

Bu misolda ishchilar soni bir vaqtdagi qo'ng'iroqlarni cheklaydi. Ko'p manzillar bo'lsa, pul tartibi va HTTPS tunnellari uchun ishlatiladigan yo'l ham muhim; bitta pul sozlamasini har bir xost uchun yagona global soket kvotasi deb ta'riflash kerak emas.

O'xshash maqolalar