Python #29 - Multithreading Locks

preview_player
Показать описание
In diesem Tutorial zeige ich euch, wie man Threads in Python synchronisieren kann.

* *Meine Website mit allen anderen Kanälen und Newsletter* *:

_Discord:_

_Unterstützt mich - Danke!:_
Рекомендации по теме
Комментарии
Автор

Echt sehr gutes Tutorial. Respekt!! Meine Programmierkenntnisse frischen super auf. Danke.
'Ich habs euch vorenthalten, weil... ichs konnte' zu geil der Spruch :)

stephanreipert
Автор

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.

mrsarogaty
Автор

video == 'good'
if video == 'good':
print("video was perfect")




video was perfect

justmatrix-streams
Автор

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

tmirror
Автор

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 :-)

alexweissnicht
Автор

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

alexschmidt
Автор

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

tobiasputz
Автор

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.

nayjer
Автор

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.

jordanpischimarov
Автор

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)

warazaki
Автор

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?

RT-firb
Автор

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)?

nichtvonbedeutung
Автор

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 👋🏼

samwilson
Автор

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

moak
Автор

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?

merlekla
Автор

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?

pasadei
Автор

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.
Автор

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()"

Garybaldi
Автор

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

Katzenschale
Автор

Wieso muss man bei der instanzvariable wieder threading.Thread aufrufen?
Ich meine die Klasse erbt doch schon davon

polararmadillo