你好,我有一个人探测器脚本,我想发送一个信息,如果任何人检测到的邮件输入为了防止垃圾邮件,我需要一个发送邮件计时器函数。函数可能会随时触发,但只有在不冷却时才会响应。你知道吗
我尝试使用异步任务,但无法实现,因为如果有人检测到它会进入一个循环,在那里它每5分钟发送一次电子邮件,即使第一眼看到后没有检测到任何人。你知道吗
示例:
我的代码摘要。(只有必要的部分检测和发送邮件工作冷却(定时器)不工作
async def sendAlert():
server.sendmail(sender_email, receiver_email, message)
print('sent!')
await asyncio.sleep(300)
if __name__ == "__main__":
while True:
for i in range(len(boxes)):
if classes[i] == 1 and scores[i] > threshold:
with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
sendAlert(server)
box = boxes[i]
cv2.rectangle(img,(box[1],box[0]),(box[3],box[2]),(255,0,0),2)
如果检测到人员,脚本将通过发送警报电子邮件。之后如果在5分钟内再次检测到人员,sendAlert功能应在5分钟后才响应
我同意@Prune的观点,即您需要创建一个小的(最小的)用例并呈现您的代码,这样它不仅与您相关,而且与其他人相关。此外,你的问题应该有一个可验证的例子部分。如果没有这些属性,人们就很难理解、解决和/或提出任何可验证的解决方案。你知道吗
但是,据我所知,在某个
cool-off
时间段之后,您需要执行一些操作(如果检测到某人,则发送电子邮件)。所以,换句话说,你需要一种跟踪时间的机制。因此,您需要datetime
库。你知道吗因此,伪代码应该如下所示:
伪码
您可以使用
datetime.datetime.utcnow()
作为时间戳。和datetime.timedelta()
定义dt_cutoff
。要读取时间字符串,请执行以下操作:我希望这能给你一些关于如何建模的想法。你知道吗
额外资源
完整解决方案
最后,如果您急于使用现成的解决方案,可以使用下面的class对象,如图所示。您只需通过指定冷却期(
timer_cutoff
)实例化类对象,然后调用方法is_timeout()
。如果返回True
,则发送通知。还有一个obj.istimeout
属性存储这个决策(True
/False
)。你知道吗类时间跟踪器
下面是类
TimeTracker
类:相关问题 更多 >
编程相关推荐