celerybeat - multiple instances & monitoring

前端 未结 3 1855
长情又很酷
长情又很酷 2021-02-05 21:15

I\'m having application built using celery and recently we got a requirement to run certain tasks on schedule.

I think celerybeat is perfect for this, but I got few ques

相关标签:
3条回答
  • 2021-02-05 21:34

    I just found this solution as celery-beat replacement: RedBeat, blog post

    Didn't use it yet though.

    0 讨论(0)
  • 2021-02-05 21:37

    To answer your 2 questions:

    1. If you run several celerybeat instances you get duplicated tasks, so afaik you should have only single celerybeat instance.

    2. I'm using supervisord as you mentioned to run celery workers and celerybeat workers as deamon so they should always be up & running.

    my supervisord config:

    [program:my_regular_worker]
    command=python2.7 /home/ubuntu/workspace/src/manage.py celery worker -Q my_regular_worker-queue_name -c 1 -l info --without-mingle
    process_name=my_regular_worker
    directory=/home/ubuntu/workspace/src
    autostart=true
    autorestart=true
    user=ubuntu
    stdout_logfile=/tmp/my_regular_worker.log
    redirect_stderr=true
    
    
    
    [program:my_celerybeat_worker]
    command=python2.7 /home/ubuntu/workspace/src/manage.py celery worker -Q my_celerybeat_worker-queue_name -c 1 -l info --without-mingle -B -s /tmp/celerybeat-schedule
    
    0 讨论(0)
  • 2021-02-05 21:46

    You may run multiple instances of celery beat and tasks will not be duplicated.

    Take a look at the celery.beat.Scheduler class, specifically the reserve() function. The scheduler will reserve a task before submitting it to the grid for execution. This prevents another instance of celery beat from submitting the same task.

    We use MongoDB as a backing store for our scheduled tasks. Here is a sample document showing that the task has been reserved by one of the schedulers.

    {
      "startdate": "2015-07-06 00:00:00", 
      "task": "cobalt.grid.tasks_facts.task_add", 
      "enddate": "2018-01-01 00:00:00", 
      "args": "[13.0, 42.0]", 
      "enabled": "True", 
      "last_run_at": "2015-08-13 15:04:49.058000", 
      "interval": "{u'every': u'1', u'period': u'minutes'}", 
      "relative": "False", 
      "total_run_count": "12", 
      "kwargs": "{}", 
      "reserved": "compute2:25703", 
      "_id": "ObjectId(55ccaf7784a3e752e73b08c2)", 
      "options": "{}"
    }
    

    http://celery.readthedocs.org/en/latest/reference/celery.beat.html#celery.beat.Scheduler

    0 讨论(0)
提交回复
热议问题