Django:在后台发送电子邮件的最佳方式?

Django:在后台发送电子邮件的最佳方式?,django,multithreading,background-process,Django,Multithreading,Background Process,我正在从Django(使用WebPosition)发送电子邮件。但是,这相当慢,因此我希望在后台发送电子邮件,即使电子邮件尚未发送,也会向用户返回响应 有什么好办法可以做到这一点吗 我读过关于芹菜的书,但它的制作似乎有很多步骤:没关系,但我想知道,在尝试之前,这是一种方法 线程呢 还是克朗·乔布斯 其他您有经验的?让我们简单概述一下可能的解决方案: 线程是糟糕的解决方案-因为它们只有在您的响应未发送之前才处于活动状态 芹菜——这是一种标准的方式,很容易添加到django(只需参阅许多关于djan

我正在从Django(使用WebPosition)发送电子邮件。但是,这相当慢,因此我希望在后台发送电子邮件,即使电子邮件尚未发送,也会向用户返回响应

有什么好办法可以做到这一点吗

我读过关于芹菜的书,但它的制作似乎有很多步骤:没关系,但我想知道,在尝试之前,这是一种方法

线程呢

还是克朗·乔布斯


其他您有经验的?

让我们简单概述一下可能的解决方案:


  • 线程是糟糕的解决方案-因为它们只有在您的响应未发送之前才处于活动状态

  • 芹菜——这是一种标准的方式,很容易添加到django(只需参阅许多关于django芹菜的教程中的一个,使用数据库作为代理就足够了)

  • Cron jobs——并不是真正好的程序员方式,因为您的代码将存储在repo和系统crontab中。所以每次你都应该考虑一下

  • 另一种方法是使用Eventlet或Gevent之类的东西。绿色线程将在空闲状态下工作,并且对于您的标准任务-非常容易添加。缺点:-就是你应该了解很多关于greenlet的知识,你应该小心在greenlet中捕捉错误


  • 我推荐使用芹菜,因为现在很容易添加,有很多教程和文档。此外,它也很容易随着应用程序的发展而成长。

    取决于应用程序的规模。如果计划保持最小和较小,线程工作良好,cronjobs也可以。但是,您很快就会希望将大量工作委派给后台,以加快请求/响应时间。是的,在WebPosition上设置芹菜+兔子是一项半复杂的任务(已经完成),但从长远来看,您将节省时间和精力。

    我可能会同意。这是一种比芹菜更简单的替代品,并且非常容易安装和使用。但是你需要ReIIS。

    < P>我会强烈地考虑使用芹菜。它不像看上去那么复杂,是执行任意异步任务的好工具。然而,使用Django和标准cron作业可以轻松地处理后台电子邮件

    首先,创建一个Django模型来保存要发送的电子邮件

    class EmailsToSend(models.Model):
      email = models.Email...
      .
      . 
      .
    
    接下来,创建一个Django admin命令来发送未发送的电子邮件。有关如何执行此操作的更多详细信息,请参阅。这段代码给出了基本的想法

    class Command(BaseCommand):
    
        def handle(self, *args, **options):
            emails = EmailsToSend.objects.all()
            for email in emails:
               send_my_email(email)
               email.delete()
    

    然后,您可以使用cron作业调度此命令。然而,我个人更喜欢用芹菜或类似的东西。这是一个稍微多一些的前期工作,但从长远来看是有回报的。

    可能是cron-jobs。简单无瑕。很多人都在用。我会尝试一下芹菜,并对它的过去进行评论。可能还需要一段时间。。开始其他东西。“因为它们只有在你的回复未发送之前才是活动的”?@rustem你能解释一下,“因为它们只有在你的回复未发送之前才是活动的”