django 如何异步执行一个函数,即将任务移交给子进程并返回响应

Posted

技术标签:

【中文标题】django 如何异步执行一个函数,即将任务移交给子进程并返回响应【英文标题】:django How to execute a function asynchronously i.e, handover a task to a sub process and return response 【发布时间】:2019-01-18 07:56:16 【问题描述】:

我正在使用 django 2.0 和 python 3.6。

用户注册包括发送验证邮件。而且这个邮件发送过程耗时较长,用户一直在等待。

我需要什么?:如果用户注册表单有效,邮件详细信息将发送到另一个任务处理程序,无论邮件是否发送,该功能都必须恢复并返回响应。

def new_user_registration(request):
    form = CustomUserCreationForm(request.POST or None)
    if form.is_valid():
        user = form.save()
        send_verification_mail(user) #<= taking more time.
        return render(request, 'registration/signup.html')

send_verification_mail 必须异步调用。如何实现?

注意:我是 django 和 python 的新手。

【问题讨论】:

您可能想查看 celery 库。它充当任务管理器,以帮助长时间运行的任务避免阻塞其他请求。它通常与 django 和 flask 一起使用(由于网络问题无法链接到他们的主页) 查看Django's async support 【参考方案1】:

大多数情况下,您会为此使用task queue。

Celery 已经存在了很长时间,并且众所周知并且有文档记录,但是最近我将所有东西都转移到了TaskTiger

【讨论】:

以上是关于django 如何异步执行一个函数,即将任务移交给子进程并返回响应的主要内容,如果未能解决你的问题,请参考以下文章

回调函数 协程

django使用celery执行异步任务时采用信号实现每个任务日志独立存放(after_setup_logger)

Django使用Celery加redis执行异步任务

如何从 lambda 函数异步传递红移查询?

Django使用celery异步发邮件

TPL异步并行编程之任务超时