【问题标题】:Django celery task run at once on startup of celery serverDjango celery 任务在 celery 服务器启动时立即运行
【发布时间】:2023-06-13 00:33:01
【问题描述】:

我需要找到如何指定一种初始 celery 任务,它将以特殊定义的方式启动所有其他任务。这个初始任务应该在 celery 服务器启动时立即运行,并且永远不会再次运行。

【问题讨论】:

    标签: python django celery django-celery


    【解决方案1】:

    我找到了这样做的方法。它有一个负面的方面 - 无法指定当前年份,并且任务将在一年之后再次运行。但通常服务器会更频繁地重启,然后是这段时间。

    from celery.task import PeriodicTask
    
    class InitialTasksStarter(PeriodicTask):
        starttime = datetime.now() + timedelta(minutes=1)
        run_every = crontab(month_of_year=starttime.month, day_of_month=starttime.day, hour=starttime.hour, minute=starttime.minute)
    
        def run(self, **kwargs):
            ....
            return True
    

    【讨论】:

      【解决方案2】:

      使用celeryd_after_setupceleryd_init 信号怎么样?

      以下文档中的示例代码:

      from celery.signals import celeryd_init
      
      @celeryd_init.connect(sender='worker12@example.com')
      def configure_worker12(conf=None, **kwargs):
          ...
      

      【讨论】:

      • 我可以看到您正在尝试更改工作人员的某些配置,但仍然不明白这将如何影响任务。 @falsetru 你能分享完整的代码,它可以显示与任务的关系吗?
      • @Abhimanyu,我想我已经提供了足够的代码。 ;) 发布一个单独的问题而不是评论如何让其他人可以回答你?
      • @falsetru 为什么会提到特定的工人?为什么没有任务启动代码?
      • @Velkan,它源自 celeryd_init 示例。请点击链接了解更多详情。
      • @falsetru 哦,每个工人都会调用它。有什么东西可以只运行一次任务就再也不会了吗?
      最近更新 更多