pyinofify worklow kontrollieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Hallo,

folgender beispiel code:

Code: Alles auswählen

wm = pyinotify.WatchManager() # Watch Manager
mask = pyinotify.IN_DELETE | pyinotify.IN_CREATE # watched events

class EventHandler(pyinotify.ProcessEvent):
    def process_IN_CREATE(self, event):
        if re.search("ORDNER",event.path):
           subprocess.call(["rar", "a","rararchiv","event.path"])



    
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch('/tmp', mask, rec=True,auto_add=True)

notifier.loop()

Ziel ist es bei wenn ein Bestimmter Ordner erstellt wird diesen in ein RAR archiv zu packen und dieses dann auf einen ftp server zu laden. Es geht dabei um eine Backup lösung.
Das funktioniert auch wunderbar. Allerdings kommen werden die Ordner schneller erstellt als mein Server mit dem Packen und hochladen fertig wird. Daher ist nach kurzer Zeit das gesamte System ausgelastet.

Meine Frage ist nun wie ich es anstelle, dass ein Ordner nach dem anderen verarbeitet wird ohne in der zwischenzeit die überwachung zu unterbrechen.
deets

Indem du das asynchron machst, und die Aenderungs-Events in eine Queue packst, aus der sich dann ein Worker-Thread oder Prozess bedient. Wenn du Probleme mit der Systemauslastung hast, musst du drosseln - also entweder Pausen einlegen, oder den Archivierer selbst drosselst. Bei einem externen Programm wie RAR geht das wahrscheinlich nicht, aber zB die Python-eigene tar-implementierung sollte funktionieren, weil du da ja Pausen zwischen Datei-add-Operationen machen kannst.

Natuerlich funktioniert das ganze nur, wenn du nach einem Burst von Change-Events auch genug Pause hast, damit die Queue in aller Ruhe abgearbeitet werden kann. Wenn nicht, hast du eh ein Skalierungsproblem.
Herr Lehmann
User
Beiträge: 81
Registriert: Samstag 14. August 2010, 22:20

Queue war glaube ich das Stichwort was ich brauchte! Danke dafür, damit komme ich erstmal weiter denke ich.
Antworten