如何在 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 中运行后台任务,完成后,我可以将信息推送到前端。的主要内容,如果未能解决你的问题,请参考以下文章

如何只运行一次 Django 后台任务

应用在后台运行一段时间后,Firebase 存储下载任务未完成

Django中使用celery完成异步/耗时/后台任务

使用 celery-beat 完成上一个任务后,如何在 5 分钟内运行任务?

AJAX成功的Django渲染模板

如何在 Django 中运行和查看 celery 任务?