Seite 1 von 1

pyinofify worklow kontrollieren

Verfasst: Freitag 22. Juli 2011, 23:49
von Herr Lehmann
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.

Re: pyinofify worklow kontrollieren

Verfasst: Samstag 23. Juli 2011, 00:37
von 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.

Re: pyinofify worklow kontrollieren

Verfasst: Samstag 23. Juli 2011, 01:05
von Herr Lehmann
Queue war glaube ich das Stichwort was ich brauchte! Danke dafür, damit komme ich erstmal weiter denke ich.