celery 动态任务 django-clery-beat 原理解析
生产者
- celery-beat 直接只负责读取任务信息 投递到队列 使用kombu的amqp 协议
消费者
- celery-worker 生产者只负责 从队列消费任务
配置者
-
可以是配置文件
-
数据库 datasourceschulder
- db table: django_celery_beat_periodictasks
- python: self. start -> self.scheduler.tick() -> self.maybe_due -> self.apply_async
-
datasourceschulder 可以使用model 的信号机制直接修改数据
task = IntervalSchedule()
task.id = id
task.every = every
task.period = IntervalSchedule.SECONDS
task.save()
动态人物 直接修改数据
- 或者数据库 同时修改 关键 periodictasks表的 的 last_update字段
- django_celery_beat_intervalschedule 任务间隔
- django_celery_beat_periodictasks 任务数据源变化时间
任务的参数传递
- 保存任务的时候可以直接 args/kargs
- args 数组形式 ["a","b"]
- kargs 是字典形式的
- 保存人物时候直接指定参数 或者修改数据库
tips 在集成现有框架中发现了 celery beat 不打印日志
- 直接在 celery.beat.Scheduler.apply_entry 下面 复制一行
- print('Scheduler1111: Sending due task %s (%s)', entry.name, entry.task)
print(entry.args)
tips celery 版本要求的很不匹配
- 错误一: kombu 3.8 关键词和3.8 aysnc 冲突
- 错误二: celery 单独集成
是我的正确配置
- pytghon 3.8 + django3.2 + django-celery-beat2.2.1
- 仓库地址 : https://gitee.com/guanchaoguo/django-celery-beat-example.git
- 参考仓库 : https://gitee.com/aqu415/djangotask.git
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/17207566.html