Python 在Django中启动后台任务的简单方法

Python 在Django中启动后台任务的简单方法,python,django,asynchronous,background-process,deferred,Python,Django,Asynchronous,Background Process,Deferred,我有一个Django网站,其中一个页面上有一个按钮(或链接),单击该按钮将启动一个运行时间较长的任务。显然,我希望将此任务作为后台任务启动,并立即将结果返回给用户。我想用一种简单的方法来实现它,而不需要我安装和学习一个全新的消息传递体系结构,比如芹菜。我不想用芹菜!我只想使用一个简单的方法,我可以设置并在接下来的半小时左右开始运行。在Django中,不需要添加(另一个)第三方软件包,难道没有一种简单的方法可以做到这一点吗 只要用一根线就行了 import threading t = threa

我有一个Django网站,其中一个页面上有一个按钮(或链接),单击该按钮将启动一个运行时间较长的任务。显然,我希望将此任务作为后台任务启动,并立即将结果返回给用户。我想用一种简单的方法来实现它,而不需要我安装和学习一个全新的消息传递体系结构,比如芹菜。我不想用芹菜!我只想使用一个简单的方法,我可以设置并在接下来的半小时左右开始运行。在Django中,不需要添加(另一个)第三方软件包,难道没有一种简单的方法可以做到这一点吗

只要用一根线就行了

import threading

t = threading.Thread(target=long_process,
                            args=args,
                            kwargs=kwargs)
t.setDaemon(True)
t.start()
return HttpResponse()
有关更多详细信息,请参见此问题:

如果你愿意安装第三方库,但你想要比芹菜简单得多的东西,请查看Redis Queue。它确实需要Redis,这本身非常简单,但也可以提供许多其他好处

RQ本身几乎没有配置。它非常简单

参考资料:

  • (Heroku上的RQ)

看一看-它完全满足您的需要,不需要任何额外的服务来像RabbitMQ或Redis一样运行。它管理数据库中的一个任务队列,并具有一个Django管理命令,您可以一次性运行该命令,也可以将其作为cron作业运行。

您可以让服务器返回请求接收类型的响应。然后,如果轮询或WebSocket不是一个选项,只需让服务器更新完成百分比值,可能每10%或25%更新一次。并有一个指定区域供用户检查任何正在运行的进程,并显示完成百分比。这样,只有当用户转到或刷新正在运行的进程页面时,浏览器才会访问服务器。然后,如果一个过程已经100%完成,就有一个到结果的链接。注意:更新完成百分比值的服务器仅在服务器上[例如DB值]。如果用户转到给定页面,则可以查询此信息。这还取决于您的基础结构如何处理并发连接。运行过程可能会阻塞,因此您可能需要研究类似tornado的东西。我非常怀疑您自己编写的任何东西是否会比安装芹菜并处理好芹菜更简单。“我非常怀疑您自己编写的任何东西是否会比安装芹菜并处理好芹菜更简单。”-让我想想-我能想到很多比芹菜简单的东西。这是一个很棒的软件,但它是一个可以处理大规模、大容量分布式任务的大量代码。它需要单独安装键值存储、代理和其他工具。如果你只是想运行一个后台任务,那么我会寻找其他的东西。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-@Rao链接指向解决问题的模块,而不是如何解决问题的描述。我不知道如何重写这篇文章,也许你有一些建议?这个模块目前只适用于Django 1.4到1.8。我们今天将Django后台任务的更稳定和健壮的版本(1.1.6)推到Python包索引中。这也支持最新最棒的Django版本。发行说明:是否有人知道如何使用django后台任务在视图中立即启动后台作业(而不是等待它完成)?我认为这需要更多的可见性。我最近围绕芹菜和RabbitMQ构建了一个项目,当时我真的应该使用线程。我在这里建立了一个最简单的例子:这个问题在这一点上已经存在多年了,但我现在已经在许多这样的任务中使用了RQ。这真的是令人惊讶的简单和作品像一个魅力。强烈推荐。