如何在 django 中运行后台任务,完成后,我可以将信息推送到前端。
Posted
技术标签:
【中文标题】如何在 django 中运行后台任务,完成后,我可以将信息推送到前端。【英文标题】:How can I run a background-task in django and when it's done, I can push information to front end. 【发布时间】:2017-09-28 08:28:34 【问题描述】:由于我在views.py 中的一项任务很耗时,所以我想我最好把它放在后台。而且,我想确保当这个任务完成时,我会在前端收到一些东西。我怎样才能做到这一点?我已经搜索并找到了 django-channels,但仍然无法将这两个目标结合在一起。希望有人能帮助我。
【问题讨论】:
向我们展示您的意见.py 【参考方案1】:你基本上有两个选择:
您可以让您的客户定期请求您的长期运行任务的状态,并在完成后做出相应的响应。
或者您在客户端和服务器之间使用套接字,并在任务完成时通过套接字通知客户端。推荐的套接字选项之一是 django-channels。有什么问题吗?
【讨论】:
【参考方案2】:始终使用异步任务处理来运行后台任务,例如
-
芹菜
DJANGO 后台任务 (https://github.com/arteria/django-background-tasks)
用于推送通知
-
Django-channels(websockets)
Django-webpush https://github.com/safwanrahman/django-webpush
轮询
Tornado(long open connection) 或者 Django 中的 StreamingHttpResponse 也可以解决
如果您认为 websockets 难以维护,请进行投票。
【讨论】:
以上是关于如何在 django 中运行后台任务,完成后,我可以将信息推送到前端。的主要内容,如果未能解决你的问题,请参考以下文章
应用在后台运行一段时间后,Firebase 存储下载任务未完成