Edit (Leonidas): Aus der Diskussion des Threads "Wie zwei Funktionen Gleichzeitig laufen lassen?" abgetrennt.
Ohne das ich mir Dein Programm genau angesehen habe: Innerhalb eines Prozesses wird das wohl nicht möglich sein. Ich würde Threading empfehlen.
Thread-Interna
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Und seit wann ist Threading innerhalb eines Prozesses nicht möglich?Grossmeister_C hat geschrieben:Innerhalb eines Prozesses wird das wohl nicht möglich sein. Ich würde Threading empfehlen.

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 36
- Registriert: Montag 26. Februar 2007, 15:53
Du hast mich falsch verstanden. Ich meinte das es nicht möglich ist 2 Funktionen gleichzeitig innerhalb eines einzelnen Prozesses auszuführen.Leonidas hat geschrieben:Und seit wann ist Threading innerhalb eines Prozesses nicht möglich?Grossmeister_C hat geschrieben:Innerhalb eines Prozesses wird das wohl nicht möglich sein. Ich würde Threading empfehlen.Ich würde sogar so weit gehen, dass Threading (zumindest im Userspace) nur innerhalb von Prozessen möglich ist - jeder Prozess hat mindestens einen Thread.
Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Kann man aber. Ok, wenn man ganz detailiert sein will geht das mit einer CPU nicht, aber mit zwei ist sowas durchaus technisch möglich (aber mit einer CPU kann man wenn man ganz genau ist, auch nur einen Prozess gleichzeitig laufen lassen, trotzdem gibt es Multiprocess-Betriebssysteme). Von Python-Sicht geht das mit dem GIL nicht ganz so gut, weil nur ein Thread Python-Code im selben Moment ausführen kann (C-Module gehen aber in mehreren Threads). Aus Nutzersicht ist das Switching in der Regel ausreichend schnell, so dass er das Gefühl von Gleichzeitigkeit hat. Ich glaube auch, dass es einfach darum geht. Ob der Code gleichzeitig ausgeführt wird oder nicht ist mir als Nutzer völlig egal - ebenso egal wie es implementiert wird, ob nun als Thread/Tasklet/Greenlet oder was auch immer.Grossmeister_C hat geschrieben:Du hast mich falsch verstanden. Ich meinte das es nicht möglich ist 2 Funktionen gleichzeitig innerhalb eines einzelnen Prozesses auszuführen.
Und wem ist dann der Rest zugehörig?Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.
Ich glaube wirklich, dass wir irgendwie an uns vorbeisprechen.. vielleicht sehen wir die Sache ja aus zwei verschiedenen Sichtweisen?
Zuletzt geändert von Leonidas am Dienstag 22. Mai 2007, 19:17, insgesamt 1-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Teilweise?Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.
TUFKAB – the user formerly known as blackbird
-
- User
- Beiträge: 36
- Registriert: Montag 26. Februar 2007, 15:53
Kommt immer drauf an ob User- oder Kernelthread nicht wahr ? Ich weiß jetzt nicht genau wie Pythonthreads im0plementiert sind. Kernelthreads verwenden aber z.B. jeder einen eigenen Stack.blackbird hat geschrieben:Teilweise?Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.
-
- User
- Beiträge: 36
- Registriert: Montag 26. Februar 2007, 15:53
Ja, das mag theoretisch machbar sein, aber ich gehe hier von einer üblichen 1-Cpu-Umgebung aus.Leonidas hat geschrieben:Kann man aber. Ok, wenn man ganz detailiert sein will geht das mit einer CPU nicht, aber mit zwei ist sowas durchaus technisch möglich (aber mit einer CPU kann man wenn man ganz genau ist, auch nur einen Prozess gleichzeitig laufen lassen, trotzdem gibt es Multiprocess-Betriebssysteme).Grossmeister_C hat geschrieben:Du hast mich falsch verstanden. Ich meinte das es nicht möglich ist 2 Funktionen gleichzeitig innerhalb eines einzelnen Prozesses auszuführen.
So geau weiß ich bei Python nicht bescheid, mir ging es nur darum das man schon Threads oder einen 2. Prozess bemühen muss um das gewünschte zu erreichen.Leonidas hat geschrieben: Von Python-Sicht geht das mit dem GIL nicht ganz so gut, weil nur ein Thread Python-Code im selben Moment ausführen kann (C-Module gehen aber in mehreren Threads). Aus Nutzersicht ist das Switching in der Regel ausreichend schnell, so dass er das Gefühl von Gleichzeitigkeit hat. Ich glaube auch, dass es einfach darum geht. Ob der Code gleichzeitig ausgeführt wird oder nicht ist mir als Nutzer völlig egal - ebenso egal wie es implementiert wird, ob nun als Thread/Tasklet/Greenlet oder was auch immer.
Und wem ist dann der Rest zugehörig?[/quote]Grossmeister_C hat geschrieben:Gut , wenn wir Erbsen zählen wollen sind natürlich verschiedene Threads eines Prozesses zumindest teilweise auch dem Prozess zugehörig.
Falsche Wortwahl meinerseits. Der Rest ist zwar dem Thread und damit auch dem Parentprozess zugehörig. Der Thread teilt aber z.B. nicht denselben Stack.
Threads benutzen nie den selben Stack, egal ob Kernel- oder User-Level. Das würde gar nicht funktionieren.
Häh? Weisst Du noch was Du so geschrieben hast? Jeder dieser Stacks gehört natürlich zu dem Prozess zu dem die Threads gehören. Threads gehören nicht nur "teilweise" zu einem Prozess, sondern komplett.
-
- User
- Beiträge: 36
- Registriert: Montag 26. Februar 2007, 15:53
Ja , ich weiß noch was ich geschrieben habe. Wie schon erwähnt habe ich mich mißverständlich ausgedrückt. Sicherlich gehört der neue Thread zu dem Prozess. Aber er teilt nicht alles mit diesem.BlackJack hat geschrieben:Häh? Weisst Du noch was Du so geschrieben hast? Jeder dieser Stacks gehört natürlich zu dem Prozess zu dem die Threads gehören. Threads gehören nicht nur "teilweise" zu einem Prozess, sondern komplett.
Ich wollte ursprünglich auch nur ausdrücken das man nicht einfach 2 Funktionen eines Programmes ohne Zuhilfenahme eines neuen Threads oder eines weiteren Prozesses gleichzeitig ausführen kann.
Wie dem auch sei. anscheinend habe ich mich unverständlich ausgedrückt. Bin schon ein wenig müde.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Das ist nur im Moment so. Sogar der Laptop der neben mir steht hat nicht nur Hyper Threading (das reicht wohl nicht und wurde zumindest vorerst abgeschafft) sondern zwei Cores und ich denke in Zukunft wird sich dieser Trend fortsetzen. Damit sollte das parallele Ausführen zweier Programme durchaus drin seinGrossmeister_C hat geschrieben:Ja, das mag theoretisch machbar sein, aber ich gehe hier von einer üblichen 1-Cpu-Umgebung aus.

