Seite 1 von 1
Frage zu Threads!
Verfasst: Samstag 25. November 2006, 17:06
von EnTeQuAk
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
Verfasst: Samstag 25. November 2006, 18:59
von Leonidas
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

Verfasst: Samstag 25. November 2006, 19:58
von EnTeQuAk
Du kannst Threads nicht extern beenden
Ich glaub, ich sollte mich mehr mit Threads beschäftigen.
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
Verfasst: Samstag 25. November 2006, 20:59
von Leonidas
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.
Ein Thread kann sich nur selbst beenden. Dazu musst du ihm eine Möglichkeit geben, auf "Beende dich"-Befehle des Hauptprogramms zu reagieren.
Verfasst: Samstag 25. November 2006, 22:19
von EnTeQuAk
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
Verfasst: Samstag 25. November 2006, 23:16
von EnTeQuAk
Was mir noch grad einfällt.
Gibt es irgenteine Funktion, einen Thread zu pausieren?
Das würde mich um einiges erleichert...
MfG EnTeQuAk
Verfasst: Samstag 25. November 2006, 23:27
von Leonidas
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.
Verfasst: Dienstag 28. November 2006, 13:00
von EnTeQuAk
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:
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!'
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
Verfasst: Dienstag 28. November 2006, 13:30
von Blattlaus
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.
Verfasst: Dienstag 28. November 2006, 13:40
von EnTeQuAk
/: 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...
Verfasst: Dienstag 28. November 2006, 14:58
von BlackJack
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.
Verfasst: Dienstag 28. November 2006, 15:12
von prof_weirdo
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.
Verfasst: Dienstag 28. November 2006, 15:21
von EnTeQuAk
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
Verfasst: Dienstag 28. November 2006, 15:36
von Blattlaus
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

Verfasst: Dienstag 28. November 2006, 16:07
von EnTeQuAk
Hi Hi

) durchaus..

Verfasst: Dienstag 28. November 2006, 18:01
von prof_weirdo
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