Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Python Προγραμματισμός

Τι είναι η Python GIL

; Εάν έχετε εργαστεί με την Python και θέλετε να αρχίσουν να πειραματίζονται με τις πιο προηγμένες τεχνικές προγραμματισμού , μαθαίνοντας για την παγκόσμια ασφάλεια διερμηνέα ( GIL ) είναι μια καλή ιδέα . GIL είναι ένας αλγόριθμος που χειρίζεται την εκτέλεση πολλαπλών νημάτων σε ένα πρόγραμμα Python . GIL είναι μια απαίτηση , όταν εργάζεστε με πολλαπλά threads , επειδή η διαχείριση μνήμης CPython δεν είναι νήμα-ασφαλή . Επιπλέον, η GIL έχει γίνει γνωστό να υποβαθμίσει μια παράσταση προγραμμάτων. Ένα παράδειγμα είναι ότι μπορεί να χρειαστεί περισσότερος χρόνος για τα δύο θέματα για να καλέσετε την ίδια λειτουργία από ένα νήμα καλώντας τη λειτουργία δύο φορές . Χρησιμοποιώντας GIL
Η

Σε ένα multi-threaded πρόγραμμα Python ένα νήμα που δεν μπορούν να έχουν πρόσβαση με ασφάλεια Python αντικείμενα , εκτός εάν η GIL συγκρατείται από το τρέχον νήμα . Η GIL κάνει βέβαιος ότι τα δύο θέματα είναι σωστά ενημέρωση οι αναφορές αντικείμενο που ονομάζεται . Για να αρχίσετε να χρησιμοποιείτε το GIL που χρειάζεστε για να σώσει την κατάσταση νήμα σε μια μεταβλητή θέση και να απελευθερώσει την παγκόσμια ασφάλεια διερμηνέα . Σε αυτό το σημείο μπορείτε να εκτελέσετε το κλείδωμα της λειτουργίας εισόδου /εξόδου σας και να επανακτηθεί η παγκόσμια κλειδαριά διερμηνέα , όταν αυτό είναι πλήρες . Τέλος , επαναφέρετε την κατάσταση νήμα από την τοπική μεταβλητή . Μπορείτε να χρησιμοποιήσετε το ακόλουθο παράδειγμα μακροεντολής για την απλοποίηση της διαδικασίας :

Py_BEGIN_ALLOW_THREADS ... Κάνετε κάποια παρεμπόδιση της λειτουργίας I /O ... Py_END_ALLOW_THREADS εικόνων
Κλήση Python κώδικα
Η

Συχνά είναι τα θέματα που δημιουργούνται από άλλες γλώσσες προγραμματισμού όπως η C και αν χρειαστεί να καλέσετε πολλαπλές νήματα , τότε θα πρέπει να χρησιμοποιήσετε GIL . Θα πρέπει πρώτα να εγγραφείτε αυτά τα θέματα με διερμηνέα μέσω μια κρατική δομή δεδομένων νήμα και στη συνέχεια να αποκτήσει την GIL . Για να απλοποιήσει αυτή τη διαδικασία , μπορείτε να χρησιμοποιήσετε το " PyGILState_Ensure ( ) " και " PyGILState_Release ( ) " λειτουργίες . Το ακόλουθο είναι ένα παράδειγμα για το πώς να εφαρμόσετε αυτήν την ιδέα:

PyGILState_STATE gstate ? Gstate = PyGILState_Ensure ( ) ;/* Εκτέλεση ενεργειών Python εδώ . * /αποτέλεσμα = CallSomeFunction ( ) ;/* αξιολογούν αποτέλεσμα ή να χειριστεί εξαίρεση * //* Αφήστε το νήμα. Δεν Python API επιτρέπεται πέρα από αυτό το σημείο . * /PyGILState_Release ( gstate ) ?

Η Python Κλωστές
Η

Στην Python ένα νήμα είναι ένα πραγματικό νήμα σύστημα όπως και κάθε άλλη εκτέλεση του προγράμματος . Κατά την εκτέλεση ενός νήματος Python δημιουργεί μια μικρή δομή δεδομένων με την κατάσταση διερμηνέα . Μετά από αυτό ένα νέο νήμα έχει ξεκινήσει και το αποκαλεί « PyEval_CallObject . " Το τελευταίο βήμα είναι μια απλή λειτουργία C που τρέχει ό, τι ορίζεται Python . Η GIL ελέγχει προσεκτικά κάθε εκτέλεση νήμα. Το ακόλουθο είναι ένα παράδειγμα ενός νήματος Python :

timeimport εισαγωγής threadingclass CountdownThread ( threading.Thread ) : def __ init__ ( self , μετράνε) : threading.Thread.__init__ ( αυτο) self.count = countdef run ( self ) : ενώ self.count > 0 : print " Αντίστροφη μέτρηση " , self.countself.count - = 1time.sleep ( 5 ) επιστρέφουν
εικόνων GIL Προβλήματα και αντικατάσταση
Η

Python developers έχουν συζητήσει την κατάργηση της GIL , αλλά έχουν τρέξει σε μερικές προκλήσεις . Ένα πρόβλημα που συχνά αναφέρεται με GIL είναι ότι εμποδίζει multithreaded προγράμματα CPython από την πλήρη αξιοποίηση των multi-core επεξεργαστές . Οποιαδήποτε αντικατάσταση GIL πρέπει να είναι απλή και ταυτόχρονη , όταν ασχολούνται με τα θέματα . Πρέπει να είναι ταχύτερη από ό, τι GIL και πρέπει να έχουν μια καλή συμβατότητα API . Ένα παράδειγμα για τη συμβατότητα API είναι να έχουμε καλή ανίχνευση κατά την απαρίθμηση των αντικειμένων που δείχνει .
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα