Mencipta kolam pekerja tidak memberikan halaman yang dimuat turun kepada pemanggil. Simpan dan gunakan nilai yang dikembalikan oleh kerja yang dihantar:

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

Serpihan ini menganggap senarai URL terhad dan saiz respons biasa. Untuk semakan URL awam yang dibenarkan tanpa pengesahan proksi, calon daripada senarai proksi HTTP boleh menggantikan titik akhir HTTP contoh pengurus. Setiap hasil menyertakan URLnya supaya pemanggil boleh mengaitkan status dan badan dengan permintaan yang betul. map mengembalikan hasil mengikut susunan input; pengecualian dalam pekerja dimunculkan apabila hasil itu diambil.

ProxyManager yang dikonfigurasikan memiliki pengumpulan sambungan untuk permintaan. Dengan mod respons pramuat lalai yang digunakan di sini, urllib3 membaca badan dan mengembalikan sambungan ke kolamnya. Versi penstriman memerlukan penggunaan eksplisit dan pelepasan sambungan.

maxsize biasanya mengawal sambungan boleh guna semula yang dikekalkan, bukan had keras pada setiap soket yang dibuka. block=True mengubah tingkah laku kolam berkenaan supaya pemanggil menunggu sambungan bebas dan bukannya membuka tambahan melebihi had kolam itu.

Bilangan pekerja mengehadkan panggilan serentak dalam contoh ini. Dengan banyak destinasi, susun atur kolam dan laluan yang digunakan untuk terowong HTTPS juga penting; tetapan setiap kolam tidak sepatutnya diterangkan sebagai satu kuota soket global untuk setiap hos.

Artikel berkaitan