
现在有一个这样的需求:用户调用接口 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 如果异步和定时任务比较多建议上 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 |