Ажилчдын pool үүсгэх нь дуудагчид татагдсан хуудсыг өгдөггүй. Илгээсэн ажлын буцаасан утгуудыг хадгалж, хэрэглээрэй:

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 нь хүсэлтүүдийн холболтын pool-ыг эзэмшинэ. Энд ашиглаж буй өгөгдмөл урьдчилан ачаалсан хариултын горимд urllib3 биеийг уншиж, холболтыг өөрийн pool руу буцаана. Стриминг хувилбарт тодорхой хэрэглээ, холболтыг чөлөөлөх шаардлагатай.

maxsize нь ихэвчлэн хадгалагдсан дахин ашиглах боломжтой холболтыг удирддаг, нээгдсэн socket бүрт хатуу хязгаар биш. block=True нь холбогдох pool-ийн зан төлөвийг өөрчилдөг тул дуудагчид тухайн pool-ийн хязгаараас давсан нэмэлт нээхийн оронд чөлөөт холболтыг хүлээнэ.

Энэ жишээнд ажилчдын тоо зэрэгцээ дуудлагыг хязгаарлана. Олон очих газар байвал pool-ийн зохион байгуулалт болон HTTPS хонгилд ашиглах зам ч чухал; нэг pool-ийн тохиргоог host бүрийн нэг дэлхийн socket квот гэж тодорхойлох ёсгүй.

Холбоотой нийтлэлүүд