Seite 1 von 1

Python Daemon stoppen

Verfasst: Donnerstag 14. Mai 2015, 07:49
von sn0000py
Hallo ich versuche gerade einen kleinen Python Daemon zu schreiben ...

Das starten und so funktioniert schon gut, nur ich möchte gerne wenn ich den Daemon stoppe, ein paar scahen machen (Socket schließen usw.)

Starten tue ich so : ./led.py start
Stoppen : ./led.py stop

Code: Alles auswählen

from daemon import runner

class App():
	def __init__(self):
		print 'init2'
		self.stdin_path = '/dev/null'
		self.stdout_path = '/dev/tty'
		self.stderr_path = '/dev/tty'
		self.pidfile_path =  '/tmp/foo.pid'
		self.pidfile_timeout = 5
		self.verbose = 10
	def stop(self):
		print 'Stopping ...'
		global doKill
		doKill = True
	def handle_exit(self, signum, frame):
		print 'Handle Exit'
	def terminate(self, signal_number, stack_frame):
		print 'Terminate'
	def run(self):
		print 'run'
                thread.start_new_thread(serverSocket, ())
		while True:
			strip.setPixelColor(0, Color(0,0,0))
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
zum beispiel starte ich da enen Thread der einen Socket öffnet ... möchte sowohl den Thread als auch den Socket der da drinnen geöffnet wird wieder schließen .

danke :D

Re: Python Daemon stoppen

Verfasst: Donnerstag 14. Mai 2015, 08:47
von mutetella
@sn0000py
Schau' Dir mal das signal Modul an. Damit kannst Du einen handler definieren, der ausgeführt wird, wenn ein bestimmtes Signal bei Deinem Script landet.

mutetella

Re: Python Daemon stoppen

Verfasst: Donnerstag 14. Mai 2015, 12:06
von sn0000py
danke

hat gefunkt :D

Re: Python Daemon stoppen

Verfasst: Donnerstag 14. Mai 2015, 16:21
von BlackJack
@sn0000py: Erst einmal ein Hinweis auf den Style Guide for Python Code.

Dann ist ``global`` Böse™. Insbesondere in einer Klasse hat das gar nichts zu suchen, denn Klassen verwendet man um diesen Mist loszuwerden.

Die `run()`-Methode ist keine. Da wird nichts von dem Objekt benutzt, das könnte einfach eine Funktion sein.

Das `thread`-Modul sollte nicht mehr verwendet werden, das ist in Python 3 kein Teil der öffentlichen API mehr und auch in Python 2 gibt es schon seit einer Ewigkeit das `threading`-Modul als Ablösung.