django 定时触发任务 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lyang
V2EX    Django

django 定时触发任务

  •  
  •   lyang 2022-05-11 09:52:43 +08:00 4317 次点击
    这是一个创建于 1250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个小的店铺项目,需要实现自动下架的功能,比如,页面上设置了下架时间为 2022 年 6 月 1 日 10:00:00,然后在指定时间下架。

    产品需求

    • 不要定期触发的定时任务,比如 1 分钟一次查数据库,不够精准,耗资源
    • 用指定时间任务的形式触发修改上下架状态,(用下架时间判断上下架的方式,这样就不用定时任务触发,pass )

    所以想问问,django 有没有接口触发,创建任务,在指定的日期时间运行一次的模块。

    25 条回复    2022-06-27 09:55:34 +08:00
    wizardoz
        1
    wizardoz  
       2022-05-11 09:58:10 +08:00
    apscheduler
    justyoung
        2
    justyoung  
       2022-05-11 10:02:43 +08:00
    试试 Celery
    lyang
        3
    lyang  
    OP
       2022-05-11 10:05:10 +08:00
    @wizardoz
    ```
    sched.add_job(my_job, 'date', run_date=datetime(2009, 11, 6, 16, 30, 5), args=['text'])
    ```
    看到了,我再看看能不能跟接口结合
    qsnow6
        4
    qsnow6  
       2022-05-11 10:06:02 +08:00
    lyang
        5
    lyang  
    OP
       2022-05-11 10:06:17 +08:00
    @justyoung
    我先看看 apscheduler ,之前的自动确认收货就是用这个,apscheduler 可以指定 run_date ,或许可以实现需求
    lyang
        6
    lyang  
    OP
       2022-05-11 10:09:25 +08:00
    @qsnow6
    暂时没看到有指定时间的
    sujin190
        7
    sujin190  
       2022-05-11 10:13:37 +08:00
    https://github.com/snower/forsun

    推荐下之前做的服务,能够用商品 ID 做 key 创建定时任务,可以设置为到时间自动回调你设定的 url ,后端持久化可以用 redis ,估计能满足你的需求吧
    lyang
        8
    lyang  
    OP
       2022-05-11 10:17:28 +08:00
    @sujin190 多谢,star 了,需求能满足,我这个小项目,apscheduler 能满足我还是先用 apscheduler 了
    westoy
        9
    westoy  
       2022-05-11 10:17:49 +08:00   1
    商品直接加有效期起始字段, 展示和用户下单的时候判断是否在有效期

    要干一些关联性收尾的活儿用任务队列那是没办法, 就判断下是否在有效期没必要啊......
    fds
        10
    fds  
       2022-05-11 10:21:31 +08:00
    仅就这个需求来说,直接用下架时间判断还是最理想。用定时任务你得能接受分钟级别误差,而且还得记录执行状态避免各种没能执行的情况,没必要。
    sciel
        11
    sciel  
       2022-05-11 10:24:38 +08:00
    lyang
        12
    lyang  
    OP
       2022-05-11 10:26:28 +08:00
    @westoy
    @fds
    我也是这样想的,产品需求 pass 了
    lyang
        13
    lyang  
    OP
      &nbp;2022-05-11 10:27:13 +08:00
    @sciel go 不会啊,python 也有,只是我之前没找到,没碰到这类需求。/苦笑
    a663
        14
    a663  
       2022-05-11 11:01:51 +08:00
    查一下 django-q 或者 celery 你这个场景直接 django-q 就 ok
    krixaar
        15
    krixaar  
       2022-05-11 11:05:30 +08:00
    直接写 view 里处理就是了,当后台 query 商品列表的时候还有前台访问商品的时候,如果当前时间大于下架时间而且上架状态不正确的直接改掉 save ,也就是没人看的时候不改数据库,有人看了才改一次,这样也不用担心定时任务万一没跑搞出状态 bug
    isSamle
        16
    isSamle  
       2022-05-11 11:09:59 +08:00
    http://106.13.1.2/project-1/doc-210/
    或者用 sh 脚本定时触发
    kidblg
        17
    kidblg  
       2022-05-11 11:16:19 +08:00
    为啥不在商品 model 里加入下架时间呢?
    lyy16384
        18
    lyy16384  
       2022-05-11 11:17:09 +08:00
    @lyang #12 你们的产品这么强势的吗,连开发方案也要他定
    lyang
        19
    lyang  
    OP
       2022-05-11 11:24:51 +08:00
    @a663 先用 apscheduler 这个了

    @krixaar 这也是一种方法,但是多个接口里有用到,如果 model 支持在被查询的时候触发信号,应该可以

    @isSamle 我这需要指定 datetime ,不是定期,所以一开始没找到。

    @kidblg 加了,但是不让用这个方法。。。

    @lyy16384 额,几年的工作让我习惯了,我说了几遍,不让用,那就算了,到这找找解决方案,还好有现成的
    paopjian
        20
    paopjian  
       2022-05-11 12:33:12 +08:00
    数据库里加一条过期时间,一旦有人浏览这个物品了就触发检测显示下架?这样也不用定时了
    Huelse
        21
    Huelse  
       2022-05-11 13:14:34 +08:00
    crontab 就可以了
    Rache1
        22
    Rache1  
       2022-05-11 13:39:01 +08:00
    延时队列
    Aprilming
        23
    Aprilming  
       2022-05-11 16:28:47 +08:00
    celery 延时就行了
    himeson
        24
    himeson  
       2022-06-25 23:35:21 +08:00
    celery 是正解,在添加商品下架日期后,用 celery 设置一个 schedule 是每分钟执行一次的任务,搜索当前时间有没有需要下架操作的商品,有就执行下架。
    lyang
        25
    lyang  
    OP
       2022-06-27 09:55:34 +08:00
    @himeson 我还是用了 apscheduler ,轻量。另外这些库都有指定时间的,可以不用每分钟执行一次,可以在指定日期时分秒执行。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2706 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 08:50 PVG 16:50 LAX 01:50 JFK 04:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86