ich habe folgendes Problem, und langsam auch einen Knoten im Kopf.
In meinem Projekt habe ich folgendes umgesetzte:
Main Programm:
hier wird ein Log Objekt erstellt(kein Standart ModuL), was div Filter und outputs hat, unter anderen auch Files
dann werden aus dem Main Programm diverse Module geladen und mit hilfe des threading Moduls gestartet. Übergeben wird immer das Log Object, damit der Thread auch Logs schreiben. Alle Module sind "Kinder" von threading.Threads . Auch das Main Programm schreibt einiges.
Die Threads haben nichts miteinanader zu tun, die Kommunikation erfolgt immer von den Threads zum core_object, wo nur Werte gespeichert werden, die der MAIN dann abfragt. Das führt auch zu keinen Problemen.
Code: Alles auswählen
LOG_OBJECT=mylogger.log(ARGS)
core_object=core.mem(ARGS,LOG_OBJECT)
example = MODULx1.PAKAGEy1(core_object,LOG_OBJECT,ARGS)
example.start()
example.join()
example2 = MODULx2.PAKAGEy2(core_object,LOG_OBJECT,ARGS)
example2.start()
example2.join()
while ...
LOG_OBJECT.write("main lebt noch")
tu was und find kein ende
...
Das Problem ist die LOG Instance und das auch erst seid ich zum schreiben der Logs in Files folgendes hinzugefügt habe (nur so als kurze Funktions Übersicht mal dargestellt)
Code: Alles auswählen
class log
....
def write (self,msg):
self._filehandel.write(msg)
self._filehandel.flush()
if filesize > 10000:
self._filehandel.close()
create zip file...
remove logfile
crate new logfile and filehandle
return
Was ganz klar ist:
wenn der Thread gearde den filehandle geschlossen hat bzw den logfile gelöscht hat, und wärend dessen zum nächsten Thread wechselt,
und der nächste Thread auf den write Befehl trift, findet er keine filehandle mehr vor oder auch eine Datei. Hier mit exception zu arbeiten oder das creieren eines Files vorzugreifen, währe sehr unsauber.
Also was währe zu tun ... ich muss sicherstellen, das während des Zippen des Files, der Thread nicht wechselt und er erst mal seine Arbeit beendet. Und hier hängt es mit der LOCK Funktion. Auch wie ich im Main der ja kein Thread ist da mit einbinden kann.