Daemonen und Threads
Verfasst: Mittwoch 16. November 2005, 00:53
Hallo,
ich habe ein Problem mit Threads und Daemons.
Grundidee:
Eine daemonisierte Prozess soll Threads starten, welche dann im Hintergrund Informationen sammeln und diese in Dateien speichern.
Lösungsansätze:
1. nach den Python Cookbook Daemon erzeugen und Thread starten
2. Mainthread bereits als Daemon starten
Problem:
Sobald the Threads daemonisiert sind oder vom Daemon aus gestartet werden, passiert innerhalb der Threads scheinbar nichts mehr. Mit ps -x auch nicht mehr auffindbar.
Testbeispiel:
Starte folgenden Code NICHT daemonisiert:
Datei wird geöffnet und geschrieben. Wird jedoch die Option .setDaemon(True) gesetzt, passiert nichts mehr.
Warum nicht? Übersehe ich hier eine wichtige Sache?
Kann mir jemand helfen oder erklären wo das Problem liegt?
Ich benutzt Python 2.2.3 und SuSE 9.3.
Vielen Dank !
Anderl
Edit (Leonidas): Code in Python-Tags gesetzt.
ich habe ein Problem mit Threads und Daemons.
Grundidee:
Eine daemonisierte Prozess soll Threads starten, welche dann im Hintergrund Informationen sammeln und diese in Dateien speichern.
Lösungsansätze:
1. nach den Python Cookbook Daemon erzeugen und Thread starten
2. Mainthread bereits als Daemon starten
Problem:
Sobald the Threads daemonisiert sind oder vom Daemon aus gestartet werden, passiert innerhalb der Threads scheinbar nichts mehr. Mit ps -x auch nicht mehr auffindbar.
Testbeispiel:
Starte folgenden Code NICHT daemonisiert:
Code: Alles auswählen
import threading, os, sys
class TestThread(threading.Thread):
'''
This class is responsible for starting the ClientThreads within a certain interval.
'''
def __init__(self):
'''
Constructor
'''
threading.Thread.__init__(self)
def run(self):
'''
overwriting the standard run method
'''
file_fd = open("test_damon.txt", 'w')
file_fd.close()
file_fd = file("test_damon.txt", 'r+')
z = 0
while(z<10):
asdf = "ich bin der böse thread\n"
print asdf
file_fd.seek(0,2)
file_fd.writelines(asdf)
time.sleep(1)
z += 1
file_fd.close()
if __name__ == '__main__':
workerthread = TestThread()
workerthread.setName("workerthreadDaemon")
#workerthread.setDaemon(True)
workerthread.start()
sys.exit(0)
Warum nicht? Übersehe ich hier eine wichtige Sache?
Kann mir jemand helfen oder erklären wo das Problem liegt?
Ich benutzt Python 2.2.3 und SuSE 9.3.
Vielen Dank !
Anderl
Edit (Leonidas): Code in Python-Tags gesetzt.