我有一个 Django 应用程序,它需要监视用户向其发送电子邮件的电子邮件帐户。例如,如果发件人已经注册,它会将电子邮件的主题保存到数据库中。实际的应用程序比这个例子更复杂,所以我想设置一个 celery 任务以分布式方式在后台处理电子邮件。我已经有一个 celery 任务来异步发送电子邮件,但是有几个问题我想听听您对处理收到的电子邮件的看法:
1)后缀(或其他类似的东西)有没有办法将新电子邮件推送到python脚本?如果没有,我必须定期从 celery 轮询收件箱,对吗?
2) 确保每封电子邮件由一个且只有一个工作人员处理,以下哪个更好?
让单个任务轮询收件箱,然后将工作分配给多个工作人员进行处理(例如,每个工作人员收到 N 封电子邮件)
让多个工作人员轮询收件箱,每个人都收到一些电子邮件
3)轮询电子邮件收件箱,因为我可以直接访问电子邮件服务器,我认为轮询文件比通过 IMAP 轮询更有效。这样做有什么缺点吗?
我目前的方案(计划但尚未实施/测试,所以这只是一个粗略的想法......)
- 有 N 个工作人员(比如 N=10)轮询收件箱(按文件)
- 具有计算每封电子邮件的哈希值的功能
- 工人 m 在以下情况下收到电子邮件:(其哈希 % N)= m。这样,每封电子邮件都由一个且只有一个工作人员处理,但问题是如果工作人员停机,某些电子邮件将永远不会被处理!如何克服这一点?
谢谢你让我知道你的意见!