问题描述
每当在文件夹中创建新文件时,我都会尝试在 USB 设备上运行任务。我意识到当任务通过文件夹监视器触发并在 on_created
函数内执行时,与独立执行时相比,时间要长 20 倍。
在下面的代码中,我用一个简单的变量赋值替换了实际任务,并复制粘贴了一个虚拟文件来触发 on_created
。如您所见,on_created
内部的执行时间(t4 - t3 = 4.26 e-07 秒)是外部( t2 - t1 = 1.92 e-07 秒).
- 我是否正确使用了
python-watchdog
文件夹监视器? - 如果是这样,为什么任务需要花费如此多的额外时间来执行?
- 有没有办法让它运行得更快?
- 如果
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 (将#修改为@)