Python/Django:后台发送邮件
想象一下,有一个用户在网站上进行了一项操作,然后管理员们需要收到通知。假设有20个管理员需要通知。如果用Django的普通方法发送邮件,用户就得等到所有邮件都发完了才能继续操作。
那么,有没有办法把所有的邮件发送放在一个单独的进程里,这样用户就不用等了呢?这可能吗?
3 个回答
5
如果我们只需要一次发送20封邮件,使用线程可能是一个可行的解决办法。对于那些比较耗时的后台任务,可以使用Celery。
下面是一个使用线程的示例:
# This Python file uses the following encoding: utf-8
#threading
from threading import Thread
...
class afegeixThread(Thread):
def __init__ (self,usuari, parameter=None):
Thread.__init__(self)
self.parameter = parameter
...
def run(self):
errors = []
try:
if self.paramenter:
....
except Exception, e:
...
...
n = afegeixThread( 'p1' )
n.start()
7
另一个选择是django-mailer。它会把邮件放到一个数据库表里排队,然后你可以用定时任务(cron job)来发送这些邮件。
25
使用 celery 作为任务队列,还有 django-celery-email,这是一个Django的邮件发送工具,它可以把发送邮件的工作交给celery来处理。