一个小的店铺项目,需要实现自动下架的功能,比如,页面上设置了下架时间为 2022 年 6 月 1 日 10:00:00,然后在指定时间下架。
产品需求
所以想问问,django 有没有接口触发,创建任务,在指定的日期时间运行一次的模块。
1
wizardoz 2022-05-11 09:58:10 +08:00
apscheduler
|
2
justyoung 2022-05-11 10:02:43 +08:00
试试 Celery
|
3
lyang OP @wizardoz
``` sched.add_job(my_job, 'date', run_date=datetime(2009, 11, 6, 16, 30, 5), args=['text']) ``` 看到了,我再看看能不能跟接口结合 |
4
qsnow6 2022-05-11 10:06:02 +08:00
|
5
lyang OP @justyoung
我先看看 apscheduler ,之前的自动确认收货就是用这个,apscheduler 可以指定 run_date ,或许可以实现需求 |
7
sujin190 2022-05-11 10:13:37 +08:00
https://github.com/snower/forsun
推荐下之前做的服务,能够用商品 ID 做 key 创建定时任务,可以设置为到时间自动回调你设定的 url ,后端持久化可以用 redis ,估计能满足你的需求吧 |
8
lyang OP @sujin190 多谢,star 了,需求能满足,我这个小项目,apscheduler 能满足我还是先用 apscheduler 了
|
9
westoy 2022-05-11 10:17:49 +08:00 1
商品直接加有效期起始字段, 展示和用户下单的时候判断是否在有效期
要干一些关联性收尾的活儿用任务队列那是没办法, 就判断下是否在有效期没必要啊...... |
10
fds 2022-05-11 10:21:31 +08:00
仅就这个需求来说,直接用下架时间判断还是最理想。用定时任务你得能接受分钟级别误差,而且还得记录执行状态避免各种没能执行的情况,没必要。
|
11
sciel 2022-05-11 10:24:38 +08:00
|
14
a663 2022-05-11 11:01:51 +08:00
查一下 django-q 或者 celery 你这个场景直接 django-q 就 ok
|
15
krixaar 2022-05-11 11:05:30 +08:00
直接写 view 里处理就是了,当后台 query 商品列表的时候还有前台访问商品的时候,如果当前时间大于下架时间而且上架状态不正确的直接改掉 save ,也就是没人看的时候不改数据库,有人看了才改一次,这样也不用担心定时任务万一没跑搞出状态 bug
|
16
isSamle 2022-05-11 11:09:59 +08:00
http://106.13.1.2/project-1/doc-210/
或者用 sh 脚本定时触发 |
17
kidblg 2022-05-11 11:16:19 +08:00
为啥不在商品 model 里加入下架时间呢?
|
19
lyang OP |
20
paopjian 2022-05-11 12:33:12 +08:00
数据库里加一条过期时间,一旦有人浏览这个物品了就触发检测显示下架?这样也不用定时了
|
21
Huelse 2022-05-11 13:14:34 +08:00
crontab 就可以了
|
22
Rache1 2022-05-11 13:39:01 +08:00
延时队列
|
23
Aprilming 2022-05-11 16:28:47 +08:00
celery 延时就行了
|
24
himeson 2022-06-25 23:35:21 +08:00
celery 是正解,在添加商品下架日期后,用 celery 设置一个 schedule 是每分钟执行一次的任务,搜索当前时间有没有需要下架操作的商品,有就执行下架。
|
25
lyang OP @himeson 我还是用了 apscheduler ,轻量。另外这些库都有指定时间的,可以不用每分钟执行一次,可以在指定日期时分秒执行。
|