Каков правильный способ завершения работы наблюдателя Watchdog без цикла сна?

Я относительно новичок в python и программировании в целом. Это мой первый вопрос на Stack Overflow, поэтому заранее спасибо за любые ответы! Мой вопрос заключается в следующем. У меня есть веб-приложение на Python, которое использует фреймворк django. Новая функция этого веб-приложения требует использования локально установленного инструмента командной строки на сервере, этот инструмент сбрасывает выходной файл в предварительно созданную директорию. Я хочу следить за этой директорией и при создании в ней файла, заканчивающегося на .json, вызывать функцию разбора. На помощь приходит библиотека Watchdog. Я последовал ряду руководств/проверил здесь, как правильно настроить наблюдателя. Все они показывают, что наблюдатель запускается, а затем сразу же переходит в цикл time.sleep(1), ожидая, пока что-то произойдет. Однако, поскольку это django webapp, я не хочу сидеть и ждать, пока наблюдатель ищет созданный файл. Вот пример кода из Geeks for Geeks:

if __name__ == "__main__":
    # Set the format for logging info
    logging.basicConfig(level=logging.INFO,
                        format='%(asctime)s - %(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S')
  
    # Set format for displaying path
    path = sys.argv[1] if len(sys.argv) > 1 else '.'
  
    # Initialize logging event handler
    event_handler = LoggingEventHandler()
  
    # Initialize Observer
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
  
    # Start the observer
    observer.start()
    try:
        while True:
            # Set the thread sleep time
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

Вот что у меня есть на данный момент.

Сначала я создаю класс папки monitors.

class MonitorFolder(FileSystemEventHandler):

    def on_created(self, event):
        if event.src_path.endswith(".json"):
            #call parseing function here ()
            print("stopping")
            self.observer.stop()
            self.observer.join()
def createFileListener(curdir):
    src_path = curdir
    observer = Observer()
    event_handler=MonitorFolder(observer)
    observer.schedule(event_handler, path=src_path, recursive=True)
    print("Monitoring started")
    observer.start()

Класс файлов Monitor объявлен с функцией on_created, которая в конечном итоге вызовет функцию парсинга, а затем остановит себя. Это работает до тех пор, пока он не попытался присоединиться. Я предполагаю, что это происходит потому, что поток уже остановлен, чтобы запустить .join(). Когда он пытается запустить self.observer.join(), возникает RuntimeError("cannot join current thread")

Ниже объявления класса находится функция, используемая для создания нового экземпляра этого класса.

Любой совет будет полезен!

Заранее спасибо!

Вернуться на верх