Hallo!
Ich wollte mal fragen, ob man einzelne Threads an Namen koppeln kann?
Also, das ich einen Thread starte, das ganze sofort an einen Namen (oeder eine ID?) koppele.
So, dass ich dann explizit diesen einen Thread anhand der ID oder dem Namen beenden kann.
Ist so etwas möglich?
MfG EnTeQuAk
Frage zu Threads!
Zuletzt geändert von EnTeQuAk am Dienstag 28. November 2006, 17:25, insgesamt 1-mal geändert.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du kannst Threads nicht extern beenden, daran scheitert es. Es hält dich aber keiner ab, eine Liste oder ein Dict mit Threads zu haben, Threads sind ja auch nur Objekte 

My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ich glaub, ich sollte mich mehr mit Threads beschäftigen.Du kannst Threads nicht extern beenden
Oder ich drücke mich nur doof aus

Also geht es nicht, einen Server (in meinem Fall den BaseWSGIServer.py von wsgiarea.pocoo.org) in einem eigenen Thread zu starten und dann anhand des Namens (was ja geht *freu*) beenden kann.
Ich hab zwar schon in etwa ne Lösung hier im Forum gefunden allerdings muss ich da erstmal durchsteigen... Ma schaun.
Danke erstmal!
MfG EnTeQuAk
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ein Thread kann sich nur selbst beenden. Dazu musst du ihm eine Möglichkeit geben, auf "Beende dich"-Befehle des Hauptprogramms zu reagieren.EnTeQuAk hat geschrieben:Also geht es nicht, einen Server (in meinem Fall den BaseWSGIServer.py von wsgiarea.pocoo.org) in einem eigenen Thread zu starten und dann anhand des Namens (was ja geht *freu*) beenden kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Ahhh!
Das ist gut. Wunderbar da hast du mich auf eine Idee Gebracht 
EDIT:
Danke Leonidas!
So, wie ichs mir gedacht habe gehts nun.
Threads können wirklich kompliziert sein, wenn man keine Ahnung davon hat.
MfG EnTeQuAk


EDIT:
Danke Leonidas!
So, wie ichs mir gedacht habe gehts nun.

Threads können wirklich kompliziert sein, wenn man keine Ahnung davon hat.
MfG EnTeQuAk
Was mir noch grad einfällt.
Gibt es irgenteine Funktion, einen Thread zu pausieren?
Das würde mich um einiges erleichert...
MfG EnTeQuAk
Gibt es irgenteine Funktion, einen Thread zu pausieren?
Das würde mich um einiges erleichert...

MfG EnTeQuAk
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Was meinst du mit Thread pausieren? Einen Thread musst du ähnlich wie einen abgekappselten Prozess ansehen, du kannst ihn kaum von außen beeinflussen. Ein Thread kann sich zwar pausieren, mit time.sleep() zum Beispiel, aber das muss er selbst machen, von außen aus dem Hauptthread geht das nicht direkt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dann habe ich noch eine Frage.
Ich hab mir was gaaaanz kleines gebastelt. Aber es geht einfach nicht.
Wenn ich den Thread in folgendem Script:
Nun mit '' server_start() '' starte. Startet er den Server. Aber müsste dann nicht die Konsole wieder benutzbar werden?
Wie kann ich es machen, das der Thread wirklich im Hintergrund startet und die Konsole nach dem aufruf von '' python daucms.py start '' benutzbar wird?
MfG EnTeQuAk
Ich hab mir was gaaaanz kleines gebastelt. Aber es geht einfach nicht.
Wenn ich den Thread in folgendem Script:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from colubrid import RegexApplication, execute, HttpResponse
import system
import thread
from sys import argv
def start_server():
thread.start_new_thread(execute(app=system.daucms, port=8080), ())
print 'Server gestartet'
def stop_server():
thread.exit()
print 'server gestoppt'
try:
argv[1]
if argv[1].lower() == 'start':
start_server()
elif argv[1].lower() == 'stop':
stop_server()
except IndexError:
print 'Bitte start oder stop angeben!'
Wie kann ich es machen, das der Thread wirklich im Hintergrund startet und die Konsole nach dem aufruf von '' python daucms.py start '' benutzbar wird?
MfG EnTeQuAk
Kannst du nicht. Du verwechselst da Python und die Shell in der es läuft.
Wenn du ein Python Programm startest, dann läuft es und übernimmst stdin/stdout von der Shell und gibt sie erst wieder zurück, wenn du das Programm beendest, und zwar nur dann.
Eine möglichkeit, allerdings nur unter Linux, wäre das Programm über "python <script> &" zu starten. Dann wird das Programm in den Hintergrund geschickt, allerdings landen ausgaben immernoch auf der Shell.
Eine andere möglichkeit wäre "pythonw" als interpreter zu benutzen, der startet das ganze unanhängig bon der Shell (das Programm läuft also auch weiter, wenn die Shell geschlossen wird, in den anderen Fällen sind es nur Subprozesse der Shell). Allerdings hast du dann keine Möglichkeit Konsolenaus-/eingaben zu tätigen.
/: Ein Python Thread ist kein richtiger, einzelner Thread des Betriebssystems, sondern nur Pythonintern.
Wenn du ein Python Programm startest, dann läuft es und übernimmst stdin/stdout von der Shell und gibt sie erst wieder zurück, wenn du das Programm beendest, und zwar nur dann.
Eine möglichkeit, allerdings nur unter Linux, wäre das Programm über "python <script> &" zu starten. Dann wird das Programm in den Hintergrund geschickt, allerdings landen ausgaben immernoch auf der Shell.
Eine andere möglichkeit wäre "pythonw" als interpreter zu benutzen, der startet das ganze unanhängig bon der Shell (das Programm läuft also auch weiter, wenn die Shell geschlossen wird, in den anderen Fällen sind es nur Subprozesse der Shell). Allerdings hast du dann keine Möglichkeit Konsolenaus-/eingaben zu tätigen.
/: Ein Python Thread ist kein richtiger, einzelner Thread des Betriebssystems, sondern nur Pythonintern.
/: Ein Python Thread ist kein richtiger, einzelner Thread des Betriebssystems, sondern nur Pythonintern.
DAS sagt mir alles

