现在有一个这样的需求:用户调用接口 A,发起一个“新建活动”的请求,并且传来了 活动的结束时间 参数。然后后端需要在结束时间到达的时候自动触发活动结束的逻辑。请问这个需要如何解决呢?(看了一下 signal,好像没有办法按照时间触发而只能对数据库表操作触发。)
1
cloverstd 2018-06-12 13:20:48 +08:00
celery 了解下?
|
2
silhouette OP @cloverstd 这个稳健。顺便问一下有没有 django 原生支持的定时触发器?
|
3
blodside 2018-06-12 13:25:54 +08:00 via Android
@silhouette 没有
|
4
polythene 2018-06-12 13:28:28 +08:00
如果不想搞太复杂的架构,可以考虑用 apscheduler,通过数据库记录定时任务:
https://github.com/polyrabbit/WeCron/blob/master/WeCron/remind/models/scheduler.py |
5
gotounix 2018-06-12 13:40:05 +08:00
|
6
xpresslink 2018-06-12 13:52:01 +08:00 1
如果异步和定时任务比较多建议上 django-celery,一劳永逸。
如果就是一个简单的任务,给你提供一个没有技术难度的方法,简单、可靠、无耦合。 弄个数据库任务队列表,只要这么几个字段:触发时间,任务名称,触发哪个脚本,状态表示是否执行成功。 在用户调用接口 A 时在任务表里插入一条任务,设置触发时间。 写个脚本用 linux 的 cronjob 设置成 5 钟执行一次,从数据表里检索,触发时间已到,未执行成功的行。然后按触发脚本执行。把状态改成执行成功。 |
7
jennifertxwoodma 2018-06-12 14:32:49 +08:00
crontab -e 了解一下
|
8
chengxiao 2018-06-12 14:34:54 +08:00
省事的话 crontab + curl
|
9
zhengxiaowai 2018-06-12 14:46:00 +08:00
推荐使用 crontab
celery beat 无法在运行时候添加定时任务,如果添加了,必须要重启。 |
10
linuxchild 2018-06-12 15:12:09 +08:00
再搞个接口,跑完调用一下,哈哈哈哈
|
11
yutian2211 2018-06-12 15:19:26 +08:00
简单需求建议:django-crontab
|
12
silhouette OP |
13
silhouette OP @linuxchild 再调一个接口。。那你在上一个接口延时这么久更不优雅对不对
|
14
silhouette OP |
15
JasperYanky 2018-06-12 16:01:34 +08:00
Huey 生产环境用了一年,轻量省心
|
16
myyou 2018-06-12 16:21:22 +08:00
推荐一下 dramatiq,可以做延迟任务,不过最多是一周的延迟任务
|
17
crb912 2018-06-12 18:45:21 +08:00 via Android
|
18
LinusTor 2018-06-12 19:49:50 +08:00
可以创建自定义命令,实现你自己的逻辑 然后使用 crontab 来定时执行.
|
19
zyqzyq08 2018-06-12 20:23:05 +08:00
django-celery-beat 可以用,后台可以设置
文档: http://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html#beat-custom-schedulers --scheduler 参数得加 |
20
picture2200 2018-06-12 20:46:00 +08:00 via Android
apscheduler
|
21
Jero 2018-06-12 21:09:23 +08:00
如果功能较为简单,推荐 apscheduler 定时访问 API。
如果比较多定时、异步任务,建议用 celery |
22
fen 2018-06-13 12:06:52 +08:00
django-crontab
|