2

我在我的模型中添加了一个信号,一旦模型被保存(通过models.signals.post_save.connect信号和send_mail电子邮件发送),它就会向一些电子邮件地址发送电子邮件。这个想法仍然给用户带来了延迟,当他们将模型保存在站点上时,他们必须等到所有这些电子邮件都发送完毕,然后才收到服务器的响应。

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

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

如何解决?

4

2 回答 2

2

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

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

于 2010-02-28T00:16:48.323 回答
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 使用文档,例如 cronjob 条目。

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

于 2010-02-28T01:14:00.677 回答