Μια δεξαμενή διαμεσολαβητών μπορεί να περιέχει τελικά σημεία με πολύ διαφορετική χωρητικότητα. Το να επιτρέπονται πενήντα εργασίες σε ολόκληρη την εφαρμογή δεν εμποδίζει σαράντα εννέα από αυτές να επιλέξουν τον ίδιο διαμεσολαβητή.

Αν η πολιτική είναι «το πολύ τέσσερις εργασίες σε εξέλιξη μέσω κάθε επιλεγμένου διαμεσολαβητή», εκφράστε αυτή την πολιτική άμεσα. Κρατήστε ένα σημαφόρο για κάθε ταυτότητα διαμεσολαβητή και αποκτήστε το γύρω από την εργασία που καταναλώνει τη χωρητικότητα του διαμεσολαβητή.

limits = {proxy: asyncio.Semaphore(4) for proxy in proxy_urls}

async def fetch(session, proxy, url):
    async with limits[proxy]:
        async with session.get(url, proxy=proxy) as response:
            return await response.read()

Αυτό το σκίτσο υποθέτει ότι το asyncio έχει εισαχθεί και ότι τα URL των διαμεσολαβητών έχουν επικυρωθεί. Για δημόσια αιτήματα σε μια επιτρεπόμενη δημόσια διαδρομή διαμεσολαβητή, η λίστα διαμεσολαβητών HTTP παρέχει υποψηφίους για τα URL διαμεσολαβητή του aiohttp. Μια πραγματική εφαρμογή πρέπει επίσης να ορίσει το δικό της χρονικό όριο αιτήματος και να αποφασίσει πόσα δεδομένα απάντησης χρειάζεται. Η ανάγνωση ενός μεγάλου αρχείου εξ ολοκλήρου στη μνήμη είναι ξεχωριστή απόφαση πόρων.

Κρατήστε την άδεια για το ακριβό μέρος

Η απελευθέρωση του σημαφόρου μόλις φτάσουν οι κεφαλίδες της απάντησης μπορεί να ακυρώσει το επιδιωκόμενο όριο. Ένα σώμα ροής μπορεί να συνεχίσει να χρησιμοποιεί τη σύνδεση πολύ αργότερα. Κρατήστε την άδεια έως ότου το σώμα καταναλωθεί ή η απάντηση κλείσει σύμφωνα με τη ροή εργασίας της εφαρμογής.

Οι ένθετοι διαχειριστές περιβάλλοντος κάνουν τον καθαρισμό ορατό όταν μια εξαίρεση ή ακύρωση εγκαταλείπει τη λειτουργία. Αποφύγετε τη χειροκίνητη απόκτηση και απελευθέρωση μόνο στο τέλος μιας επιτυχημένης συνάρτησης.

Τα όρια συνδέσεων απαντούν σε άλλο ερώτημα

Τα όρια της υποδοχής του aiohttp περιορίζουν τις συνδέσεις σύμφωνα με τους τεκμηριωμένους κανόνες της υποδοχής. Παραμένουν χρήσιμα δίπλα σε έναν σημαφόρο εφαρμογής. Ένα όριο συνδέσεων ανά προορισμό δεν εκφράζει, μόνο με το όνομά του, έναν προϋπολογισμό κοινό για όλους τους προορισμούς που έχουν ανατεθεί σε έναν διαμεσολαβητή.

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

Επιλέξτε ένα σταθερό, μη μυστικό αναγνωριστικό διαμεσολαβητή για αρχεία καταγραφής και μετρικές. Αν δύο URL που φέρουν διαπιστευτήρια αναφέρονται στην ίδια δεξαμενή χωρητικότητας, αποφασίστε αν πρέπει να μοιράζονται έναν προϋπολογισμό. Αντίστροφα, διαφορετικές θύρες ή λογαριασμοί μπορούν να αντιπροσωπεύουν ξεχωριστά όρια όταν ο φορέας τα τεκμηριώνει έτσι.

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

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