การสร้างพูลผู้ทำงานไม่ได้ส่งหน้าเว็บที่ดาวน์โหลดให้ผู้เรียก เก็บและใช้ค่าที่งานที่ส่งไปส่งคืน:

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 ก็มีความสำคัญเช่นกัน ไม่ควรอธิบายการตั้งค่าของพูลเดียวว่าเป็นโควตาซ็อกเก็ตทั่วโลกหนึ่งรายการสำหรับทุกโฮสต์

บทความที่เกี่ยวข้อง