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