Τι είναι το Mutithreading στο Python και πώς να το επιτύχετε;

Μάθετε τι είναι το multitasking στο python. Εξηγεί επίσης το multithreading πώς να δημιουργείτε νήματα χωρίς να δημιουργείτε τάξη, επεκτείνοντας την κλάση νήματος και χωρίς να την επεκτείνετε.

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



Ακολουθεί μια σύντομη περίληψη όλων των μεγάλων που καλύπτονται σε αυτό το άρθρο:



Τι είναι πολλαπλές εργασίες στο Python;
Τι είναι το νήμα;
Τι είναι το multithreading στο python;
Πότε να χρησιμοποιήσετε το multithreading στο Python;
Πώς να επιτύχετε το Multithreading στο Python;
Πώς να δημιουργήσετε νήματα στο Python;

Πλεονεκτήματα της χρήσης πολλαπλών νημάτων στο Python



γ ++ πίνακας ταξινόμησης σε αύξουσα σειρά

Κατ 'αρχάς, ας προσπαθήσουμε πρώτα να κατανοήσουμε το multitasking πριν αρχίσουμε να μαθαίνουμε για το Multithreading στο Python.

Τι είναι το Multitasking στο Python;

Το Multitasking, γενικά, είναι η ικανότητα εκτέλεσης πολλαπλών εργασιών ταυτόχρονα. Σε τεχνικούς όρους, το multitasking αναφέρεται στην ικανότητα ενός λειτουργικού συστήματος να εκτελεί διαφορετικές εργασίες ταυτόχρονα. Για παράδειγμα , κατεβάζετε κάτι στον υπολογιστή σας, καθώς ακούτε τραγούδια και ταυτόχρονα παίζετε ένα παιχνίδι κ.λπ. Όλες αυτές οι εργασίες εκτελούνται από το ίδιο λειτουργικό σύστημα σε συγχρονισμό. Αυτό δεν είναι παρά πολλαπλές εργασίες που όχι μόνο σας βοηθούν να εξοικονομήσετε χρόνο αλλά και να αυξήσετε την παραγωγικότητα.

Υπάρχουν δύο τύποι πολλαπλών εργασιών σε ένα λειτουργικό σύστημα:



  • Με βάση τη διαδικασία
  • Με βάση το νήμα

Σε αυτό το άρθρο, θα μάθετε για Με βάση το νήμα πολλαπλές εργασίες ή Πολλαπλών νημάτων .

Τι είναι το νήμα;

νήματα-πολυήματα σε python-edurekaΈνα νήμα είναι βασικά ένα ανεξάρτητος ροή εκτέλεσης. Μια μεμονωμένη διαδικασία μπορεί να αποτελείται από πολλά νήματα. Κάθε νήμα ενός προγράμματος εκτελεί μια συγκεκριμένη εργασία. Για παράδειγμα, όταν παίζετε ένα παιχνίδι λέτε FIFA στον υπολογιστή σας, το παιχνίδι στο σύνολό του είναι μια μεμονωμένη διαδικασία , αλλά αποτελείται από πολλά νήματα που είναι υπεύθυνα για την αναπαραγωγή της μουσικής, τη λήψη εισόδου από τον χρήστη, την εκτέλεση συγχρονισμού του αντιπάλου, κλπ. Όλα αυτά είναι ξεχωριστά νήματα που είναι υπεύθυνα για την εκτέλεση αυτών των διαφορετικών εργασιών στο ίδιο πρόγραμμα.

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

Έτσι, ελπίζω να έχετε καταλάβει σαφώς τι είναι ένα νήμα. Προχωρώντας, ας δούμε τι είναι το Multithreading στο Python.

Πότε να χρησιμοποιήσετε το Multithreading στο Python;

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

Επομένως, το multithread μπορεί να χρησιμοποιηθεί μόνο όταν δεν υπάρχει εξάρτηση μεταξύ μεμονωμένων νημάτων.

Αυτό το άρθρο δείχνει περαιτέρω πώς μπορείτε να επιτύχετε το Multithreading στο Python.

Πώς να επιτύχετε το Multithreading στο Python;

Το multithreading στο Python μπορεί να επιτευχθεί με την εισαγωγή του σπείρωμα μονάδα μέτρησης.

Πριν εισαγάγετε αυτήν την ενότητα, θα πρέπει να την εγκαταστήσετε. Για να το εγκαταστήσετε στο περιβάλλον σας anaconda, εκτελέστε την ακόλουθη εντολή στη γραμμή εντολών του anaconda:

conda install -c conda-forge tbb

Μετά την επιτυχή εγκατάστασή του, μπορείτε να χρησιμοποιήσετε οποιαδήποτε από τις ακόλουθες εντολές για να εισαγάγετε την ενότητα νημάτων:

εισαγωγή σπειρώματος από εισαγωγή σπειρώματος *

Τώρα που έχετε εγκαταστήσει την ενότητα σπειρώματος, ας προχωρήσουμε και να κάνουμε το Multithreading στο Python.

Πώς να δημιουργήσετε νήματα στο Python;


Τα νήματα στο Python μπορούν να δημιουργηθούν με τρεις τρόπους:

  1. Χωρίς δημιουργία τάξης
  2. Με την επέκταση της κλάσης νήματος
  3. Χωρίς επέκταση της κλάσης νήματος

Χωρίς δημιουργία τάξης

