Seite 1 von 1

XMLRP Server beenden

Verfasst: Dienstag 11. September 2007, 08:37
von Lufia
Hallo,

ich nutze den XMLRPC Server wie er hier im Forum vorgestellt wurde *. Ich würde ihn gerne so erweitern das er sich auch durch einen xmlrpc-Aufruf beenden lässt.

Sollte dazu trotzdem wie im Beispiel die Option server.serve_forever() verwendet werden ?
Wie kann ich den server am einfachsten eine Nachricht zum beenden senden ?

Hintergrund der Frage ist das sich der Server durch abbrechen mit strg+c manchmal nicht richtig beendet bzw. die Adresse blockiert bleibt. Um das zu umgehen könnte man ja auch die pid ermitteln welche die Adresse belegt und dann das Programm mit kill "pid" beenden was mir aber zu kompliziert erscheint.

Danke für alle Ratschläge

* Beispiel : http://www.python-forum.de/topic-5478.html

Verfasst: Dienstag 11. September 2007, 09:09
von veers
Hallo Lufia, ich kenne dein Problem :)
Solange du nur willst das der Server sich mit dem restlichen System beenden lässt kannst du ihn zu Daemon machen: service.setDaemon(True).

Falls du ihn neu starten möchtest wird es etwas komplizierter. Ich habe das jedoch auch schon gelöst und kann es, falls du es brauchen solltest, nachschlagen :)

Verfasst: Dienstag 11. September 2007, 09:37
von Lufia
Hallo veers, danke für die schnelle Antwort.
Ich dachte es gäbe eine ganz simple Möglichkeit den Server durch ein Signal zu beenden und die Adresse freizugeben. Ich habe es mit server.server_close() versucht, was leider keine Auswirkung hatte.

Das mit dem Daemon habe ich nicht ganz verstanden, ich will nicht das gesamte System beenden sondern nur den Server.

Zur Zeit muss ich jedesmal die pid bestimmen und ein kill ausführen was nicht sehr elegant ist. Ich bin mir gerade gar nicht sicher evtl. sollte ich versuchen den Server einfach immer laufen zu lassen. Wenn mein Programm fertig entwickelt ist muss ich den Server ja eigentlich nie beenden, es stört mich vor allem bei der Programmentwicklung. Zudem dachte ich das so eine Funktion einfach dazugehört.

Verfasst: Dienstag 11. September 2007, 10:05
von veers
Lufia hat geschrieben:Das mit dem Daemon habe ich nicht ganz verstanden, ich will nicht das gesamte System beenden sondern nur den Server.
Du hast das vermutlich falsch verstanden ich meinte einen Daemon Thread nicht einen Daemon Prozess. Daemon Threnaers haben die Eigenschaft das sie ein beenden das Interpreters nicht verhindern. Und ich nehme mal an dass das ist was du suchst. :)

Verfasst: Dienstag 11. September 2007, 10:14
von mitsuhiko
serve_forever macht nichts anders als while 1: self.handle() oder sowas. Schau einfach mal im Source nach. Dann einfach das while 1 gegen while self.running austauschen. Dann halt eine Funktion registrieren, die self.running = False macht.

Verfasst: Dienstag 11. September 2007, 10:36
von Lufia
@ Blackbird

Danke, genau soetwas habe ich gesucht. Ich werde mich heute Abend hinsetzten und das ausprobieren.
Ich bin gerade dabei meinem C-Programm direkt XMLRPC beizubringen :? hatte zuvor den Umweg über Pyhton und dann XMLRPC genommen. aber C ist so störrisch :evil:

Verfasst: Dienstag 11. September 2007, 12:59
von veers
blackbird hat geschrieben:serve_forever macht nichts anders als while 1: self.handle() oder sowas. Schau einfach mal im Source nach. Dann einfach das while 1 gegen while self.running austauschen. Dann halt eine Funktion registrieren, die self.running = False macht.
Das Problem ist das du dann jeweils noch eine Anfrage senden musst da er beim handle() jeweils blockt.

edit: Ist natürlich nur relevant wenn man sich nicht gerade in einer Anfrage befindet oder man die Threaded Variante verwendet. :wink: