Mar*_*arc 26 python django asynchronous background-process deferred
我有一个Django网站,一个页面有一个按钮(或链接),点击它将启动一个有点长时间运行的任务.显然,我想将此任务作为后台任务启动,并立即将结果返回给用户.我想使用一种简单的方法实现这一点,这种方法不需要我安装和学习像Celery这样的全新消息传递架构.我不想用芹菜!我只想使用一种简单的方法,我可以设置并在接下来的半小时左右运行.是不是有简单的方法在Django中执行此操作而无需添加(另一个)第三方程序包?
Ben*_*ueg 21
只需使用一个线程.
import threading
t = threading.Thread(target=long_process,
args=args,
kwargs=kwargs)
t.setDaemon(True)
t.start()
return HttpResponse()
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参阅此问题: Django可以执行多线程工作吗?
use*_*114 14
看看django-background-tasks - 它完全符合您的需求,不需要像RabbitMQ或Redis那样运行任何其他服务.它管理数据库中的任务队列,并具有Django管理命令,您可以运行一次或作为cron作业.
如果您愿意安装第 3 方库,但想要比 Celery 简单得多的东西,请查看 Redis Queue。它确实需要 Redis,这本身很容易,但这也可以提供许多其他好处。
RQ 本身几乎为零配置。这非常简单。
参考: