Django模型,信号和电子邮件发送延迟

时间:2010-02-28 00:08:41

标签: django django-models django-signals

我已向我的模型添加了一个信号,该信号会在保存模型后通过models.signals.post_save.connect信号发送电子邮件至某些电子邮件地址,send_mail用于发送电子邮件。这个想法仍然会延迟用户,当他们在网站上保存模型时,他们必须等到所有这些电子邮件都被发送,并且当他们从服务器收到响应时就是这样。

在尝试信号之前,我曾尝试包装模型的保存方法,并在super(Foo, self).save(*args, **kwargs)之后发送电子邮件。这种延迟体验也是用这种方法发生的。

我只是希望我的电子邮件发送操作在后台完成,而不会向网站上的用户显示延迟。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

为避免延迟响应,您希望在另一个进程中异步执行此操作。

这个问题是关于如何处理:Advice on Python/Django and message queues

答案 1 :(得分:1)

最简单的方法是对电子邮件进行排队,然后让它们由守护程序发送。查看django-mailer

由于您似乎只关注send_mail,因此您可以开始使用两个步骤。首先,使用它来导入django-mailer的send_mail版本:

# favour django-mailer but fall back to django.core.mail
from django.conf import settings

if "mailer" in settings.INSTALLED_APPS:
    from mailer import send_mail
else:
    from django.core.mail import send_mail

然后创建一个调用manage.py send_mail来发送邮件的cronjob。检查django-mailer usage docs例如cronjob条目。

如果您没有看到任何电子邮件发送,请尝试在控制台上运行manage.py send_mail。这似乎是人们遇到的头号问题。