Ich bin etwas verwirrt darüber, ob Multithreading in Python funktioniert oder nicht.
Ich weiß, dass es viele Fragen dazu gab und ich habe viele davon gelesen, aber ich bin immer noch verwirrt. Ich weiß aus eigener Erfahrung und habe gesehen, dass andere hier auf StackOverflow ihre eigenen Antworten und Beispiele veröffentlicht haben, dass Multithreading in Python tatsächlich möglich ist. Warum sagen alle immer wieder, dass Python von der GIL gesperrt ist und immer nur ein Thread gleichzeitig ausgeführt werden kann? Es funktioniert eindeutig. Oder gibt es einen Unterschied, den ich hier nicht bekomme?
Viele Poster / Befragte erwähnen auch immer wieder, dass das Threading begrenzt ist, da nicht mehrere Kerne verwendet werden. Aber ich würde sagen, dass sie immer noch nützlich sind, weil sie gleichzeitig arbeiten und somit die kombinierte Arbeitslast schneller erledigen. Ich meine, warum sollte es sonst überhaupt ein Python-Thread-Modul geben?
Aktualisieren:
Vielen Dank für alle bisherigen Antworten. Ich verstehe, dass Multithreading für einige E / A-Aufgaben nur parallel ausgeführt wird, für CPU-gebundene Mehrkernaufgaben jedoch jeweils nur eine.
Ich bin mir nicht ganz sicher, was dies für mich in der Praxis bedeutet, daher gebe ich nur ein Beispiel für die Art von Aufgabe, die ich gerne multithreading möchte. Nehmen wir zum Beispiel an, ich möchte eine sehr lange Liste von Zeichenfolgen durchlaufen und einige grundlegende Zeichenfolgenoperationen für jedes Listenelement ausführen. Wenn ich die Liste aufteile, jede Unterliste, die von meinem Schleifen- / Zeichenfolgencode verarbeitet werden soll, in einem neuen Thread sende und die Ergebnisse in einer Warteschlange zurücksende, werden diese Workloads ungefähr gleichzeitig ausgeführt? Wird dies theoretisch die Zeit beschleunigen, die zum Ausführen des Skripts benötigt wird?
Ein anderes Beispiel könnte sein, wenn ich vier verschiedene Bilder mit PIL in vier verschiedenen Threads rendern und speichern kann und dies schneller ist als die Verarbeitung der Bilder nacheinander? Ich denke, diese Geschwindigkeitskomponente ist das, worüber ich mich wirklich wundere, und nicht die richtige Terminologie.
Ich kenne mich auch mit dem Multiprozessor-Modul aus, aber mein Hauptinteresse gilt derzeit dem Laden kleiner bis mittlerer Aufgaben (10 bis 30 Sekunden). Daher denke ich, dass Multithreading besser geeignet ist, da die Initiierung von Unterprozessen langsam sein kann.