在 python-watchdog 文件夹监视器的 on_created 函数中运行任务时,执行时间加倍

问题描述

每当在文件夹中创建新文件时,我都会尝试在 USB 设备上运行任务。我意识到当任务通过文件夹监视器触发并在 on_created 函数内执行时,与独立执行时相比,时间要长 20 倍。

在下面的代码中,我用一个简单的变量赋值替换了实际任务,并复制粘贴了一个虚拟文件来触发 on_created。如您所见,on_created 内部的执行时间(t4 - t3 = 4.26 e-07 秒)是外部( t2 - t1 = 1.92 e-07 秒).

  1. 我是否正确使用了 python-watchdog 文件夹监视器?
  2. 如果是这样,为什么任务需要花费如此多的额外时间来执行?
  3. 有没有办法让它运行得更快?
  4. 如果 python-watchdog 是这样设计的,是否有更好/更快的文件夹监控系统?

代码

#!/usr/bin/python3

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from watchdog.events import LoggingEventHandler
import numpy as np

timer = time.monotonic()
t1 = []
t2 = []

while (time.monotonic()- timer < 1.0):
    t1.append(time.monotonic()-timer)
    x = 1
    t2.append(time.monotonic()-timer)
print("t2 - t1:")
t21 = np.array(t2)-np.array(t1)
print(sum(t21)/len(t21))

class LoggingEventHandler(FileSystemEventHandler):
    def on_created(self,event):
        timer = time.monotonic()
        t3 = []
        t4 = []
        while (time.monotonic()- timer < 1.0):
            t3.append(time.monotonic()-timer)
            x = 1
            t4.append(time.monotonic()-timer)
        print("t4 - t3:")
        t43 = np.array(t4)-np.array(t3)
        print(sum(t43)/len(t43))
if __name__ == "__main__":
    path = "./trigger_folder"
    event_handler = LoggingEventHandler()
    observer = Observer()
    observer.schedule(event_handler,path,recursive=True)
    observer.start()
    time_to_monitor = 5 # seconds
    while time.monotonic()-timer < time_to_monitor:
        keep_monitoring_folder = 1
    print("folder monitor time elapsed")
    observer.stop()
    observer.join() 

输出

t2 - t1:
1.9204930349306978e-07
t4 - t3:
4.263460603468416e-07
folder monitor time elapsed

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)