代码之家  ›  专栏  ›  技术社区  ›  TechSavy

芹菜连接到rabbitmq服务器而不是redis服务器

  •  0
  • TechSavy  · 技术社区  · 6 年前

    我有一个django应用程序,我想将其配置为celery以运行后台任务。

    包装:

    1. 芹菜=4.2.1

    2. Django==2.1.3

    3. Python=3.5

    4. Redis服务器==3.0.6

    芹菜配置 设置Py 文件是:

    CELERY_BROKER_URL = 'redis://localhost:6379'
    
    CELERY_RESULT_BACKEND = 'redis://localhost:6379'
    CELERY_ACCEPT_CONTENT = ['application/json']
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_TASK_SERIALIZER = 'json'
    CELERY_TIMEZONE = 'Asia/Kolkata'
    CELERY_BEAT_SCHEDULE = {
        'task-number-one': {
                'task': 'app.tasks.task_number_one',
                'schedule': crontab(minute='*/1'),
        },
    }
    

    芹菜.py 文件:

    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    from django.conf import settings
    # set the default Django settings module for the 'celery' program.
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings.prod')
    
    app = Celery('project')
    
    # Using a string here means the worker don't have to serialize
    # the configuration object to child processes.
    # - namespace='CELERY' means all celery-related configuration keys
    #   should have a `CELERY_` prefix.
    app.config_from_object('django.conf:settings')
    
    # Load task modules from all registered Django app configs.
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
    
    @app.task(bind=True)
    def debug_task(self):
        print('Request: {0!r}'.format(self.request))
    

    当我跑步的时候: celery -A project worker -l info -B -E

    它指向rabmmitmq服务器,而应该指向redis服务器,如下所示:

     -------------- celery@user-desktop v4.2.1 (windowlicker)
    ---- **** ----- 
    --- * ***  * -- Linux-4.15.0-39-generic-x86_64-with-Ubuntu-18.04-bionic 2018-11-21 12:04:51
    -- * - **** --- 
    - ** ---------- [config]
    - ** ---------- .> app:         project:0x7f8b80f78d30
    - ** ---------- .> transport:   amqp://guest:**@localhost:5672//
    - ** ---------- .> results:     redis://localhost:6379/
    - *** --- * --- .> concurrency: 4 (prefork)
    -- ******* ---- .> task events: ON
    --- ***** ----- 
     -------------- [queues]
                    .> celery           exchange=celery(direct) key=celery
    
    
    [tasks]
      . app.tasks.task_number_one
      . project.celery.debug_task
    
    [2018-11-21 12:04:51,741: INFO/Beat] beat: Starting...
    

    同样的情况也发生在生产环境中。 在产品中,我已经使用gunicorn和nginx部署了django应用程序,现在我想实现一些方法来运行后台任务,如 django-crontab 程序包不工作。

    问题:

    1. 芹菜配置有什么问题?

    2. 有人能推荐一种运行定期后台任务的方法吗?

    **注意:我尝试过实现supervisor,但supervisor似乎与python3不兼容,因此无法对其进行配置。

    2 回复  |  直到 6 年前
        1
  •  1
  •   2ps    6 年前

    的设置 broker url changed in v4 . 应该是 BROKER_URL 而不是 CELERY_BROKER_URL .

        2
  •  0
  •   Dinesh Mandepudi    6 年前

    为了让Celery与Redis一起工作,您必须安装额外的依赖项。

    pip install -U "celery[redis]"
    

    请通过 celery documentation .