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 单独集成

是我的正确配置

posted @ 2023-03-14 14:28  vx_guanchaoguo0  阅读(199)  评论(0编辑  收藏  举报