【问题标题】:Simple way to send emails asynchronously异步发送电子邮件的简单方法
【发布时间】:2014-02-13 19:38:57
【问题描述】:

我正在运行一个 django 应用程序,当发生某些事件时,我想向收件人列表发送电子邮件。

我知道使用 Celery 将是一个明智的选择,但我想知道是否有另一种最简单的方法来做到这一点,而无需安装代理服务器、主管来处理在后台运行的守护进程。 ..

我想找到一种更简单的方法,并在需要时将其更改为 celery。我不负责生产服务器,我知道运行它的人在设置所有配置以工作时会遇到很大的麻烦。我正在考虑触发一个 django 命令,该命令使用多处理库或类似的东西打开多个进程。

【问题讨论】:

    标签: django python-multithreading django-commands


    【解决方案1】:

    这通常是队列的一个很好的用例。如果您不想在本地运行队列服务器(如 Celery),您有几个选择。

    1. 有许多 SaaS 队列服务,例如 Amazon SQS(以及其他任意数量),您可以将它们挂接到您的应用程序中,而无需在您的计算机上运行其他服务。

    2. 您可以使用数据库和 cron 作业实现一种“穷人队列”。在这种情况下,当您的事件发生时,您可以将一些信息塞入您的数据库中。然后,您可以通过management command 启动一个 cron 作业,该作业会扫描您的“排队消息”表并定期发送电子邮件。请注意,这仅在您的消息队列保持相对较小的情况下才有效——如果您要发送这么多消息,您将开始考虑让多个进程发送消息,这会打开排队系统的蠕虫罐头打算首先解决。

    【讨论】:

      【解决方案2】:

      如果您不想实现 celery(在我看来设置起来并不难),那么您最好的选择可能是使用您的数据库实现一个非常简单的队列。它可能会按照以下方式工作:

      1. 系统确定需要发送一封电子邮件,并在数据库中创建一个状态为“已创建”或“已排队​​”的行
      2. 另一方面,将有一个进程定期扫描您的“队列”。如果他们找到要发送的任何内容(在这种情况下,任何状态为“已创建/已排队”的行,他们会将状态更新为“正在发送”。然后该过程将继续发送电子邮件并最终将状态更新为已发送。李>

      这将负责异步发送对象并在出现问题时跟踪所有电子邮件的状态。

      如果额外的更新对您的数据库造成太大负担,您可能会为队列使用 Redis 后端。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-06
      • 2012-08-11
      • 1970-01-01
      • 2017-07-13
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多