首页 > 解决方案 > 看门狗 CPU/电源使用情况

问题描述

我正在尝试在python中使用看门狗创建一个简单的文件重命名器,这非常简单,任何创建的“xlsx”文件都将重命名为“Base.xslx”

我使用下面的代码很快就搞定了,但是在运行它时会占用大量的 CPU 和电源,是代码本身有什么问题还是这是正常的?

from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time
import os

fp = 'C:/yourpath/'

class ExampleHandler(FileSystemEventHandler):
    def on_created(self, event):
        time.sleep(1)
        for file_name in os.listdir(fp):
            if '.xlsx' in file_name:
                name=fp+file_name
                os.rename(name,"Base.xlsx")


observer = Observer()
event_handler = ExampleHandler() 
observer.schedule(event_handler, path=fp)
observer.start()


try:
    while True:
        time.sleep(0)
except KeyboardInterrupt:
    observer.stop()

observer.join()

标签: pythonwindowswatchdog

解决方案


对我来说,这似乎time.sleep(0)是问题之一。Observer 类是基于事件的,因此它不会根据无限循环中的 sleep 参数监视文件夹,而是会在事件从 OS 到达时立即运行处理程序方法。

这个无限循环正在使用整个 CPU 内核(就像空的无限循环通常一样),因此您应该将time.sleep()参数更改为1(或其他任何大于此的参数,KeyboardInterrupt 不管它的“长度”是否会中断睡眠方法都无关紧要) .

您也应该使用PatternMatchingEventHandler(),它具有与您的功能几乎相同的功能,但它只检查新创建的文件(不是每个文件,每个处理程序方法调用),您甚至不需要编写任何新类。


推荐阅读