芹菜多实例监控

2024-04-30 06:00:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用芹菜构建应用程序,最近我们需要按计划运行某些任务。

我觉得芹菜拍很适合这个,但我有几个问题:

  1. 是否可以运行多个cellerybeat实例,以避免任务重复?
  2. 如何确保celerybeat始终处于正常运行状态?

到目前为止我读到: https://github.com/celery/celery/issues/251https://github.com/ybrs/single-beat

看起来应该有一个芹菜节拍的例子在运行。

我在AWS elasticbeanstalk docker容器中运行应用程序,芹菜工人也是docker容器(因此在需要时可以快速扩展)。

最好让芹菜工和芹菜工一起通过监督,但这样做似乎不合适。

同时,要获得芹菜节拍的单一实例,需要手动提供/启动和监控。


Tags: 实例dockerhttpsgithubcom应用程序状态容器
3条回答

回答你的两个问题:

  1. 如果你运行几个cellerybeat实例,你会得到重复的任务,所以afaik你应该只有一个cellerybeat实例。

  2. 我在用supervisord就像你提到的那样,把芹菜工人和芹菜工人当作执事来管理,所以他们应该一直在运作。

我的主管配置:

[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

您可以运行多个芹菜节拍实例,任务将不会重复。

看看芹菜.beat.Scheduler类,特别是reserve()函数。调度程序将保留一个任务,然后将其提交给网格执行。这将防止芹菜殴打的另一个实例提交相同的任务。

我们使用MongoDB作为计划任务的后备存储。下面是一个示例文档,显示任务已由一个调度程序保留。

{
  "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

我刚找到了芹菜替代品:RedBeat, 博客post

不过还没用呢。

相关问题 更多 >