celery beat 调度如何运行期间动态添加任务?
我尝试过django-celery-beat,在admin后台添加任务,可以实现动态添加任务
但要重启celery beat才生效,请问,有其他方试吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我尝试过django-celery-beat,在admin后台添加任务,可以实现动态添加任务
但要重启celery beat才生效,请问,有其他方试吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
有个思路,你可以考虑,我目前也在尝试这个方法,处于摸石过河阶段。celery是支持定时任务,但是不符合我的需求,我需要像linux下的crontab这样动态添加定时任务,我也看了django-celery-beat,因为用的是Flask,发现不值得参考实现,所以一直在看文档搜资料,终于被我找到一种方式,celery的apply_async这个函数非常有用,它有个eta参数,它的简化使用是countdown,但是eta的威力是很巨大的,因为它只接受datetime对象,比如你给定一个任务在2017-05-02 20:0:0执行,你可以这样使用:
job.apply_async(args=args, kwarg=kwargs, eta=datetime(2017,5,2,20,0,0))
是不是很少用,假如我有一个任务需要每天晚上八点执行,我可以利用这个eta参数实现。伪代码如下:
这里有个非常重要的点是如何在任务执行成功的时候计算下一次的执行时间,做法如下
它提供了任务执行成功和失败的函数,我们只要在此基础上重写就可以了,我说的只是最核心的部分,具体怎么做有很多方法,
无法动态添加,必须重启 beat。
ask 回答过原因了 #3493
你可以参照这个redisbeat