首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行多个后台进程的Celeryd

运行多个后台进程的Celeryd
EN

Stack Overflow用户
提问于 2012-10-23 23:50:56
回答 1查看 783关注 0票数 1

我正在尝试使用带有RabbitMQ后端的Celery在Fedora上运行异步后台任务,我发现它非常不可靠。最大的问题是它偶尔会多次运行相同的任务,而我在诊断原因时遇到了麻烦。

我不认为我的代码会多次触发任务,因为我已经通过手动启动任务(创建数据库记录)一次进行了测试,并看到创建了两个相同的记录。如果我从Django shell运行代码,只会创建一条记录,所以问题看起来肯定是芹菜。

我有3台服务器,每台都在运行celeryd,只有第一台服务器在运行rabbitmq,所有3台服务器都共享同一个数据库。我的第一个发现是,我的celery设置中存在一个问题,导致每个服务器上的celeryd检索并执行相同的任务。但是,celery文档中似乎没有区分单主机和多主机设置,所以假设我已经在settings.py中为每个服务器指定了正确的BROKER_ host /PORT/USER/PASSWORD/VHOST,那么它应该“只适用于”多个主机。这是正确的吗?

我的另一个想法是,我可能以某种方式运行了多个celeryd实例,尽管我不确定如何检查这一点。有两台服务器正在运行Fedora13,当我运行ps aux | grep .*.py时,我得到:

代码语言:javascript
复制
root     24806  0.1  1.8  51404 31328 ?        Sl   Oct19   9:25 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler
root     24900  0.1  1.6  51404 28592 ?        S    Oct19   6:02 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler
root     24901  0.3  9.4 183232 161948 ?       S    Oct19  22:32 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler

这是否表示3个单独的celeryd实例正在运行?如果是这样,这是一个错误吗?我应该杀掉他们中的两个吗?

我的第三台服务器运行的是Fedora 17,它有一个不同的服务框架。当我运行systemctl status celeryd.service时,我得到:

代码语言:javascript
复制
celeryd.service - LSB: celery task worker daemon
      Loaded: loaded (/etc/rc.d/init.d/celeryd)
      Active: active (exited) since Fri, 19 Oct 2012 10:59:38 -0400; 4 days ago
     Process: 732 ExecStop=/etc/rc.d/init.d/celeryd stop (code=exited, status=0/SUCCESS)
     Process: 738 ExecStart=/etc/rc.d/init.d/celeryd start (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/celeryd.service

我不确定该如何解释这个问题。"Active“通常表示它正在运行,但"exited”通常表示它没有运行。当我运行ps aux | grep .*celery.*时,我只得到:

代码语言:javascript
复制
root     25142  0.0  0.0 109400   932 pts/0    S+   11:28   0:00 grep --color=auto .*celery.*

那么,这是否意味着celeryd没有运行,或者我应该寻找其他东西?

编辑:根据this答案,我认为这3个过程可能是默认的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-24 00:16:31

我在评论中发表了,但我相信这是你的问题,请看这里:

代码语言:javascript
复制
root     24806  0.1  1.8  51404 31328 ?        Sl   Oct19   9:25 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler
root     24900  0.1  1.6  51404 28592 ?        S    Oct19   6:02 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler
root     24901  0.3  9.4 183232 161948 ?       S    Oct19  22:32 ../../.env/bin/python manage.py celeryd -f /var/log/myapp/celeryd.log -l WARNING --pidfile /var/run/celeryd.pid -B --scheduler djcelery.schedulers.DatabaseScheduler

你带着节拍跑了三次。所以,你发送了三次节拍信息。

您应该只使用beat打开一个实例,或者(最好)单独运行celerybeat并从celeryd实例中删除-B

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13034419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档