Python #28 - Multithreading

  Рет қаралды 58,790

The Morpheus Tutorials

The Morpheus Tutorials

Күн бұрын

In diesem Tutorial zeige ich euch die Grundlagen von Multithreading in Python.
Playlist: • Python Tutorials Deutsch
* Meine Website mit allen anderen Kanälen und Newsletter *:
the-morpheus.de/
Discord:
the-morpheus.d...
Unterstützt mich - Danke!:
www.patreon.co...
www.paypal.me/...

Пікірлер: 163
@pfeynman3827
@pfeynman3827 7 ай бұрын
Das ist wirklich ein Riesenvorteil gegenüber JavaScript! JavaScript ist ja SingleThreaded und man muss über Async / Await oder Promises und dann Callbacks oder WebWorkern Multithreading simulieren. Sehr gutes Video!
@electreeks4089
@electreeks4089 3 жыл бұрын
Das bisher einfachste und beste Beispiel, was ich über Threading, Async und co gesehen habe. Danke :)
@zondaken
@zondaken 3 жыл бұрын
async =/= threading
@PProgress
@PProgress 4 жыл бұрын
Wieso check alles erst, wenn ich mir die Probleme in Python ansehe? Wieso ist Python so einfach? Wieso sind deine Video so geil?
@MrGreen-wc3my
@MrGreen-wc3my 7 жыл бұрын
Richtig nice! Hab mir jetzt nen Portscanner gebaut, der theoretisch unendlich viele Threads gleichzeitig laufen lassen kann :D 1024 Threads gleichzeitig hat mein Router noch geschafft, mehr hab ich nicht getestet. 45000 Ports in ~15-20 Sekunden...
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
sehr geil :)
@wilhelmwilhelm1251
@wilhelmwilhelm1251 4 жыл бұрын
1:14 Wegen des GIL (Global Interpreter Lock) laufen alle Threads auf einem Kern. Dieser Vorteil besteht nur mit dem Multiprozessing Package. Trotzdem vielen Dank für deine Videos!
@TheMorpheusTutorials
@TheMorpheusTutorials 4 жыл бұрын
Jap, hab ich auch gemerkt, deswegen hab ich das zu multiprocessing nachgereicht. Wobei man ja meist 2 threads pro Kern laufen lassen kann
@doktorsalami9315
@doktorsalami9315 5 жыл бұрын
Grooooßartig. Ich liebe es!!! Endlich der geile Scheiß :D
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
❤️
@Vlad-Ra
@Vlad-Ra 3 жыл бұрын
Bruda Deutsches Tutorial! +Speed fuer mein Programm
@eyriusbacterius
@eyriusbacterius 6 жыл бұрын
Wenn Python die einfachste Programmiersprache ist, will ich gar nicht wissen wie C++ ist ... :D
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
:D Willst du nicht
@Kutzti
@Kutzti 5 жыл бұрын
C++ ist halt echt riesig. Das beste Beispiel, was ich gehört habe, um das zu verdeutlichen, ist Folgendes: "Nur weil zwei Leute sagen, dass sie C++ richtig gut können, heißt das nicht, dass sie sich auf das "gleiche" C++ berufen." :D
@NavidErde
@NavidErde 3 жыл бұрын
C++ ist aber garnicht die am schwierigsten zu beherrschende Sprache. Sprechen wir mal über Cobol, ABAP oder Fortran :D
@FilmfanOliver1992
@FilmfanOliver1992 3 жыл бұрын
@@NavidErde Oder Assembler
@Colaholiker
@Colaholiker 3 жыл бұрын
Als Embedded-Entwickler bin ich in C (ohne ++) fit, und hab auch schon diverse Assembler "durchgespielt", aber C++ meide ich, wie der Teufel das Weihwasser. Hab mal reingeschnuppert, und es war ein Erlebnis wie wenn man im Sommer bei der vollen Biotonne den Deckel öffnet. ;-)
@tamptus3479
@tamptus3479 7 ай бұрын
Wegen dem global Interpreter lock (GIL) können Threads nicht auf Kerne aufteilt werden. Es ändert sich in python 12 A Per-Interpreter GIL PEP 684 und in python 13 PEP 554 - Multiple Interpreters in the Stdlib
@justmatrix-streams1370
@justmatrix-streams1370 3 жыл бұрын
wow seid 1 woche habe ich es nicht 100 % verstanden jetzt sitze ich in italien und schaue es auf meinem handy und endlich verstehe ich es wow
@Kig_Ama
@Kig_Ama 4 жыл бұрын
2:40 Brauchst du in der Zeile eigentlich das thrreading.Thread? Hätte es nicht ausgereicht einfach nur Thread zu schreiben? Und warum schreibst du import threading und nicht beispielsweise from threading import Thread?
@Alex.U.H.
@Alex.U.H. 6 жыл бұрын
Hi danke für dein Video hat auf jeden fall schon mal sehr geholfen. Ich habe jetzt ein etwas Komplexere Klasse (Klasse_A) die mir etwas Physikalisches berechnet. Zusätzlich habe ich mir eine weitere Klasse (Klasse_B) fürs threading programmiert: Klasse_B " class Calc_Threading(threading.Thread): """Description: Klasse die eine übergebene Funktion als Thread verarbeitet. Gebaeude enhält folgende Methoden: run: Run startet die übergebene Funktion. """ def __init__(self, ID, func, dict_parameter, laenge_items=None): threading.Thread.__init__(self) self.ID = ID self.calc_func = func self.dict_parameter = dict_parameter self.int_laenge_items = laenge_items def run(self): """Description: Methode stößt die Berechnung der übergebenen Funktion an. Input: Kein Input Output: Kein Output """ print("Thread Nr. " + str(self.ID) + " ist gestartet") self.calc_func(self.dict_parameter) print("Thread Nr. " + str(self.ID) + " ist beendet") if self.int_laenge_items: printProgressBar(self.ID + 1, self.int_laenge_items, prefix="Ladebalken", suffix="100 %", length=50) " Diese benutzte ich an mehreren stellen in Klasse_A die Klasse_B um Prozesse zu paralesieren. Ich habe immmer dran gedacht die threads zu joinen mit: " for obj_Prozess_Thread in list_threads: obj_Prozess_Thread.join() " Ich vermute jetzt das es daran liegt das ich zu viele Threads parallel offen habe, die CPU ist allerdings nicht ganz ausgelastet und bewegt sich in der Spitze bei ca. 30%. Schon mal einer eine ähnliches Problem gehabt?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Jap, das macht Sinn. Threads laufen trotz allem nur (zumindest bei den meisten Architekturen) auf einem Kern. Darauf dann aber laufen 2 Threads auf einmal. D.h. du kannst einen Kern voll auslasten, wenn du vier Kerne hast (ich zB hab das) kannst du also theoretisch 8 Threads laufen lassen, bräuchtest dazu aber 4 Prozesse. Prozesse funktionieren etwas anders, aber man kann sichs grob zumindest so vorstellen, in Chrome läuft jeder Tab als eigener Prozess. Die können dafür aber halt auch fast nicht miteinander kommunizieren. Zu deinem Problem, limitier einfach die Liste list_threads auf len(100) oder so, dann passiert da eigentlich nichts mehr
@Alex.U.H.
@Alex.U.H. 6 жыл бұрын
Danke das probierre ich mal direkt aus, hätte ich auch selbst drauf kommen können. Andere Frage die sich jetzt noch ergeben hat, führt theading immer das so aus wie er mag oder kann ich das einstellen wie die threads auf die Kerne verteilt werden? Ich hätte 4 Kerne und würde gerne so viel rechnen lassen wie es nur geht. Danke!
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Threading macht das immer so, aber es gibt auch noch das Multiprocessing Interface, das kannst du auch mal probieren
@DAG0SH
@DAG0SH 7 жыл бұрын
Sehr tolles Tutorial, du erklärst wirklich gut und die Beispiele sind verständlich und einfach. Wirklich Top :) Mich würde interessieren, wie ich ein Skript in Loop betreibe, z.B. einen Durchlauf pro Sekunde. Eine Whileschleife mit True finde ich pers. unschön, vll. geht das eleganter..
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
Vielen Dank :) Wenn du getimte Abläufe brauchst kannst du import time nutzen. time.time() liefert dir dann die Zeit zurück.
@RT-fi7rb
@RT-fi7rb 2 жыл бұрын
Hi, deine Videos sind sehr gut. Danke dafür. Ich hätte hier eine Frage. Soweit ich verstehe entstammt die Methode "start()" der Klasse "threading.Thread". Diese Methode startet die Funktion "run()" also muss immer eine Funktion "run()" in dem Thread enthalten sein. Stimmt das? Außerdem teilt die Methode "start()" selbsttätig die Funktion einem Prozessorkern zu? Die Main Methode läuft ebenfalls auf irgendeinem Kern. Es könnte aber auch sein, dass bei mehreren Methoden die Methoden auf denselben Kernen ablaufen und somit die Prozesse der Reihe nach ablaufen oder?
@Hmmmmgh
@Hmmmmgh 4 жыл бұрын
Also Ich hab versucht zwei verschiedene text dateien gleichzeitig mit viel text zu füllen und ohne multithreading war python schneller fertig. Sollte es nicht beim multithreading schneller sein well die text dateien parallel gefüllt werden?
@sgtnik4871
@sgtnik4871 7 жыл бұрын
Hey Morpheus, ich hoffe du bekommst auch bei so alten Videos noch Fragen mit :) ich würde um pythons arbeitsweise etwas mehr zu verstehen gerne ein klassisches read-modify-write problem erzeugen. Wie in Java wenn 2 Thread einen static int +1 machen und am ende 200 rauskommen soll, es aber z.b 198 werden. Bekomme das bei Python irgendwie nicht hin :/ Ps: Geile Videos, werde in Softwaretechnik dieses Semester Haskell lernen und freue mich schon dass du da eine Reihe vorbereitet hast ^^
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
Hi, klar bekomme ich noch Fragen mit ;) Die werden nach Neuigkeit der Frage nicht des Videos geordnet :) Für so ein Problem brauchst du eine globale Variable, dann sollte es gehen. Wo genau liegt das Problem? Danke :)
@easypy
@easypy 2 жыл бұрын
Threading kann man z.B super mit sockets kombinieren :)!
@magictime1258
@magictime1258 4 жыл бұрын
ich komm mit diesen ganzen import Sachen bisschen durcheinander. Wie kann ich wissen, welche es da gibt usw?
@user-kq5cd7bd3o
@user-kq5cd7bd3o 3 жыл бұрын
in der eingabeaufforderung: pip list
@cielregister8828
@cielregister8828 6 жыл бұрын
danke c: das ist so nützlich!!
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
:D Oh ja
@FilmfanOliver1992
@FilmfanOliver1992 2 жыл бұрын
Kann man einem Thread nachträglich sprich nach dem Start noch Parameter übergeben ?
@xXSkyWalkerXx1
@xXSkyWalkerXx1 5 жыл бұрын
Sag Mal, welche IDE benutzt du eigentlich? Hätte auch gern das mit den automatischen Vorschläge an Funktionen, aber bei der Python IDE hat das bei mir Macken - Mal kommt sowas, Mal nicht.
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Ich nutze eigentlich immer PyCharm. Video dazu ist auch hier in der Playlist
@executeOrder69
@executeOrder69 5 жыл бұрын
Hallo The Morpheus Tutorials, erst einmal vielen Dank für deine zahlreichen guten Tutorials für Python! Die haben mir schon oft weitergeholfen. Könntest du deine Python-Reihe um ein Video zur Bibliothek *Asyncio* erweitern? Liebe Grüße!
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
ist geplant :D
@executeOrder69
@executeOrder69 5 жыл бұрын
@@TheMorpheusTutorials Das freut mich! Vielen Dank! :D
@adsasdsdasdasd3079
@adsasdsdasdasd3079 8 жыл бұрын
Hey! Erstmal danke für die Tutorials. Allerdings ist mir hier etwas unklar und ich hoffe, dass du es mir erklären kannst. (Siehe Code unten) 1. Wozu benötige ich den Konstruktor in der zweiten Zeile? Hätte ich die Attribute nicht auch so erstellen können? 2.Was ist das für ein Konstruktor, der dort aufgerufen wird? Du sagtest ja Oberklassenkonstruktor aber was ist das? 3. Worin besteht der Sinn den Variablen nochmal ihren eigenen Wert zuzuweisen? Oder habe ich da was falsch verstanden? Ich hoffe, dass du mir antwortest auch wenn die Tutorials vielleicht schon ein bisschen länger her sind. class myThread(threading.Thread): def __init__(self, iD, name): threading.Thread.__init__(self) self.iD = iD self.name = name
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
Hey, zu 1) Der Konstruktor macht, dass die Variablen keine statischen, sondern "normale" Instanzvariablen sind. (Gibt ein eigenes Video dazu, später in der Playlist, da wirds nochmal detailliert erklärt) zu 2) Die Klasse myThread erbt von der Klasse Thread aus dem Modul threading. Das ist ihr Konstruktor. Das bedeutet myThread erhält alle Methoden und Variablen, die die Klasse Thread auch hat. (Gibt auch dazu ein bzw. mehrere Videos =) ) zu 3) du weißt den Variablen nicht nochmal ihren eigenen Wert zu, das wäre tatsächlich unsinnig =) Der Konstruktor von myThread übernimmt zusätzliche Parameter, die nur genauso heißen, wie die Variablennamen. Unterscheiden kannst du sie durch das self vorne dran. self.*** heißt es ist eine der Instanzvariablen, ohne das self sinds die Parameter (bzw. lokale Variablen, wenns keine Parameter mit dem Namen gibt.) Hoffe, das hat geholfen? Grüße
@adsasdsdasdasd3079
@adsasdsdasdasd3079 8 жыл бұрын
Hat mir geholfen :) eine Frage habe ich allerdings noch. Wozu wird der Schritt in der 4 und 5 Zeile denn benötigt? Also das self.iD = iD self.name = name Und nochmal danke für die schnelle und ausführliche Anwort :)
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
gerne doch. mit den 2 Schritten erstellst und initialisierst du die Instanzvariablen. Das sind normalerweise Variablen wie etwa in der Klasse Hund die Gliedmaßen oder seine Rasse als String oder den Namen oder so. In unserem Fall haben wir die glaube ich nicht weiter verwendet, aber du hast überall in der Klasse darauf Zugriff.
@adsasdsdasdasd3079
@adsasdsdasdasd3079 8 жыл бұрын
Danke dir! Dieser Channel ist einfach perfekt. Danke für deine ganze Arbeit
@AlexanderLueftl
@AlexanderLueftl 2 жыл бұрын
Würde der Code noch funktionieren wenn man die run() Methode umbenennt?
@YSmedvednikova
@YSmedvednikova 5 жыл бұрын
"Die run-Methode wird von start-Methode aufgerufen". Bedeutet das, dass run-Meth. immer "run" und nicht anders heißen soll (sprich ist für diesen Fall "Standardname")? Braucht man sie unbedingt? Und wenn ja, gibt's etwas, was in die run-Methode nicht geschrieben werden darf, was vielleicht die start-Methode "stören" könnte?
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Die Start-Methode erstellt im Hintergrund noch mehr, wie eben den Threadkontext etc. Deswegen können wir die nicht überschreiben. Es muss immer die run-Methode überschrieben werden und die start-Methode zum starten genutzt werden. Es gibt aber auch andere Pakete mit denen das einfacher geht, die zeige ich später. Es ist allerdings nützlich es zu wissen, deswegen hier so
@YSmedvednikova
@YSmedvednikova 5 жыл бұрын
@@TheMorpheusTutorials Alles klar, vielen Dank für die Antwort!!
@mondree_526
@mondree_526 2 жыл бұрын
Meine Ausgabe war erst durcheinander weil ich eine leere Codezeile (22) hatte. Als ich diese löschte war die Ausgabe korrekt aber beim zweiten Durchlauf war die Ausgabe wieder durcheinander. Was gibt es hier näher zu beachten oder unter welchen Schlagwörtern kann ich dazu spezifische Informationen finden?
@mondree_526
@mondree_526 2 жыл бұрын
Mit t1.join() funktioniert alles wunderbar aber mit lockMe. läuft das wieder alles durcheinander. Ich belasse es erstmal dabei.
@vany6877
@vany6877 3 жыл бұрын
Super Video! Aber noch eine kurze Frage; Wieso kommt das "Beende Main Fred" nur nach dem ersten Thread, und nicht mehr nach dem zweiten? Entschuldige, Multithreading ist komplett neu für mich und ich muss da erstmal durchblicken. 😂
@user-kq5cd7bd3o
@user-kq5cd7bd3o 3 жыл бұрын
Die Threads führen nur das aus, was hinter "def run(self):" eingerückt steht. Die Zeile, in der "Beende Main Thread " steht wird von ihnen nicht berücksichtigt. Nur der "Main Thread" führt alles einmal von oben nach unten aus
@naheliegend5222
@naheliegend5222 6 жыл бұрын
IDLE gibt mir: Starte Starte Beende Main Fred 12 >>> Beende 1 Beende 2 aus. Da passt irgendwas nicht mit der Ausgabe... oder?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Das schon passieren. Wenn der Main Thread gestoppt wird werden nur die Grade aktiven Befehle noch zu Ende geführt
@radiaspro4582
@radiaspro4582 6 жыл бұрын
Same here, ich glaube, das liegt daran, dass die Threads gleichzeitig gestartet und dann untereinander dargestellt werden. Von oben nach unten also: "Starte 1", "Starte 2" und dazwischen noch "Beende Main Fred", da das direkt nach den Starts noch vom Main Thread selbst ausgeführt wird. Beende 1 & 2 gibt's dann wieder nacheinander, weil das nicht gleichzeitig passiert bzw. Fred 2 ganze 3 Sekunden länger braucht. Was man gegen die seltsame Darstellung tun kann, weiss ich auch nicht, vielleicht den einen Thread um eine Millisekunde beim start verzögern? #HilfUnsBitteMorpheus...
@moritzpainz1839
@moritzpainz1839 5 жыл бұрын
warum ändert sich die Reihenfolge, wenn ich nicht die start benutze (die btw wovon erbt oder ist die eine in Python "automatisch?)? Wenn man nämlich die run Methode benutzt, sieht die Ausgabe in der Konsole folgender maßen aus: starte thread1 beende thread1 starte thread2 beende thread2 beende Main Fred Danke schon mal für die Antwort :D
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Jap, wenn du run ausführst, ist das einfach nur dein Code völlig nicht parallel, das heißt kein Multithreading. start() handelt das Threading für dich und ruft, wenn die Kontexte erstellt wurden und alles bereit ist, run() im echten neuen Thread auf.
@luiswiederhold5522
@luiswiederhold5522 5 жыл бұрын
Das mit dem __init__ kommt nicht will nicht so richtig in meinen Kopf also ist es dazu da um Dinge näher zu bestimmen oder um Variablen welche in der __init__ Funktion stehen schneller zu ändern oder wie soll ich mir das vorstellen ? Lg Luis
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Das ist quasi eine Funktion, die direkt beim Erstellen des Objektes automatisch aufgerufen wird. Dort kannst Du Variablen, auf die Deine Klasse Zugriff haben soll, festlegen
@ubiquitousjoke5526
@ubiquitousjoke5526 6 жыл бұрын
bei diesem skript führt er die unterste while schleife irgendwie immer aus, obwohl Fred.plussing gleich False gesetzt wird, als das Level 10 oder größer war. kann mir einer sagen wieso? from threading import Thread import time class Fred(Thread): level = 0 plussing = True def run(self): #(Fred.plussing is self.plussing) ergibt True while True: if self.level >= 10: self.plussing = False print('Gut, du hast ein Level von 10 erreicht!') break thread1 = Fred() thread1.start() while Fred.plussing: print(Fred.level) plus = int(input('Um wie viel möchtest du dein Level erhöhen? > ')) Fred.level += plus
@ubiquitousjoke5526
@ubiquitousjoke5526 6 жыл бұрын
hat keiner 'ne ahnung?
@Banchuba
@Banchuba 8 жыл бұрын
Sehr geil. Könnte ich da auch Buttons später mal mit einbeziehen, so dass ich mit dem einen thread was berechnen lasse, und mit dem underen button, dann eine Suche für Google aus dem gleichen MainProgramm starte, ohne dass ich praktisch 2 Programme brauche, und die sozusagen, gleichzeitig laufen lassen kann über eine GUI?
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
auf jeden Fall =)
@Banchuba
@Banchuba 8 жыл бұрын
Cool, dann hab ich gerade meine Lösung gefunden, falls ich das überhaupt noch programmiert bekomme :-) Danke!
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
viel Erfolg!
@Banchuba
@Banchuba 8 жыл бұрын
Na mit Hilfe Deinen Videos wird das hoffentlich was :-)
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
klar doch ;)
@hexodon5540
@hexodon5540 4 жыл бұрын
Hi Morpheus, ich habe ein Problem mit einer Fehlermeldung die erscheint, obwohl mein script mit deinem übereinstimmt. Die Fehlermeldung sieht wie folgt aus: C:\Snek\Python>python Basics[+]\seccondTry.py Traceback (most recent call last): File "Basics[+]\seccondTry.py", line 15, in t1 = myFred(1, "t1") File "C:\Users\Jesko\AppData\Local\Programs\Python\Python38-32\lib\threading.py", line 784, in __init__ assert group is None, "group argument must be None for now" AssertionError: group argument must be None for now Irgend welche Ideen woher das kommen könnte? Danke im vorraus :D
@TheMorpheusTutorials
@TheMorpheusTutorials 4 жыл бұрын
nunja, ich würde mal sagen, es ist trotzdem irgendwo ein Fehler drin :D Kannst mal auf Discord schreiben, ohne Code weiß ich das leider nicht
@hexodon5540
@hexodon5540 4 жыл бұрын
@@TheMorpheusTutorials Ok danke. Ich habe nach dem ich den Code ca 30x durchgelesen habe gemerkt, dass ich __init__ zuerst mit doppel "N" geschrieben habe. *seuftz* Danke dir trotzdem :D Die Videos sind echt gut erklärt ^^
@franzmeier4472
@franzmeier4472 4 жыл бұрын
2:23 so sieht's also in meinem Kopf aus...
@TheMorpheusTutorials
@TheMorpheusTutorials 4 жыл бұрын
😂
@PenguinTrinity
@PenguinTrinity 5 жыл бұрын
btw. print() ist nicht threadsafe. wenn der host-thread ausläuft ists vorbei mit printen
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Jap, deswegen eignet es sich aber trotzdem für Demonstrationen sehr gut. Wenns Thread-Safe wäre könnte ichs nicht zeigen :D
@PenguinTrinity
@PenguinTrinity 5 жыл бұрын
@@@TheMorpheusTutorials Sry war nicht gut ausgedrückt. wollte mich nicht beschwären das video ist gut. ist mir nur durch den Kopf gegangen da ich das auf der Arbeit erst gesehen hab. Mach weiter so Morpheus!
@Alex.U.H.
@Alex.U.H. 6 жыл бұрын
Man nutzt dann also das Modul threading immer zusammen in einer Klasse oder? Also wenn ich etwas berechnen möchte würde ich also eine Klasse schreiben in der alles in der Methode .run() abgearbeitet werden muss oder? Grüße! Gutes Video ^^
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
In threading gibt's auch noch andere coole Sachen, zB nen asynchronen Timer. Den musst du dann natürlich nicht in deine Klasse einbauen ;) Danke :)
@Alex.U.H.
@Alex.U.H. 6 жыл бұрын
Ja lese mich gerade in das Thema ein weil ich das für die Arbeit brauche. Interessant finde ich den Ansatz mit multiprocessing das man so auch auf mehrere Kerne zugreifen kann. Das mit den asynchronen Time packe ich mal auf meine Todo liste!
@Mondkraft
@Mondkraft 8 жыл бұрын
Ich benutze ja das Python IDLE. Ich musste aber meine Linuxterminal benutzen damit das Programm richtig ausgeführt wird. Übers IDLE sah das Programm nach dem Aussführen komisch aus. Ich musste es durch Strg und C abbrechen. Übers Terminal ging es hingegen problemlos. Woran könnte das liegen? Starte Starte Beende Main Fred 12 >>> Beende 1 Beende 2 KeyboardInterrupt >>>
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
das ist komisch, vielleicht läuft da beim Spawnen von den Threads was schief..
@transzendenz1774
@transzendenz1774 6 жыл бұрын
9:10 Haben wir denn nun 3 Threads insgesamt, also den Haupthtread + t1 + t2?
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
jup
@clone4621
@clone4621 3 жыл бұрын
@@maki7495 der erste thread und der zweite werden zetigleich gestartet. der erste zählt bis 3 und stoppt dann. der zweite thread zählt bis 6 und stoppt dann. der zweite wartet nicht bis der erste fertig ist sondern fängt mit ihm an
@Faceglitch
@Faceglitch 3 жыл бұрын
@@maki7495 er multipliziert die Zeit im time.sleep() mit der ID, also 1x3 für t1 und 2x3 für t2
@_juniorcoder
@_juniorcoder 4 жыл бұрын
Bei mir Sartet sich der 2 thread während sich der Main Thread schliesst, dass sieht dann so aus: Starte 1 Starte Beende Main Thread 2 Beende 1 Beende 2
@TheMorpheusTutorials
@TheMorpheusTutorials 4 жыл бұрын
Du kannst t.join() nutzen, um auf einen thread zu warten 👍
@alexweissnicht9545
@alexweissnicht9545 6 жыл бұрын
def __init__(self): threading.Thread.__init__(self) Muss man das machen? Es funktioniert bei mir auch ohne diesen Codeblock oder bietet es Vorteile? Danke im Vorraus Lg, Alex
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Brauchst es nicht zwingend so machen, aber dadurch wird der thread beim initialisieren der Instanz auch initialisiert.
@xXSkyWalkerXx1
@xXSkyWalkerXx1 6 жыл бұрын
Mit dem Konstruktor "__init__" sagst dem Programm ja, bei der interpretierung/ausführung, dass er das was da im Konstruktor steht (so sage ich das jetzt mal) vor allen "Nichtkonstruktoren" ausgeführt wird, richtig? Wozu aber, jedenfalls in diesem Beispiel? Bzw in welchem Bsp. hat das Sinn das als erstes interpretieren/ausführen zu lassen? Ich weiß, wozu diese "Funktion" dient (gibts auch bei GPC, wenn du das kennst), aber in deinem Beispiel verstehe ich einfach den Sinn/Zusammenhang der Verwendung nicht? :D PS. fand dein "Joke" witzig, auch wie du es rübergebracht hast. ^^ Beim Roboter oder so, da könnte man es verwenden, dass er z.b erstmal checkt, ob alles an ihm funktioniert oder so... EDIT: Haha! "Dann nehme ich mal 42." Schreibst aber 74. :D
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Du meinst beim Multithreading? Da kannst du dem Thread Variablen mitgeben, die du später in der Ausführung verarbeiten kannst. Beispiel Bildverarbeitung: Jeder Thread verarbeitet einen Pixel. Dann kannst du hier festlegen, um welchen Pixel sich der Thread kümmern soll
@neolouker9822
@neolouker9822 5 жыл бұрын
Was ist eigentlich deine Quelle für die Videos, du hast ja am Anfang des Videos darauf hingewiesen ? Wäre toll wenn man alles nochmal nachlesen könnte ^^
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Oh speziell für einzelne Videos weiß ich das leider nicht mehr.. Aber generell die Doku, Bücher und die Uni
@neolouker9822
@neolouker9822 5 жыл бұрын
@@TheMorpheusTutorials Ah okay, danke ^^
@simonurbons9590
@simonurbons9590 2 жыл бұрын
Hey Morpheus, ersteinmal vielen Dank für die mega guten Videos. Gibt es eine Möglichkeit einen Thread zu beenden vom Mainthread aus? Also ich habe eine Gui in der ein Berechnungsthread als Endlosschleife läuft... Ja das ist so gewollt. Wenn ich über das rote Kreuz mein Fenster schließe läuft der Berechnungsthread weiter. Wie kann ich den beenden?
@TheMorpheusTutorials
@TheMorpheusTutorials 2 жыл бұрын
Hey, mit thread.exit() sollte das machbar sein.
@simonurbons9590
@simonurbons9590 2 жыл бұрын
@@TheMorpheusTutorials oh... Ich hab es immer mit Thread.stop probiert 🙊🙈
@simonurbons9590
@simonurbons9590 2 жыл бұрын
@@TheMorpheusTutorials ich hab es mal ausprobiert eben. Thread hat nicht das Attribut exit. Ich bin echt ratlos.
@thorinspruceshield9279
@thorinspruceshield9279 2 жыл бұрын
@@simonurbons9590 hast du exit vielleicht in die klammer geschrieben?
@mikys1128
@mikys1128 3 жыл бұрын
👍👍👍🙂
@pwolz91
@pwolz91 8 жыл бұрын
Kann man unbegrenzt viele threads gleichzeitig laufen lassen?
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
+Patrick Wolz kann man schon, aber du musst bedenken, dass du nicht unendlich viele CPU-Kerne hast, also werden bei 4 Kernen und 16 Threads trotzdem immer nur 4 wirklich gleichzeitig ausgeführt. Die andren warten.
@pwolz91
@pwolz91 8 жыл бұрын
+The Morpheus ok. Danke für die schnelle Antwort!
@e.b.3396
@e.b.3396 8 жыл бұрын
Hi Morpheus, obwohl mein Code genau wie bei dir aussieht, bekomme ich in der Konsole (IDLE) dieses Ergebnis: Starte die Zahl Beende myFred 1Starte die Zahl >>> 2 Beende die 1 Beende die 2 Hast du evtl. eine Erklärung dafür?
@TheMorpheusTutorials
@TheMorpheusTutorials 8 жыл бұрын
hast du sicher keinen Tippfehler? Dass die Ausgaben zeitlich sich unterscheiden ist normal (das ist quasi der Sinn von Threads, dass das asynchron läuft) aber ich bin nicht ganz sicher, was "die Zahl" ist. Naja, wie dem auch sei, die Tatsache, dass du überhaupt ne Ausgabe hast, heißt doch schonmal, dass du mehrere Threads am laufen hast :)
@e.b.3396
@e.b.3396 8 жыл бұрын
Sorry für die verspätete Antwort. Es hat mich nur gewundert, dass bei dir alle Operationen untereinander standen und bei mir gab es zunächst einen Print, der eine Zeile ausgegeben hat, in der irgendwie alles durcheinander steht und erst die Beendigungen untereinander standen.
@hayjaydee873
@hayjaydee873 5 жыл бұрын
Hi wie kann ich wenn ich z.b einen socket "s" habe und auf daten = s.recv(256) warte mein programm weiterlaufen lassen
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Da bist du genau bei dem richtigen Video 👍 schreib für den socket einen thread und das was weiterlaufen soll, lässt du im main thread laufen
@hayjaydee873
@hayjaydee873 5 жыл бұрын
@@TheMorpheusTutorials danke für die mega schnelle antwort 👍👍👍 ok ich probier es mal
@k0rwin916
@k0rwin916 3 жыл бұрын
Hey, ganz kurze ne (vielleicht doofe) Frage, wieso wird denn die run Methode direkt ausgeführt ohne das diese irgendwo aufgerufen wird? Hoffe mir kann hierzu noch jemand Helfen, danke im Voraus :)
@elian145
@elian145 3 жыл бұрын
7:15 Die Run Methode wird standardmäßig in der Start Methode des Threads ausgeführt. D.h. sie wird innerhalb dieser geerbten Start Methode ausgeführt
@k0rwin916
@k0rwin916 3 жыл бұрын
@@elian145 also ist das ein festgelegter Funktionenname ähnlich wie init? Also wenn die Methode anders heißt geht es nämlich nicht mehr
@elian145
@elian145 3 жыл бұрын
@@k0rwin916 aus den threading docs: "Once a thread object is created, its activity must be started by calling the thread’s start() method. This invokes the run() method in a separate thread of control." D.h. es funktioniert nur wenn die Methode run heißt. (so die Theorie... um das einfach zu überprüfen könnte man es auch einfach ausprobieren)
@k0rwin916
@k0rwin916 3 жыл бұрын
@@elian145 alles klar, vielen Dank. Habe dad schon ausprobiert es geht mit anderem Namen nicht, dann weiß ich jetzt aber wieso
@elian145
@elian145 3 жыл бұрын
​@@k0rwin916 falls du mit dem englischen klar kommst sind die Docs immer ne gute Anlaufstelle falls Verständnisprobleme aufkommen (aber gerade für Anfänger teilweise auch sehr abstrakt... also du musst dir nichts aufzwingen) und sind wir mal ehrlich: Wir alle fühlen uns wie Anfänger wenn wir die Docs eines neuen Themas lesen, also sei unbesorgt
@tection2688
@tection2688 6 жыл бұрын
Hallo, habe den Programmcode 1:1 abgetippt, bekomme aber folgende Fehlermeldung in der Konsole: Traceback (most recent call last): File "C:\Users\Tom\Desktop\python\threading.py", line 2, in import threading File "C:\Users\Tom\Desktop\python\threading.py", line 6, in class myFred(threading.Thread): AttributeError: module 'threading' has no attribute 'Thread' Hat jemand eine Idee? Vielen Dank schon mal :)
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
:D Ja, ich seh grade was passiert ist. Du hast deine Python-Datei threading genannt. Damit überschreibst du den Modulnamen, sprich wenn du jetzt threading importierst, importierst du deine eigene Datei gleich nochmal. Die hat die Klasse Thread natürlich nicht
@tection2688
@tection2688 6 жыл бұрын
Ah ok, ich danke dir!
@giancahe8202
@giancahe8202 6 жыл бұрын
Funktioniert das eigentlich auch auf einer Raspberry Pi?
@giancahe8202
@giancahe8202 6 жыл бұрын
Ich meinte ob Multithreading auch auf einer Raspberry Pi funktioniert
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
achso, klar, auch die neueren Modelle des Pi haben Mehrkernprozessoren
@alexschmidt7903
@alexschmidt7903 5 жыл бұрын
gutes video
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Danke dir 🙂
@alexschmidt7903
@alexschmidt7903 5 жыл бұрын
:)@@TheMorpheusTutorials
@eyriusbacterius
@eyriusbacterius 6 жыл бұрын
Hmm, ich versteh irgw nicht genau was import threading macht
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Das Modul threading laden :D
@eyriusbacterius
@eyriusbacterius 6 жыл бұрын
Oh ... xD Ehm.. danke :D
@yasyasmarangoz3577
@yasyasmarangoz3577 3 жыл бұрын
@@TheMorpheusTutorials Gibt es zu den schon existenten Modulen ein Video? Ich habe keine Ahnung welche es gibt und was die machen.
@peterwacker9297
@peterwacker9297 7 жыл бұрын
Ja die Threads sind manchmal zufällig habe gerade das als output: ('Starte '('Starte ', , 1)3) ('Beende ', 1) ('Beende ', 3) :o
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
da können die witzigsten Sachen passieren.
@michahuhn8943
@michahuhn8943 7 жыл бұрын
Zitat: " *Freds* sind cool" :D :D
@TheMorpheusTutorials
@TheMorpheusTutorials 7 жыл бұрын
Fred ist der MVP des Programmierens :D
@michahuhn8943
@michahuhn8943 7 жыл бұрын
The Morpheus Tutorials :D Ich mag die threads auch. "Fred du bist ein ganz lieber!" :D :D
@jankurd410
@jankurd410 3 жыл бұрын
Ich check immer noch nicht was ein Thread ist
@sylus121
@sylus121 4 жыл бұрын
(Lesezeichen)
@transzendenz1774
@transzendenz1774 6 жыл бұрын
5:00 Kann man damit nicht einen Virus schreiben, der ein Prozess des Betriebssystems lahm legt :D
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Naja, schon, ja. Aber da gibts noch schlimmere Sachen,w enn du wirklich Code ausführen kannst.
@samuelspittler575
@samuelspittler575 3 жыл бұрын
Der Prozessor i7 9700k kann auch nur auf einem seiner Kerne arbeiten da bringt das nur die Möglichkeit das die Arbeit aufgeteilt wird und nicht immer eine feste Reinfolge hat
@justmatrix-streams1370
@justmatrix-streams1370 3 жыл бұрын
was hast du eigentlich immer mit der 42 haha (ist ein joke)
@rawezhhama699
@rawezhhama699 5 жыл бұрын
Ich habe immer noch nicht verstanden, was Thread ist 😂😂.
@TheMorpheusTutorials
@TheMorpheusTutorials 5 жыл бұрын
Hm, ich probiere es noch mal : Du hast in deiner CPU mehrere Kerne. Die können gleichzeitig code ausführen. Ein thread kann auf einem Kern laufen. Wenn du mehrere threads hast, laufen die auf mehreren Kernen. Dein Programm wird schneller 👍 zumindest grob ist das korrekt. An alle Profis : ja ist mir bewusst, dass es nicht 100% stimmt so.
@rawezhhama699
@rawezhhama699 5 жыл бұрын
The Morpheus Tutorials danke für deine Antwort und noch eine Frage: Muss man Thread immer im Programm schreiben oder ist das optional?
@cielregister8828
@cielregister8828 6 жыл бұрын
def start(): s1.run() l1.run() äh... warum wird bei mir nur s1 ausgeführt?
@cielregister8828
@cielregister8828 6 жыл бұрын
fehler gefunden
@cielregister8828
@cielregister8828 6 жыл бұрын
s1.start() l1.start() :)
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
^^ okay, gut :)
@rizentm6001
@rizentm6001 5 жыл бұрын
Könnt sich dumm anhören aber wie weit bist du jetzt nach 1nem Jahr gekommen?ßßßßßßßßßßßßßßßßßßß
@universallappen1033
@universallappen1033 6 жыл бұрын
U D E M Y
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
Ja, ich weiß, die Werbung nervt, sorry :D
@universallappen1033
@universallappen1033 6 жыл бұрын
Find die Werbung eher lustig, weil sie ein offensichtlicher Scam ist.
@TheMorpheusTutorials
@TheMorpheusTutorials 6 жыл бұрын
:D
@heiligepommesbude9555
@heiligepommesbude9555 3 жыл бұрын
Kommt bei mir auch immer. Vorallem mit sonem Typen, der einem einen "Hacking-Kurs" verkaufen will
@yasyasmarangoz3577
@yasyasmarangoz3577 3 жыл бұрын
@@heiligepommesbude9555 lol
@headnut22
@headnut22 Жыл бұрын
myFred xD
@marcojahn2564
@marcojahn2564 Жыл бұрын
Sei doch nicht so hektisch....bitte plane deine Videos etwas, du wirkst so,als würdest du dir die Inhalte erst in dem Moment einfallen lassen, wo du sie codest.
@justmatrix-streams1370
@justmatrix-streams1370 3 жыл бұрын
sry aber wer disliked das
@TheMorpheusTutorials
@TheMorpheusTutorials 3 жыл бұрын
ich wars nicht^^
Python #29 - Multithreading Locks
9:50
The Morpheus Tutorials
Рет қаралды 30 М.
Python Tutorial #52 - Sockets [GERMAN/DEUTSCH]
23:30
The Morpheus Tutorials
Рет қаралды 36 М.
POV: Your kids ask to play the claw machine
00:20
Hungry FAM
Рет қаралды 16 МЛН
У ГОРДЕЯ ПОЖАР в ОФИСЕ!
01:01
Дима Гордей
Рет қаралды 8 МЛН
My daughter is creative when it comes to eating food #funny #comedy #cute #baby#smart girl
00:17
Python #35 - Vokabeltrainer
19:51
The Morpheus Tutorials
Рет қаралды 26 М.
Tic Tac Toe in Python programmieren
8:05
PyJa
Рет қаралды 122
Python #27 - Exceptions
12:21
The Morpheus Tutorials
Рет қаралды 29 М.
Warum IT-Security so schlecht läuft
16:24
The Morpheus Tutorials
Рет қаралды 28 М.
Python #24 - Vererbung
8:42
The Morpheus Tutorials
Рет қаралды 53 М.
Python Tutorial #43 - Generatoren und Yield
14:46
The Morpheus Tutorials
Рет қаралды 18 М.
ICH HABE ENDLICH MEINE TRAUMHALLE!
25:22
MARIDE GARAGE
Рет қаралды 1,9 М.
Python Tutorial #23 - Instanz- und Klassenvariablen
6:58
The Morpheus Tutorials
Рет қаралды 54 М.