Echt sehr gutes Tutorial. Respekt!! Meine Programmierkenntnisse frischen super auf. Danke. 'Ich habs euch vorenthalten, weil... ichs konnte' zu geil der Spruch :)
@TheMorpheusTutorials7 жыл бұрын
Freut mich sehr, danke fürs zusehen :)
@mrsarogaty92768 жыл бұрын
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.
@TheMorpheusTutorials8 жыл бұрын
+Mr Sarogaty ich kanns versuchen ;) danke für den Hinweis
@justmatrix-streams13703 жыл бұрын
video == 'good' if video == 'good': print("video was perfect") ________________________________________ video was perfect
@justmatrix-streams13703 жыл бұрын
ich sehe grade das ich bei dem code "Video==good" einfach video='good' schreiben müsste haha
@maxbart13534 жыл бұрын
vielen dank für deine Videos
@TheMorpheusTutorials4 жыл бұрын
Ich danke fürs zusehen 😊
@tmirror70536 жыл бұрын
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
@TheMorpheusTutorials6 жыл бұрын
Danke :) Ja, da geb ich dir Recht, der Vollständigkeit halber hab ich mich doch dafür entschieden :D
@alexweissnicht95456 жыл бұрын
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 :-)
@TheMorpheusTutorials6 жыл бұрын
Gute Ideen, danke
@alexschmidt79035 жыл бұрын
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
@TheMorpheusTutorials5 жыл бұрын
Vielen Dank für den Tipp. Ich hatte überlegt dazu sogar eine ganze playlist zu machen, allerdings Sprachen unabhängig.
@alexschmidt79035 жыл бұрын
find ich gut. Finde deine Videos sehr unterhaltsam . Hoffe du machst noch ein bisschen KZbin weiter.@@TheMorpheusTutorials
@tobiasputz55503 жыл бұрын
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
@jordanpischimarov50518 жыл бұрын
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.
@TheMorpheusTutorials8 жыл бұрын
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.)
@jordanpischimarov50518 жыл бұрын
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?
@TheMorpheusTutorials8 жыл бұрын
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.
@merlekla51796 жыл бұрын
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?
@TheMorpheusTutorials6 жыл бұрын
Viele, ja :D Was interessiert dich denn?
@merlekla51796 жыл бұрын
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 :)
@TheMorpheusTutorials6 жыл бұрын
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
@merlekla51796 жыл бұрын
Das stimmt:) Danke
@moak40526 жыл бұрын
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
@TheMorpheusTutorials6 жыл бұрын
Hi, die Locks aus der Klasse sind sehr primitiv und lassen immer nur einen Thread durch, brauchst also mehrere Instanzen Grüße
@nayjer25763 жыл бұрын
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.
@jerry79133 жыл бұрын
uff
@Garybaldi743 жыл бұрын
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()"
@bjrnironside99483 жыл бұрын
Ja, offenbar wurde die Library mal geupdatet...mit is_alive funktioniert es zumindest
@easypy2 жыл бұрын
Was war eigentlich dein größtes Projekt mit multithreading @morpheus?
@stabilostifte35456 жыл бұрын
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?
@TheMorpheusTutorials6 жыл бұрын
kann man, sogar sehr viel schneller :) Das machen eigentlich alle gängigen Programme :)
@stabilostifte35456 жыл бұрын
@@TheMorpheusTutorials und wie genau kann ich das dann anwenden? Muss ich genau den gleichen code in den neuen thread schreiben?
@TheMorpheusTutorials6 жыл бұрын
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
@stabilostifte35456 жыл бұрын
Danke dir :)
@jlcreations39094 жыл бұрын
Super Video...wie immer. Aber gibt es nicht auch einfach eine Funktion, mit der man einen Thread direkt beenden kann.
@RT-fi7rb2 жыл бұрын
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 Жыл бұрын
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)
@samwilson94783 жыл бұрын
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 👋🏼
@smoban2 жыл бұрын
update: es hat funktioniert
@Katzenschale7 жыл бұрын
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
@TheMorpheusTutorials7 жыл бұрын
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.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.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
@nichtvonbedeutung3 жыл бұрын
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)?
@BigRoman868 жыл бұрын
Hi Morpheus, könntest du mir vllt nochmal erklären was eine Instanz ist? Medodio,13
@TheMorpheusTutorials8 жыл бұрын
+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?
@BigRoman868 жыл бұрын
Jo, danke für die schnelle Antwort!
@TheMorpheusTutorials8 жыл бұрын
+Medodio immer gerne doch =)
@polararmadillo55943 жыл бұрын
Wieso muss man bei der instanzvariable wieder threading.Thread aufrufen? Ich meine die Klasse erbt doch schon davon
@naheliegend52226 жыл бұрын
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...
@TheMorpheusTutorials6 жыл бұрын
Das ist im nächsten Video ;)
@naheliegend52226 жыл бұрын
Ah, n1ce1. :)
@-awwolf-6 жыл бұрын
Kann man einen Thread beenden obwohl dieser noch gar nicht komplett durchlaufen ist?
@TheMorpheusTutorials6 жыл бұрын
kannst du, ja. Ist aber ein bisschen komplizierter: stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread
@zprojolon52395 жыл бұрын
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
@TheMorpheusTutorials5 жыл бұрын
Kannst mir im Discord oder auf Facebook schreiben, da geht das ganz gut 🙂
@zprojolon52395 жыл бұрын
@@TheMorpheusTutorials Ok mach ich heute
@waldmeisterexperte6 жыл бұрын
Was mir gerade auffällt, die run Methode wird doch nie aufgerufen? Wie kann das funktionieren?
@TheMorpheusTutorials6 жыл бұрын
die wird intern in der Klasse aufgerufen
@waldmeisterexperte6 жыл бұрын
The Morpheus Tutorials Das heißt, in einer Thread Klasse werden Methoden auromatisch durchlaufen?
@TheMorpheusTutorials6 жыл бұрын
Klar. start ruft zB intern run auf (Python, die Sprache ist ja auch Code, btw sogar open Source, kannste dir auf Github ansehen)
@patrickg.36023 жыл бұрын
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...
@pasadei5 жыл бұрын
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?
@TheMorpheusTutorials5 жыл бұрын
Genau, das ist das verrückte an Multithreading. Man kann halt nicht sagen, in welcher Reihenfolge es kommt :)
@antonelakrafcsik28095 жыл бұрын
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
@waldmeisterexperte6 жыл бұрын
Wie kann man nur einen bestimmten anderen Thread sperren, anstatt alle anderen?
@TheMorpheusTutorials6 жыл бұрын
sleep?
@waldmeisterexperte6 жыл бұрын
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()“?
@TheMorpheusTutorials6 жыл бұрын
aso. self?
@waldmeisterexperte6 жыл бұрын
keine Ahnung
@francoschneider30065 жыл бұрын
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
@TheMorpheusTutorials5 жыл бұрын
Du darfst nicht run aufrufen, sondern musst start für threads nutzen :P
@xenon59936 жыл бұрын
Kapiere irgendwie die .join() Methode nicht xD Kann mir da vielleicht jemand weiterhelfen? Vielen Dank schonmal im Voraus :D
@xenon59936 жыл бұрын
Und macht Multithreading in Python überhaupt Sinn, bzw. wird es oft/gerne benutzt oder nicht? :D
@TheMorpheusTutorials6 жыл бұрын
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