buffersize στη Executor.map της Python 3.14 για μεγάλες παρτίδες proxy
Χρησιμοποιήστε το buffersize της Executor.map στην Python 3.14 για να σταματήσετε την κατανάλωση εισόδου όσο περιμένουν τα αποτελέσματα, ανεξάρτητα από το max_workers.
max_workers=8 περιορίζει τα νήματα εκτέλεσης. Δεν εμποδίζει όμως έναν ξεχωριστό βρόχο υποβολής να δημιουργήσει Future για κάθε τελικό σημείο σε τεράστια είσοδο.
Η Python 3.14 προσθέτει μια περιορισμένη επιλογή ανάγνωσης εκ των προτέρων:
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=8) as executor:
for result in executor.map(check_proxy, endpoints, buffersize=24):
record_result(result)check_proxy είναι ο υπάρχων σύγχρονος έλεγχος με προθεσμίες δικτύου και καθαρισμό; το record_result χειρίζεται την παρατήρηση που επιστρέφει. Οι τιμές 8 και 24 είναι ενδεικτικοί προϋπολογισμοί. Η δωρεάν λίστα proxy παρέχει δημόσιους υποψηφίους για τελικά σημεία; κρατήστε το πρωτόκολλό τους με κάθε διεύθυνση ώστε το check_proxy να χρησιμοποιεί τη σωστή μεταφορά.
Όταν γεμίσει το buffer υποβολής, το map παύει να καταναλώνει τον επαναλήψιμο μέχρι να επιστραφούν αποτελέσματα. Αυτό ισχύει και για γεννήτριες.
Το map εξακολουθεί να αποδίδει με σειρά εισόδου: ένας αργός πρώιμος έλεγχος μπορεί να κρατήσει ολοκληρωμένα μεταγενέστερα αποτελέσματα και να καθυστερήσει περαιτέρω είσοδο. Για επεξεργασία με σειρά ολοκλήρωσης, χρησιμοποιήστε ένα ρητά περιορισμένο σύνολο futures που αναπληρώνεται καθώς ολοκληρώνονται.
Χειριστείτε αναμενόμενες αποτυχίες δικτύου μέσα στον έλεγχο αν η παρτίδα πρέπει να συνεχίσει να αποδίδει αποτελέσματα. Μια μη χειρισμένη εξαίρεση εγείρεται όταν ανακτάται αυτό το στοιχείο. Το chunksize της ThreadPoolExecutor δεν παρέχει αυτόν τον προϋπολογισμό υποβολής, και παλαιότερες εκδόσεις της Python δεν έχουν buffersize.