2024-05-12 20:49:35 发布
网友
我使用urllib2和ElementTree监视XML文件中的新条目,并使用Pushover在每次检测到新条目时发送推送通知。条目存在于XML文件中的时间从30分钟到4小时不等。脚本每5分钟运行一次。什么是最好的方法使脚本只在新的条目上提醒我,而不是每隔5分钟通知一次相同的条目?在
条目是否与时间戳相关联,使得每次更新文件时,新条目的时间戳总是比旧条目晚?如果是这样,只需保留上一个推送项的时间戳,在解析XML文件时,推送较新的项并丢弃旧项。在
如果不是这样,Python有相当不错的集合操作算法,所以我尝试一下:保留一个set已经被推送的条目。在
set
already_pushed = set()
每次运行脚本时,请执行以下操作:
从文件中创建另一个set
from_file = parse_file()
“减”(set difference)已推送的项目集
new_entries = from_file - already_pushed
推送新条目
push_all(new_entries)
检查原始设置,修剪任何超过4小时+5分钟的内容
cutoff = datetime.now() - timedelta(hours=4, minutes=5) # I forget the syntax already_pushed = set(e for e in already_pushed if e.timestamp > cutoff)
添加新推送的条目
already_pushed += new_entries
因为你每五分钟才运行一次,除非文件中有大量的条目,否则它应该足够快了。在
如果效率是一个问题,那么您可以通过保持已推送的条目的排序(按时间戳)列表,将文件解析为类似排序的条目列表,并运行一个合并算法来处理来自一个或另一个列表的条目,并根据需要推送并保留或丢弃它。但是使用一个更好的算法所获得的效率收益可能远远超过用Python实现整个过程所带来的效率损失。在这种情况下,你可能不得不使用C或C++来获得更好的性能。在
条目是否与时间戳相关联,使得每次更新文件时,新条目的时间戳总是比旧条目晚?如果是这样,只需保留上一个推送项的时间戳,在解析XML文件时,推送较新的项并丢弃旧项。在
如果不是这样,Python有相当不错的集合操作算法,所以我尝试一下:保留一个
set
已经被推送的条目。在每次运行脚本时,请执行以下操作:
从文件中创建另一个
set
“减”(set difference)已推送的项目集
推送新条目
检查原始设置,修剪任何超过4小时+5分钟的内容
添加新推送的条目
因为你每五分钟才运行一次,除非文件中有大量的条目,否则它应该足够快了。在
如果效率是一个问题,那么您可以通过保持已推送的条目的排序(按时间戳)列表,将文件解析为类似排序的条目列表,并运行一个合并算法来处理来自一个或另一个列表的条目,并根据需要推送并保留或丢弃它。但是使用一个更好的算法所获得的效率收益可能远远超过用Python实现整个过程所带来的效率损失。在这种情况下,你可能不得不使用C或C++来获得更好的性能。在
相关问题 更多 >
编程相关推荐