Klar, aber das ist eigentlich eher die Regel als die Ausnahme. Was noch Ähnlich ist, ist ``asyncore`` bzw. Twisted. Naja und Sprachen die besonders für Concurrency gedacht sind, also Erlang.Grossmeister_C hat geschrieben:So geau weiß ich bei Python nicht bescheid, mir ging es nur darum das man schon Threads oder einen 2. Prozess bemühen muss um das gewünschte zu erreichen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 188
- Registriert: Donnerstag 20. Juli 2006, 20:46
- Wohnort: Wien
- Kontaktdaten:
Kann sich hier bitte ein Mod einschalten, das Thema artet aus 
lgherby

lgherby

verstehe ich nicht, auf einem 1CPU system macht das durchaus nen sin, aber unter einem 2CPU+ system wäre doch threading unter python fast sinnlos?Leonidas hat geschrieben: Kann man aber. Ok, wenn man ganz detailiert sein will geht das mit einer CPU nicht, aber mit zwei ist sowas durchaus technisch möglich (aber mit einer CPU kann man wenn man ganz genau ist, auch nur einen Prozess gleichzeitig laufen lassen, trotzdem gibt es Multiprocess-Betriebssysteme). Von Python-Sicht geht das mit dem GIL nicht ganz so gut, weil nur ein Thread Python-Code im selben Moment ausführen kann (C-Module gehen aber in mehreren Threads). Aus Nutzersicht ist das Switching in der Regel ausreichend schnell, so dass er das Gefühl von Gleichzeitigkeit hat. Ich glaube auch, dass es einfach darum geht. Ob der Code gleichzeitig ausgeführt wird oder nicht ist mir als Nutzer völlig egal - ebenso egal wie es implementiert wird, ob nun als Thread/Tasklet/Greenlet oder was auch immer.
Auf Systemen mit mehreren CPUs oder Kernen macht Threading in Python genausoviel oder wenig Sinn wie bei Ein-Prozessorsystemen. In beiden Fällen bringt es nicht viel, wenn das Problem CPU-lastig ist, aber in beiden Fällen macht es sehr wohl Sinn, wenn es E/A-lastig ist und immer wenn ein Thread bei E/A-Operationen blockiert, ein andere die Zeit nutzen kann.