Herzlichen Dank Blattlaus!

Nun weiß ich, wie ichs machen müsste.. .

Oki. Ma schaun...
Das ist'ne Falschinformation. "Python Threads" sind "richtige Threads". Und Threads sind auch immer nur "intern" d.h. in dem Prozess bekannt von dem aus sie gestartet wurden.
-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
Also ich bin mir auch recht sicher gelesen zu haben das Python Threads eben
keine Threads auf Kernelebene sind, sondern über eine entsprechende Bibliothek nur Pythonintern existieren.
P.S.: Werd nochmal nachschauen ob ich das wiederfinde und evtl. mit Quellenangabe posten.
keine Threads auf Kernelebene sind, sondern über eine entsprechende Bibliothek nur Pythonintern existieren.
P.S.: Werd nochmal nachschauen ob ich das wiederfinde und evtl. mit Quellenangabe posten.
Zuletzt geändert von prof_weirdo am Dienstag 28. November 2006, 15:34, insgesamt 1-mal geändert.
Oke
hier halt ich mich raus 
MIr reichts eigentlich schon, das die nur "intern" bekannt sind. Davon geh ich einfach mal aus. Wenns net geht...
Ach wird scho! 
Wobei ich es mal ausprobiert habe. Ich habe mir nen Thread gebastelt und ma in meine Systeminformationen geschaut.
Der heißt immer "python". Gut... nun weiß ich net, ob wenn die "einzelne" Threads sind man denen nen eigenen Namen zuweisen kann. Aber ausgetestet hab ichs. immer "python". hmm... hat das was zu sagen?
(OS: Ubuntu Edgy Eft)
MfG EnTeQuAk


MIr reichts eigentlich schon, das die nur "intern" bekannt sind. Davon geh ich einfach mal aus. Wenns net geht...


Wobei ich es mal ausprobiert habe. Ich habe mir nen Thread gebastelt und ma in meine Systeminformationen geschaut.
Der heißt immer "python". Gut... nun weiß ich net, ob wenn die "einzelne" Threads sind man denen nen eigenen Namen zuweisen kann. Aber ausgetestet hab ichs. immer "python". hmm... hat das was zu sagen?
(OS: Ubuntu Edgy Eft)
MfG EnTeQuAk
Ne, das ist normal. Schließlich wird der Python Code bloß interpretiert und der Interpreter ist nunmal "python". Deswegen ist es aus Kernelsicht eben der Prozess "python" und nicht mehr. Den Namen ändern...naja, du könntest den Interpreter umbenennen, allerdings gehe ich davon aus, dass es dann zumindest zu ein paar Problemen kommt 

Hi Hi
) durchaus.. 


-
- User
- Beiträge: 38
- Registriert: Donnerstag 2. Februar 2006, 11:27
- Wohnort: Bei Osnabrück
OK, für ale die sich für die Funktionsweise von Pythonthreads interessieren habe ich folgendes gefunden:
http://heather.cs.ucdavis.edu/~matloff/ ... hreads.pdf
http://heather.cs.ucdavis.edu/~matloff/ ... hreads.pdf