2015-11-13 84 views
0

是他做异步的正确方法调用Python中的功能?什么是发送邮件异步在Python/Django的正确方法是什么?

起始密码

pool = Pool(processes=4) 
       pool.apply_async(send_email, ['CONFIRM', email, auth_token, password, "", first_name]) 

功能

def send_email(flag, email, auth_token='', password='', shared_by='', name=''): 

    try : 
      send_mail('Greetings!', 'Hi '+str(name)+'\nThank you for checking us out!' 
          'Please click on the link below to activate your subscription.\n' + confirmation_link + 
       '\npassword : ' + password, '[email protected]', [email], 
       fail_silently=False) 
    except SMTPException as e: 
      print e 

有我看了网上的文档?

是的,我有,但它严重并没有多大帮助。所以我在这里寻求帮助。

+0

您已阅读在线文档,但您没有告诉我们您的工作有什么问题。 –

+0

我想知道这是否是异步需要做的呢? – cafebabe1991

+0

它在最上面的@ShangWang的问题 – cafebabe1991

回答

1

如果你想要的东西异步集成在Django,你需要一个异步任务队列/工作。如果你需要发送大量的邮件,它会阻止Django流。

任务队列管理必须在 常规HTTP请求 - 响应周期之外执行的后台工作。

任务异步处理或者是因为它们不是通过HTTP请求启动 ,或者是因为它们是长时间运行的作业,会大大降低HTTP响应的性能。

有迹象表明,与Django的集成以及像芹菜docs)几个任务队列系统。我建议您阅读以了解并选择正确的解决方案:Full Stack Python - Task queues

+0

是的,我读过芹菜和你说的重载我的django也是不可否认的。我还想知道上面的代码是否可以异步工作?因为我认为它仍然阻止我到达浏览器的响应,但是当我终止其运行的进程时,我在浏览器中得到响应。所以我认为上面的代码有问题。你能帮我吗 ? – cafebabe1991

+0

我无法帮助你,我用python编写了一些服务器,并且异步处理任务,我使用了Thread。关于你的代码,我无法帮你解决这段代码。我认为Pool对象不容易集成到模块中,因为Django是一个框架,它修复了一些规则:[检查它可以帮助你](http://stackoverflow.com/questions/18947876/using-python-multiprocessing -pool-内式终端和 - 在代码模块换django的)。但我可以告诉你,这不是你想要的正确方法。你必须使用任务队列/作业。 –

相关问题