Η δημιουργία δεξαμενής εργατών δεν δίνει στον καλούντα τις ληφθείσες σελίδες. Κρατήστε και καταναλώστε τις τιμές που επιστρέφει η υποβληθείσα εργασία:

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 συνήθως ελέγχει τις διατηρούμενες επαναχρησιμοποιήσιμες συνδέσεις, όχι ένα σκληρό όριο σε κάθε ανοιγμένο socket. Το block=True αλλάζει τη σχετική συμπεριφορά της δεξαμενής ώστε οι καλούντες να περιμένουν μια ελεύθερη σύνδεση αντί να ανοίγουν πρόσθετες πάνω από το όριο αυτής της δεξαμενής.

Ο αριθμός εργατών περιορίζει τις ταυτόχρονες κλήσεις σε αυτό το παράδειγμα. Με πολλούς προορισμούς, η διάταξη της δεξαμενής και η διαδρομή για τις σήραγγες HTTPS έχουν επίσης σημασία· μια ρύθμιση ανά δεξαμενή δεν πρέπει να περιγράφεται ως ένα καθολικό όριο socket για κάθε κεντρικό υπολογιστή.

Σχετικά άρθρα