send_mass_mail在后台django中

时间:2011-11-28 11:15:35

标签: python django django-models django-forms

我正在使用send_mass_email将电子邮件发送到用户列表。它工作正常,直到我一次发送到200多封电子邮件。 实际上电子邮件正在交付而没有问题。但是我从nginx收到超时错误,因为向所有200多封电子邮件发送电子邮件需要很长时间(超过2分钟)。

在后台运行send_mass_mail的最佳方法是什么?

4 个答案:

答案 0 :(得分:3)

您需要将任务移至后台(因此它们不会阻止Web进程)。最常用的方法之一是使用消息传递/任务队列。

Celery是最受欢迎的分布式任务队列之一,再加上django-celery应用程序使这一点变得微不足道。

首先你需要设置芹菜(就像pip install -U celery一样简单);以及它支持的众多消息传递代理之一。最受欢迎的是RabbitMQ;但是对于快速和脏的设置,您还可以使用existing database作为消息代理。

最后,因为这是celery + django解决的常见问题,所以有django-celery-email来处理剩下的事情。

答案 1 :(得分:3)

您可能希望查看封装此功能的django-mailer项目 - 它通过crons执行此操作,而不是使用任务队列。我已经使用了一段时间并取得了良好的效果。

答案 2 :(得分:1)

您可以在单独的帖子中发送邮件,例如:

t = threading.Thread(target=send_mass_email,
            args=[messages],
            kwargs={'fail_silently': True})
t.setDaemon(True)
t.start()

或者只使用cron和django管理命令=) https://docs.djangoproject.com/en/dev/howto/custom-management-commands/

答案 3 :(得分:0)

您可以将其设为管理命令,然后设置定期的cron作业以发送电子邮件,参考management command docs