Python #29 - Multithreading Locks

  Рет қаралды 30,821

The Morpheus Tutorials

The Morpheus Tutorials

Күн бұрын

Пікірлер: 79
@stephanreipert6359
@stephanreipert6359 7 жыл бұрын
Echt sehr gutes Tutorial. Respekt!! Meine Programmierkenntnisse frischen super auf. Danke. 'Ich habs euch vorenthalten, weil... ichs konnte' zu geil der Spruch :)
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
Freut mich sehr, danke fürs zusehen :)
@mrsarogaty9276
@mrsarogaty9276 8 жыл бұрын
Endlich mal jemand der das gut erklärt. Wäre nur schön, wenn du die Sachen die du erklärst öfter an Beispielen zeigst.
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
+Mr Sarogaty ich kanns versuchen ;) danke für den Hinweis
@justmatrix-streams1370
@justmatrix-streams1370 3 жыл бұрын
video == 'good' if video == 'good': print("video was perfect") ________________________________________ video was perfect
@justmatrix-streams1370
@justmatrix-streams1370 3 жыл бұрын
ich sehe grade das ich bei dem code "Video==good" einfach video='good' schreiben müsste haha
@maxbart1353
@maxbart1353 4 жыл бұрын
vielen dank für deine Videos
@TheMorpheusTutorials
@TheMorpheusTutorials 4 жыл бұрын
Ich danke fürs zusehen 😊
@tmirror7053
@tmirror7053 6 жыл бұрын
Schöne Videoreihe. Hat mir geholfen schnell Python für ein Praxisprojekt an der Universität zu lernen. Hatte als Basis schon andere Programmiersprachen wie Java, C oder auch Scala. Nebenläufigkeit scheint mir recht gut im Rahmen von Python von dir erklärt zu sein. Nur bitte ich dich um eine Sache: Zeig niemals!!!! aktives Warten. Das ist so ziemlich das größte Unglück was man in der Nebenläufigkeit anrichten kann xD
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Danke :) Ja, da geb ich dir Recht, der Vollständigkeit halber hab ich mich doch dafür entschieden :D
@alexweissnicht9545
@alexweissnicht9545 6 жыл бұрын
Hey, ich habe mich die letzte Zeit etwas weiter(über die Tutorial Serie) mit Python beschäftigt und ich hätte einige Ideen zu diesem Thema: Multiprocessing(Basics, Pools, Shared Memory) Und auch noch Queues. Nur sone Idee, wenn du noch was zur Playlist hinzufügen möchtest :-)
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Gute Ideen, danke
@alexschmidt7903
@alexschmidt7903 5 жыл бұрын
ich fändes gut wenn du sowas in einem immer noch einfachen Programm nochmal behandelst um zu zeigen wo man Multithreading so einsetzen kann. Ich kann mir schon vorstellen wie man es in seinen Projekten nutzen kann. Aber die Verwirklichung fällt mir schwerer. Wäre nett wenn ja , du ein Video machst wo du vielleicht zeigst wie du an einem Projekt arbeitest und solche Themen die du in dem Kurs/Kursen behandelst noch mehr praxis nah zeigst. ist aber nur eine Anregung
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Vielen Dank für den Tipp. Ich hatte überlegt dazu sogar eine ganze playlist zu machen, allerdings Sprachen unabhängig.
@alexschmidt7903
@alexschmidt7903 5 жыл бұрын
find ich gut. Finde deine Videos sehr unterhaltsam . Hoffe du machst noch ein bisschen KZbin weiter.@@TheMorpheusTutorials
@tobiasputz5550
@tobiasputz5550 3 жыл бұрын
Hey Morpheus, Nur dass ich es auch wirklich richtig verstehe. x.join() macht also dass der Main Thread auf den x thread warten muss und dann erst ausgeführt wird oder? Und kannst du mir nochmal erklären was passiert wenn man einen thread lockt? Werden dann alle anderen Threads blockiert bis der fertig ist? lg tobi
@jordanpischimarov5051
@jordanpischimarov5051 8 жыл бұрын
Hi Morpheus, kurze Frage zur variablen/objekt lockMe. Diese wird im main block erstellt und dann in der Klasse genutzt. Müsste die variable/objekt nicht übergeben werden beim erstellen der Instanz oder woher kennt die Klasse Fred den lockMe.
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
wir nutzen das Lock hier als globale Variable, damit beide Threads dasselbe Lock nutzen. Eine Klassenvariable wäre aber auch möglich. (Als Instanzvariable geht es allerdings nicht, da es sonst nicht dasselbe Lock ist.)
@jordanpischimarov5051
@jordanpischimarov5051 8 жыл бұрын
Also das funktioniert weil die Klasse und die Lock Variable in der gleichen Datei sind und das reicht auch für das Beispiel. Wenn man die Klasse myFred aber in eine extra Datei steckt (was bei größeren Projekten unumgänglich werden kann) wie gebe ich den Threads die gleiche Lock Variable? Ok dann ziehe ich die globale Variable einfach mit in die andere Datei oder bin ich ganz auf den Holzweg?
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
Das Lock hat mit dem Thread erstmal nichts zu tun. Das Lock hat eher was mit dem Code zu tun, auf den der Thread zugreift. Daher ja, das was du tun wolltest passt.
@merlekla5179
@merlekla5179 6 жыл бұрын
Hallo, vielleicht hast du Ideen was man für den Anfang (diese Playlist als Kenntnis) schon praktisch Programmieren kann? Halt hauptsächlich zum üben, oder wo man am besten weiter macht?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Viele, ja :D Was interessiert dich denn?
@merlekla5179
@merlekla5179 6 жыл бұрын
Grundsätzlich Software Engineering, das ist wahrscheinlich sehr allgemein aber ich möchte erstmal eine Programmiersprache lernen und dann weiterschauen. Übrigens danke für die schnelle Antwort :)
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Okay, also ein Projekt, das sich sehr leicht sehr gut erweitern lässt, wäre ein Vokabeltrainer, den ich ja schon angefangen habe :) Ansonsten - Web Apps haben immer nen praktischen Nutzen, Scripts, die du für dich persönlich brauchen kannst natürlich noch mehr
@merlekla5179
@merlekla5179 6 жыл бұрын
Das stimmt:) Danke
@moak4052
@moak4052 6 жыл бұрын
Hallo Morpheus, kann durch ein LockMe.acquire nur jeweils ein Thread durch? Können mehrere Thread parallel durch das selbe lock gehen oder muss man mehrere Locks-Instanzen erstellen ? Vielen Dank für deine Videos
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Hi, die Locks aus der Klasse sind sehr primitiv und lassen immer nur einen Thread durch, brauchst also mehrere Instanzen Grüße
@nayjer2576
@nayjer2576 3 жыл бұрын
Mal ne Frage: Wenn ich meine Threads durch eine Vorschleife aufrufe ist ja eine .join() Methode witzlos oder? Weil die Schleife zum Mainthread gehört? Habs auch getestet ohne join gehts schneller.
@jerry7913
@jerry7913 3 жыл бұрын
uff
@Garybaldi74
@Garybaldi74 3 жыл бұрын
t1.isAlive() oder t1.is_alive() Ich weiß nicht ob es damals mit dem ersten funktionierte. 2021 funktioniert jedoch nur der Aufruf mit "is_alive()"
@bjrnironside9948
@bjrnironside9948 3 жыл бұрын
Ja, offenbar wurde die Library mal geupdatet...mit is_alive funktioniert es zumindest
@easypy
@easypy 2 жыл бұрын
Was war eigentlich dein größtes Projekt mit multithreading @morpheus?
@stabilostifte3545
@stabilostifte3545 6 жыл бұрын
Hey :) Wenn man mit multithreading die ausfürungsdauer des codes für die Fibonacci zahl verkürzen kann, kann man dann nicht auch brute-force attacken viel schneller durchführen?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
kann man, sogar sehr viel schneller :) Das machen eigentlich alle gängigen Programme :)
@stabilostifte3545
@stabilostifte3545 6 жыл бұрын
@@TheMorpheusTutorials und wie genau kann ich das dann anwenden? Muss ich genau den gleichen code in den neuen thread schreiben?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Also wir hatten ja eine sehr billige Version der Fibonacci-Berechnung in dem Video zu rekursiven Funktionen. Du kannst jetzt theoretisch hergehen und fib(n-1) oder fib(n-2) jeweils mit nem neuen Thread berechnen. Dadurch entstehen aber sehr schnell viele Threads und effzient isses immer noch nicht wirklich. Du kannst auch, wenn du die rekurrente Art nutzen willst, jede Zahl in ihrem eigenen Thread berechnen lassen. Am effizientesten ist es jedoch tatsächlich ohne Multithreading, indem du eine Liste pflegst, in die immer die neueste Zahl eingefügt wird. also [0,1] --> [0,1,1] --> [0,1,1,2].... da musst du die alten Fibs nämlich gar nicht neu berechnen sondern nur auslesen
@stabilostifte3545
@stabilostifte3545 6 жыл бұрын
Danke dir :)
@jlcreations3909
@jlcreations3909 4 жыл бұрын
Super Video...wie immer. Aber gibt es nicht auch einfach eine Funktion, mit der man einen Thread direkt beenden kann.
@RT-fi7rb
@RT-fi7rb 2 жыл бұрын
Also bedeutet lock.aquire quasi: Alle anderen Threads warten, bis die die Anweisung zwischen aquire und release fertig ist. In der Zeit schlafen die anderen Threads? Wie kann die Schleife dann funktionieren? Denn das erste lock sorgt dafür, dass das 2. lock gar nicht ausgeführt wird? Ist das eine falsche Überlegung?
@warazaki5305
@warazaki5305 Жыл бұрын
Kann es sein das mit python 3 irgendwas verändert wurde? Weil bei mir der erste Thread gleichzeitig mit dem zweiten beendet und gestartet wird (so siehts aus: Beende Starte 12)
@samwilson9478
@samwilson9478 3 жыл бұрын
Hey 👋🏼 Wäre es auch möglich, eine thread Klasse zu erstellen mit verschiedenen Methoden? So das thread 1 und thread 2 was total unterschiedliches machen? Habe nämlich eine Klasse mit mehreren Funktionen welche ich jetzt per threads aufrufen möchte. Ziel ist es eigentlich nur einen Mutterthread zu haben welche die einzelnen Funktionen aufruft. Bisher sehe ich aber nur, dass man alle Funktionen einzeln mit jeweils einem thread aufruft. Wohingegen ich einen thread mit einer Funktion beliebig oft duplizieren kann mittels for Schleife Sowas geht ja beispielsweise nicht: t= threading.Thread(target=do_smth, target= do_was_anderes, args=[1], args=[2]) Grüße 👋🏼
@smoban
@smoban 2 жыл бұрын
update: es hat funktioniert
@Katzenschale
@Katzenschale 7 жыл бұрын
Hey Morpheus, ich möchte einen Loop bauen, im dem die gleiche Instanz mehrmals hintereinander gestartet wird ( Sie läuft aber nicht gleichzeitig mehrmals ). Bekomme den Fehler, dass Threads nur einmal gestartet werden können. Lässt sich das irgendwie lösen? LG
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
Du kannst denselben Thread nur einmal starten, aber du kannst einen 2. Thread bauen, der dieselbe Funktion aufruft. Dadurch würdest du das wohl erreichen, was du möchtest
@patrickFREE.
@patrickFREE. 4 жыл бұрын
nochmal zur Wiederholung, weil Multithreading etwas schwerer ist als eine If bedienung. Die .join() Funktion sagt an, dass der Thread die höchste Piorität hat und erst wenn er mit der run-Methode fertig ist, laufen die anderen Threads wieder. Das bedeutet doch, dass es in diesem Fall ein Single Thread ist, da alle anderen gerade pausieren oder ? die .aquire() Funktion sperrt den Weg in der run Funktion, d.h. wenn ein Thread .acquire() aufgerufen hat, müssen die anderen Threads in der run Methode an dem Punkt .acquire() warten bis es wieder releast/freigegeben wurde. ist das so richtig ?
@patrickFREE.
@patrickFREE. 2 жыл бұрын
Nein es ist kein Single Thread und nein es hat nicht die höchste Piorität. Der Thread blockt mit join() nur die Funktion.der Run-Funktion für den Mainthread. Die vorher aufgerufenen Threads würden trotz des Join-Befehls weiterlaufen
@nichtvonbedeutung
@nichtvonbedeutung 3 жыл бұрын
Ist es überhaupt praktikabel, Threads itself zu sperren? Wäre es nicht viel praktikabler Programmabschnitte, auf die mehrere Threads zugreifen zu sperren (vgl. z.B. synchronized in Java)?
@BigRoman86
@BigRoman86 8 жыл бұрын
Hi Morpheus, könntest du mir vllt nochmal erklären was eine Instanz ist? Medodio,13
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
+Medodio Hey, wenn du eine Klasse geschrieben hast, ist eine Instanz ein Objekt der Klasse. Also zb Hund a = Hund(), dann ist a eine Instanz der Klasse Hund =) passt das?
@BigRoman86
@BigRoman86 8 жыл бұрын
Jo, danke für die schnelle Antwort!
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
+Medodio immer gerne doch =)
@polararmadillo5594
@polararmadillo5594 3 жыл бұрын
Wieso muss man bei der instanzvariable wieder threading.Thread aufrufen? Ich meine die Klasse erbt doch schon davon
@naheliegend5222
@naheliegend5222 6 жыл бұрын
Wie kriege ich ein return value aus meinen Threads in der main? Also sodass ich den return vom thread1 dann in den thread2 schmeißen kann...
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Das ist im nächsten Video ;)
@naheliegend5222
@naheliegend5222 6 жыл бұрын
Ah, n1ce1. :)
@-awwolf-
@-awwolf- 6 жыл бұрын
Kann man einen Thread beenden obwohl dieser noch gar nicht komplett durchlaufen ist?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
kannst du, ja. Ist aber ein bisschen komplizierter: stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread
@zprojolon5239
@zprojolon5239 5 жыл бұрын
The Morpheus Tutorials ich ein problem in mein script den die "def start_server" wird einfach so ausgefürt ohne das ich sie aufrufe. Kannst du mir da helfen oder wie ich dir den script zeigen kann kommentieren geht schlecht der sript ist 60 zeilen gro? dewegen
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Kannst mir im Discord oder auf Facebook schreiben, da geht das ganz gut 🙂
@zprojolon5239
@zprojolon5239 5 жыл бұрын
@@TheMorpheusTutorials Ok mach ich heute
@waldmeisterexperte
@waldmeisterexperte 6 жыл бұрын
Was mir gerade auffällt, die run Methode wird doch nie aufgerufen? Wie kann das funktionieren?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
die wird intern in der Klasse aufgerufen
@waldmeisterexperte
@waldmeisterexperte 6 жыл бұрын
The Morpheus Tutorials Das heißt, in einer Thread Klasse werden Methoden auromatisch durchlaufen?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Klar. start ruft zB intern run auf (Python, die Sprache ist ja auch Code, btw sogar open Source, kannste dir auf Github ansehen)
@patrickg.3602
@patrickg.3602 3 жыл бұрын
Also habe ich das richtig verstanden... Alle Threads laufen gleichzeitig ab und sobald in einem Thread lockMe.acquire aufgerufen wird, pausieren alle anderen bis zum lockMe.release ...? Wäre cool wenn das kurz jemand bestätigen/verbessern könnte...
@pasadei
@pasadei 5 жыл бұрын
Bei mir verlauft das (Video 4:49) anders. Meine Ausgabe sieht folgend aus: Starte 1 Beende Starte 2 1 Beende 2 Beende Main Fred oder Starte 1 Beende Starte 1 2 Beende 2 Beende Main Fred Normale Ausgabe wie bei dir habe ich gar nicht Also "Starte 2" kommt irgendwie zwischen Wörter "Beende" und "1". Das ist sehr komisch. So wie ich verstehe funktioniert das so: Python ausführt print (thread 1) und gibt "Beende " aus (Zeile 15 Video) und abfragt nach self.iD, Python gleichzeitig denkt, dass erste schon fertig ist, deswegen startet er währenddessen den zweiten thread und das passiert so schnell, dass Ausgabe des print des zweiten Thread ("Starte ") kommt früher als Thread 1 self.iD bekommen und ausgegeben hat. Tippfehler habe ich keine, hab schon mehrmals geprüft. Ich habe das gelöst durch Sleep um 0.00001s nach dem lockMe.acquire(), was meiner Meinung nach keine gute Lösung ist. Hast du Ideen, warum sowas auftreten kann und wie man das richtig beseitigt?
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Genau, das ist das verrückte an Multithreading. Man kann halt nicht sagen, in welcher Reihenfolge es kommt :)
@antonelakrafcsik2809
@antonelakrafcsik2809 5 жыл бұрын
Es komm wie im Video raus wenn du print("Beende ", self.ID) lockMe.release() eingibst, also diese 2 einfach von der Reihenfolge her vertauscht. So hats bei mir funtkioniert
@waldmeisterexperte
@waldmeisterexperte 6 жыл бұрын
Wie kann man nur einen bestimmten anderen Thread sperren, anstatt alle anderen?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
sleep?
@waldmeisterexperte
@waldmeisterexperte 6 жыл бұрын
The Morpheus Tutorials Naja, wenn ich es richtig verstanden habe, kann man mit lock alle anderen Threads Sperren, bis man sie wieder freigibt. Gibt es auch sowas wie ein „lockMe.acquire(Irgend_ein_anderer_Thread)“ oder ein „lockMe.acquire. Irgend_ein_anderer_Thread()“?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
aso. self?
@waldmeisterexperte
@waldmeisterexperte 6 жыл бұрын
keine Ahnung
@francoschneider3006
@francoschneider3006 5 жыл бұрын
hey dude ne spass hallo Morpheus eine frage weist du warum mein code nicht funktioniert und ich immer einen runtime error bekomme import threading import time class myFred(threading.Thread): def __init__(self, lol, name): threading.Thread.__init__(self) self.lol = lol self.name = name def run(self): print("start", self.lol) time.sleep(2) print("beende", self.name) t1 = myFred(1, "thread 1") t2 = myFred(2, "Thread 2") lockMe = threading.Lock() t1.run() t2.run() t1.join() t2.join() print("Mainthread beendet") Traceback (most recent call last): File "dateipfad", line 24, in t1.join() File "dateipfad", line 1039, in join raise RuntimeError("cannot join thread before it is started") RuntimeError: cannot join thread before it is started bitte um eine schnelle antwort lg franco
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Du darfst nicht run aufrufen, sondern musst start für threads nutzen :P
@xenon5993
@xenon5993 6 жыл бұрын
Kapiere irgendwie die .join() Methode nicht xD Kann mir da vielleicht jemand weiterhelfen? Vielen Dank schonmal im Voraus :D
@xenon5993
@xenon5993 6 жыл бұрын
Und macht Multithreading in Python überhaupt Sinn, bzw. wird es oft/gerne benutzt oder nicht? :D
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Multithreading macht Sinn ja ;) Vor allem weil Python häufig für rechenintensive Anwendungen genutzt wird. x.join() pausiert den Thread, der die Methode aufruft einfach so lange, bis der Thread in der Variablen x beendet wurde
@xenon5993
@xenon5993 6 жыл бұрын
Achso, vielen Dank :D
Python #30 - Kommunikation zwischen Threads
8:48
The Morpheus Tutorials
Рет қаралды 26 М.
Python #35 - Vokabeltrainer
19:51
The Morpheus Tutorials
Рет қаралды 26 М.
小丑揭穿坏人的阴谋 #小丑 #天使 #shorts
00:35
好人小丑
Рет қаралды 46 МЛН
Walking on LEGO Be Like... #shorts #mingweirocks
00:41
mingweirocks
Рет қаралды 6 МЛН
Python #28 - Multithreading
11:06
The Morpheus Tutorials
Рет қаралды 58 М.
Python 3.13 ist da: Endlich ECHTES Multithreading!
25:28
The Morpheus Tutorials
Рет қаралды 23 М.
#06 Python Tutorial | Schleifen
21:48
Dennis Jan Vogt
Рет қаралды 85
Python #27 - Exceptions
12:21
The Morpheus Tutorials
Рет қаралды 30 М.
«Осень». Самая большая загадка Windows XP
14:36
Девять десятых
Рет қаралды 1,1 МЛН
Python #32 - Lambda und Map
7:26
The Morpheus Tutorials
Рет қаралды 27 М.
Python #34 - Logging
17:33
The Morpheus Tutorials
Рет қаралды 22 М.
Python #25 - Überschreibung von Attributen und Methoden
7:48
The Morpheus Tutorials
Рет қаралды 33 М.
5 Good Python Habits
17:35
Indently
Рет қаралды 597 М.
小丑揭穿坏人的阴谋 #小丑 #天使 #shorts
00:35
好人小丑
Рет қаралды 46 МЛН