İşçi hovuzu yaratmaq çağırana yüklənmiş səhifələri vermir. Göndərilən işin qaytardığı dəyərləri saxlayın və istehlak edin:

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 fraqment məhdud URL siyahısını və adi cavab ölçülərini nəzərdə tutur. Proksi autentifikasiyası olmadan icazə verilən ictimai URL yoxlamaları üçün HTTP proksi siyahısından bir namizəd menecerin nümunə HTTP son nöqtəsini əvəz edə bilər. Hər nəticə öz URL-ni ehtiva edir ki, çağıran statusu və gövdəni düzgün sorğu ilə əlaqələndirə bilsin. map nəticələri giriş sırası ilə qaytarır; işçidə yaranan istisna həmin nəticə götürüldükdə qaldırılır.

Konfiqurasiya edilmiş ProxyManager sorğular üçün bağlantı hovuzuna sahibdir. Burada istifadə olunan standart əvvəlcədən yüklənmiş cavab rejimi ilə urllib3 gövdəni oxuyur və bağlantını öz hovuzuna qaytarır. Axın versiyası açıq istehlak və bağlantının buraxılmasını tələb edərdi.

maxsize adətən saxlanılan təkrar istifadə edilə bilən bağlantıları idarə edir, hər açılmış soket üzərində sərt hədd deyil. block=True müvafiq hovuz davranışını dəyişir ki, çağıranlar həmin hovuzun limitindən artıq əlavə bağlantı açmaq əvəzinə boş bağlantı gözləsinlər.

İşçi sayı bu nümunədə eyni vaxtlı çağırışları məhdudlaşdırır. Çoxlu təyinat olduqda hovuz düzümü və HTTPS tunelləri üçün istifadə olunan marşrut da vacibdir; bir hovuz üçün parametr hər host üçün vahid qlobal soket kvotası kimi təsvir edilməməlidir.

Əlaqəli məqalələr