【问题标题】:Celery: launch task on start芹菜:启动时启动任务
【发布时间】:2013-01-12 19:10:59
【问题描述】:

我有一个任务需要在 Celery 启动时启动。该任务接下来通过回调 / eta 每 5 分钟运行一次。

我找到了一些关于它的线程,但似乎没有在 Celery 3 上工作。

感谢您的帮助, 阿诺。

【问题讨论】:

    标签: python django celery crontab


    【解决方案1】:

    Celery 的 IRC 频道上的某个人通过使用“worker_ready.connect”信号为我提供了正确的方法:http://docs.celeryproject.org/en/latest/userguide/signals.html#worker-ready

    from celery.signals import worker_ready
    
    @worker_ready.connect
    def at_start(sender, **k):
        with sender.app.connection() as conn:
             sender.app.send_task('app.modules.task', args,connection=conn, ...)
    

    它现在就像一个魅力!

    【讨论】:

      【解决方案2】:

      你需要在设置中定义:

      import djcelery
      djcelery.setup_loader()
      CELERY_IMPORTS = ("apps.app_name.module.tasks",)
      

      此外,如果您没有安装 celery 代理,您应该安装一个我正在使用 RabbitMQ,关于如何使用它的非常好的教程,您可以在 celery 文档中找到:

      http://docs.celeryproject.org/en/latest/getting-started/brokers/rabbitmq.html

      然后从命令行 celery demo 开始:

      django-admin.py celeryd -v 2 -B -s celery -E -l INFO

      【讨论】:

      • 您好,感谢您的回答,但我认为这不是我想要的。 CELERY_IMPORTS 设置允许您定义要导入的自定义模块(如果您没有将任务放在 tasks.py 中)。我正在寻找的是一种在守护进程启动时自动启动特定任务的方法。接下来,回调/ETA 系统将完成剩下的工作。感谢您的帮助。
      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 2020-04-25
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 2020-02-01
      • 2016-06-22
      相关资源
      最近更新 更多