python - 看门狗 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()
解决方案
对我来说,这似乎time.sleep(0)
是问题之一。Observer 类是基于事件的,因此它不会根据无限循环中的 sleep 参数监视文件夹,而是会在事件从 OS 到达时立即运行处理程序方法。
这个无限循环正在使用整个 CPU 内核(就像空的无限循环通常一样),因此您应该将time.sleep()
参数更改为1
(或其他任何大于此的参数,KeyboardInterrupt
不管它的“长度”是否会中断睡眠方法都无关紧要) .
您也应该使用PatternMatchingEventHandler()
,它具有与您的功能几乎相同的功能,但它只检查新创建的文件(不是每个文件,每个处理程序方法调用),您甚至不需要编写任何新类。
推荐阅读
- git - 终端向我显示“还原当前正在进行中”。
- python - 无法在 Mac 上使用 pygame 创建窗口
- assembly - NASM 仅包括标签等引用,但不包括代码
- c++ - 如何在应用程序退出()期间处理 Qthread 终止?
- c - 链表创建和显示
- html - 在鼠标悬停时覆盖 div 框的最简单解决方案?
- leaflet - 1.7.1 标记 bindpopup 的弹出延迟(仅限 SAFARI 和 1.7.1 的延迟)
- python - sqlalchemy 按 mysql python 排序
- url - 提取编码查询参数 GTM
- oracle - "; 预期 "., ("; 运行 JPA 查询