python - 无限循环中的电子邮件监控。有什么缺点/更好的想法吗?
问题描述
我正在编写一个简短的脚本来监控我的收件箱,并在收到每封新电子邮件时收到通知。到目前为止,我正在使用这样的无限循环:
msg_id_check = None
while True:
result, data = mail.fetch(mail.select('INBOX')[1][0], "(RFC822)") # mail is an imaplib object
msg_str = email.message_from_bytes(data[0][1])
msg_id = get_email_id(msg_str.get('Received'))
if msg_id == msg_id_check: # Don't keep notifying me of the same email
continue
FROM = msg_str.get('From')
SUBJECT = msg_str.get('Subject')
BODY = get_body(msg_str).decode()
print(f"Subject: {SUBJECT}\nFrom: {FROM}\nBody: {BODY}")
msg_id_check = msg_id
我一开始以为我不能这样做,因为当我的计算机陷入无限循环时我听到了它的声音,听起来并不喜欢它,但是当我尝试这段代码时,我没有听到任何噪音我的电脑,所以我想知道,这是一个对 cpu 友好的过程,还是有更好的方法来收到每封收到的电子邮件的通知?
PS 现在我只是将新电子邮件打印到屏幕上,但在我的项目中,我需要处理这些电子邮件,我不想丢失任何这些电子邮件。
解决方案
当您发送请求时,如果没有 awnser(可能是超时),您的程序不会走得更远,因此您的 while 循环中有一个“缓冲区”,但如果您有新邮件,您不需要知道每一秒,您应该放一个time.sleep(60)
在循环结束时发送更少的无用请求
推荐阅读
- laravel - 未发送到 RocketChat 的 Laravel 通知
- list - 列表操作序言
- python - 使用百分比将数据框的子集与完整的子集进行比较
- vhdl - 如何判断乘法何时完成?
- javascript - 更新 React 应用程序中的状态,用新的排序对象数组替换旧数组
- javascript - 从 API JSON 数据硬编码每个值/属性
- python - 如何获取 BeautifulSoup 的所有链接
- python - 从打印功能更改为循环写入功能
- python-3.x - Django:无法将 urlopen 响应文件作为二进制文件读取
- python - 如何获取 ffprobe 元数据作为变量以在 python 中解析