在 Django 应用中如何实现没有用户请求的情况下也会执行一定的操作?

2018 年 12 月 22 日
 fourstring

我在用 Django 写一个自动控制空调的网页后端,有一个需求是能让用户设置定时开启空调。问题在于,一般 Django 以及 Flask 等框架的运作逻辑都是用户请求->服务端响应的模式,然而要实现定时功能必须在服务端有一个持续运行的检查时间的逻辑才行。

我现在采用的方法是服务端( Ubuntu )设置计划任务,然后单独写一个脚本检测数据库中存储的时间点,并且每分钟执行一次,如果检测到脚本执行时的时间是用户预定的开机时间则开启空调。

但是这种方案的扩展性并不好,那么 Django 框架中是否有办法实现在没有用户请求时也在服务端持续运行的逻辑呢?谢谢!

2762 次点击
所在节点    问与答
7 条回复
lniwn
2018 年 12 月 22 日
我的解决方案是 flask 中写好接口,然后新建一个 trigger 项目,专门用来做定时触发任务,我觉得比写在 server 内部扩展性高多了。
jmperdev
2018 年 12 月 22 日
celery
Aprilming
2018 年 12 月 22 日
Channel, Django 有这个,里面有个"asgi.delay",延时任务功能,链接在这:https://channels.readthedocs.io/en/1.x/delay.html
panyanyany
2018 年 12 月 22 日
最方便的不应该是写个 management 然后丢 crontab 吗?
ynkkdev
2018 年 12 月 22 日
celery,很好用的,楼主可以研究一下
chi1st
2018 年 12 月 22 日
celery,APScheduler
dreambig183
2018 年 12 月 22 日
celey 了解一下楼主

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/519935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX