CELERYBEAT_SCHEDULE在你的项目中去哪儿了?

时间:2015-03-03 14:37:02

标签: python celery celerybeat

我已经多次阅读了几页Google搜索结果,而且我对如何布置项目感到非常困惑。我设法让Celerybeat使用periodic_task装饰器工作,但那是depreciated and is being removed。据我所知,the docs表明CELERYBEAT_SCHEDULE是替代品。我已经完全按照所示创建了一个文件,但还没有想到:

  • 如何命名?
  • 在哪里放?

我发现很难找到在非Django 项目中使用Celery的正确方法。

1 个答案:

答案 0 :(得分:8)

the docs让你的CELERYBEAT_SCHEDULE看起来像是一个单独的文件,这有点令人困惑。实际上,它是您的应用程序(又名:Celery()实例)配置中的一个条目,您可以see it listed here。因此,无论您将配置添加到您的应用程序中,都可以使用它。

有很多方法可以让配置进入应用程序。如果你相信“Explicit is better than implicit”,那么你可能想:

  1. 将您的配置放入模块,例如celeryconfig.py
  2. 导入定义或使用应用程序的模块。 import celeryconfig
  3. 将模块对象应用于您的应用。 app.config_from_object(celeryconfig)
  4. 示例celeryconfig.py文件

    from datetime import timedelta
    
    BROKER_URL = "redis://redis.local:6379/0"
    BROKER_TRANSPORT_OPTIONS = {'fanout_prefix': True, 'fanout_patterns': True, 'visibility_timeout': 480}
    CELERY_RESULT_BACKEND = BROKER_URL
    
    CELERYBEAT_SCHEDULE = {
        'addrandom-to-16K-every-2-seconds': {
            'task': 'celery_test.tasks.addrandom', # notice that the complete name is needed
            'schedule': timedelta(seconds=2),
            'args': (16000, 42)
        },
    }
    
    CELERY_TIMEZONE = 'UTC'
    

    尝试将其放入beatschedule.py这样的文件中然后运行celery -A beatschedule beat会让你AttributeError: 'module' object has no attribute 'celery'

    我按照文档中的说明创建了this project来演示Celerybeat。我相信它比单独阅读文档更能展示它的运作方式。我还创建了this Docker image以使其尽可能简单地运行起来。