有没有办法从Python [Django]进行异步函数调用?

Dat*_*eed 6 python django asynchronous

我正在创建一个Django应用程序,它对上传的文件进行各种长计算.我不想让用户等待处理文件 - 我只是想向用户显示一个页面,读取的内容类似于"正在解析文件".

如何从视图中进行异步函数调用?

可能看起来像这样的东西:

def view(request):
    ...
    if form.is_valid():
        form.save()
        async_call(handle_file)
    return render_to_response(...)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 7

我建议您完全将其分开,而不是尝试通过子进程或线程来管理它.有两种方法:第一种方法是在某个地方的数据库表中设置一个标志,并定期运行一个cron作业来检查标志并执行所需的操作.

第二个选项是使用消息队列.您的文件上载过程在队列上发送消息,并且单独的侦听器接收消息并执行所需操作.我已经将RabbitMQ用于此类事情,但其他人也可以使用.

无论哪种方式,您的用户都不必等待该过程完成,您不必担心管理子进程.

  • 顺便说一句,如果somone现在正在阅读解决方案,我建议尝试Celery. (2认同)