Ich habe ein kleines Programm geschrieben, das ein Verzeichnis auf hineingeschobene Dateien überwacht, diese verarbeitet und anschließend löscht. Läuft soweit gut. Jetzt suche ich nach einer Möglichkeit, dieses nach dem Start in den Hintergrund zu schieben. Ich habe das mit threading.Thread(... , daemon=True) sowie mit daemonize probiert. In beiden Fällen beendet sich das Programm einfach.
Gibt es ein prinzipielles Problem mit asyncio und Hintergrundtasks? Kennt jemand eine Methode?
Reduzierter Quellcode ohne Dämonisierungsversuch:
Python
import os
import pyinotify
import asyncio
import requests
watch_path=os.path.abspath("/some/dir")
mask = pyinotify.IN_MOVED_TO
loop = asyncio.get_event_loop()
async def stager(filename):
with open(filename) as file:
for line in file:
line = line.rstrip()
print("staging file {}".format(line))
await asyncio.sleep(0)
os.remove(filename)
class File_handler(pyinotify.ProcessEvent):
def process_IN_MOVED_TO(self,event):
print("processing file {}".format(event.pathname))
loop.create_task(stager(event.pathname))
def watch(path):
print("starting watch")
watch_manager = pyinotify.WatchManager()
event_notifier = pyinotify.AsyncioNotifier(watch_manager, loop, default_proc_fun=File_handler())
watch_manager.add_watch(watch_path, mask)
loop.run_forever()
def main():
watch(watch_path)
main()
Alles anzeigen
(sämtliche Funktionalität durch prints ersetzt, die bei meinen Dämonisierungsversuchen auskommentiert waren.