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

时间:2014-02-21 20:59:40

标签: python django asynchronous background-process deferred

我有一个Django网站,一个页面有一个按钮(或链接),点击它将启动一个有点长时间运行的任务。显然,我想将此任务作为后台任务启动,并立即将结果返回给用户。我想使用一种简单的方法实现这一点,这种方法不需要我安装和学习像Celery这样的全新消息传递架构。我不想用芹菜!我只想使用一种简单的方法,我可以设置并在接下来的半小时左右运行。是不是有简单的方法在Django中执行此操作而无需添加(另一个)第三方程序包?

3 个答案:

答案 0 :(得分:14)

只需使用一个帖子。

import threading

t = threading.Thread(target=long_process,
                            args=args,
                            kwargs=kwargs)
t.setDaemon(True)
t.start()
return HttpResponse()

有关详细信息,请参阅此问题: Can Django do multi-thread works?

答案 1 :(得分:12)

查看django-background-tasks - 它完全符合您的需求,不需要像RabbitMQ或Redis那样运行任何其他服务。它管理数据库中的任务队列,并具有Django管理命令,您可以运行一次或作为cron作业。

答案 2 :(得分:2)

如果您愿意安装第三方库,但想要比Celery更简单的东西,请查看Redis Queue。它确实需要Redis,这本身很容易,但也可以提供很多其他好处。

RQ本身的配置几乎为零。这简直太简单了。

参考文献: