V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fourstring
V2EX  ›  问与答

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

  •  
  •   fourstring · 2018-12-22 09:35:35 +08:00 · 1876 次点击
    这是一个创建于 2163 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    7 条回复    2018-12-22 21:03:03 +08:00
    lniwn
        1
    lniwn  
       2018-12-22 09:44:10 +08:00 via iPhone   ❤️ 1
    我的解决方案是 flask 中写好接口,然后新建一个 trigger 项目,专门用来做定时触发任务,我觉得比写在 server 内部扩展性高多了。
    BigBrother1024
        2
    BigBrother1024  
       2018-12-22 09:47:15 +08:00 via iPhone   ❤️ 1
    celery
    Aprilming
        3
    Aprilming  
       2018-12-22 10:02:05 +08:00   ❤️ 1
    Channel, Django 有这个,里面有个"asgi.delay",延时任务功能,链接在这:https://channels.readthedocs.io/en/1.x/delay.html
    panyanyany
        4
    panyanyany  
       2018-12-22 10:12:05 +08:00
    最方便的不应该是写个 management 然后丢 crontab 吗?
    youngce
        5
    youngce  
       2018-12-22 10:27:06 +08:00   ❤️ 1
    celery,很好用的,楼主可以研究一下
    chi1st
        6
    chi1st  
       2018-12-22 15:00:36 +08:00 via Android   ❤️ 1
    celery,APScheduler
    dreambig183
        7
    dreambig183  
       2018-12-22 21:03:03 +08:00 via Android   ❤️ 1
    celey 了解一下楼主
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1082 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.