Το multithreading στο Python μπορεί να επιτευχθεί χωρίς τη δημιουργία τάξης. Εδώ είναι ένα παράδειγμα για να δείξετε το ίδιο:

Παράδειγμα:

από εισαγωγή νήματος * print (current_thread (). getName ()) def mt (): print ('Child Thread') child = Thread (target = mt) child.start () print ('Όνομα νήματος εκτέλεσης:', current_thread ( ) .getName ())

Παραγωγή:

pl sql φροντιστήριο για αρχάριους
MainThread Child Thread Εκτέλεση ονόματος νήματος: MainThread

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

Τώρα ας προχωρήσουμε και να δούμε πώς να κάνουμε Multithreading στο python επεκτείνοντας την κλάση Thread.

Επεκτείνοντας την κλάση νήματος:

Όταν δημιουργείται μια θυγατρική τάξη με την επέκταση της κλάσης νήματος, η θυγατρική τάξη αντιπροσωπεύει ότι ένα νέο νήμα εκτελεί κάποια εργασία. Κατά την επέκταση της κλάσης νήματος, η θυγατρική τάξη μπορεί να παρακάμψει μόνο δύο μεθόδους, δηλαδή τη μέθοδο __init __ () και τη μέθοδο εκτέλεσης (). Καμία άλλη μέθοδος δεν μπορεί να παρακαμφθεί εκτός από αυτές τις δύο μεθόδους.

Ακολουθεί ένα παράδειγμα για τον τρόπο επέκτασης της κλάσης νήματος για τη δημιουργία ενός νήματος:

Παράδειγμα:

εισαγωγή νήματος εισαγωγής κλάση χρόνου εισαγωγής mythread (threading.Thread): def run (self): for x in range (7): print ('Hi from child') a = mythread () a.start () a.join () print ('Αντί από', current_thread (). GetName ())

Παραγωγή:
Γεια από παιδί
Γεια από παιδί
Γεια από παιδί
Γεια από παιδί
Γεια από παιδί
Γεια από παιδί
Γεια από παιδί
Αντίο από το MainThread

Το παραπάνω παράδειγμα δείχνει ότι η κλάση myclass κληρονομεί την κλάση νήματος και η θυγατρική τάξη, δηλαδή το myclass παρακάμπτει τη μέθοδο εκτέλεσης. Από προεπιλογή, η πρώτη παράμετρος οποιασδήποτε συνάρτησης κλάσης πρέπει να είναι μόνη που είναι ο δείκτης του τρέχοντος αντικειμένου. Η έξοδος δείχνει ότι το θυγατρικό νήμα εκτελεί τη μέθοδο εκτέλεσης () και το κύριο νήμα περιμένει να ολοκληρωθεί η εκτέλεση του παιδιού. Αυτό συμβαίνει λόγω της λειτουργίας join (), η οποία κάνει το κύριο νήμα να περιμένει το παιδί να τελειώσει.

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

Χωρίς επέκταση κλάσης νήματος

Για να δημιουργήσετε ένα νήμα χωρίς να επεκτείνετε την κλάση νήματος, μπορείτε να κάνετε τα εξής:
Παράδειγμα:

από εισαγωγή νήματος * class ex: def myfunc (self): #self απαραίτητο ως πρώτη παράμετρος σε κλάση func για x στην περιοχή (7): print ('Child') myobj = ex () thread1 = Thread (target = myobj. myfunc) thread1.start () thread1.join () print ('ολοκληρώθηκε')

Παραγωγή:

Παιδί
Παιδί
Παιδί
Παιδί
Παιδί
Παιδί
Παιδί
Ολοκληρώθηκε

Το θυγατρικό νήμα εκτελεί το myfunc μετά το οποίο το κύριο νήμα εκτελεί την τελευταία δήλωση εκτύπωσης.

Πλεονεκτήματα της χρήσης σπειρώματος

Το multithreading έχει πολλά πλεονεκτήματα μερικά από τα οποία είναι τα εξής:

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

Εδώ είναι ένα παράδειγμα για να ελέγξετε πόσο καιρό χρειάζεται για να εκτελεστεί ένας κώδικας με και χωρίς multithreading στο python:

 Παράδειγμα: 
χρόνος εισαγωγής def sqr (n): for x in n: time.sleep (1) x% 2 def cube (n): for x in n: time.sleep (1) x% 3 n = [1,2,3 , 4,5,6,7,8] s = time.time () sqr (n) cube (n) e = time.time () εκτύπωση

Παραγωγή:

16.042309284210205

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

Παράδειγμα:

εισαγωγή νήματος από νήμα εισαγωγή * χρόνος εισαγωγής def sqr (n): for x in n: time.sleep (1) print ('Υπόλοιπο μετά από διαίρεση με 2', x% 2) def cube (n): for x in n: time.sleep (1) print ('Υπόλοιπο μετά από διαίρεση με 3', x% 3) n = [1,2,3,4,5,6,7,8] start = time.time () t1 = Νήμα ( target = sqr, args = (n,)) t2 = Νήμα (target = cube, args = (n,)) t1.start () time.sleep (1) t2.start () t1.join () t2.join () end = time.time () εκτύπωση (end-start)
Παραγωγή: 9.040220737457275

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

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

δομή δεδομένων και αλγόριθμος σε Java

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

Για να μάθετε σε βάθος την Python μαζί με τις διάφορες εφαρμογές της, μπορείτε να εγγραφείτε ζωντανά με υποστήριξη 24/7 και πρόσβαση σε όλη τη διάρκεια ζωής.