1

我正在使用 celery 最新的稳定版本 4.4.7。最近想使用celery.app.control包(https://docs.celeryproject.org/en/stable/reference/celery.app.control.html)。

根据 API,我尝试了以下代码,但这不起作用。我发现另一个包celery.task.control确实有效,但似乎它将在 5.0.0 中被删除。所以我想用celery.app.control. 任何人都知道它们之间的区别以及如何以celery.app.control正确的方式使用?谢谢。

我已经浏览了 celery 文档指南并在谷歌中搜索但没有找到答案。顺便说一句,我会抱怨 celery 文档很糟糕,它包含很多不一致和错误。:)

有用吗

>>> from celery.task.control import inspect
>>> i = inspect()
>>> i.registered()
{'celery@centos72_base': ['core.tasks.task1', 'core.tasks.task2']}

>>> i.active()
{'celery@centos72_base': []}

不行

>>> from celery.app.control import Inspect 
>>> i = Inspect(app='test')
>>> i.active()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/root/.virtualenvs/test/lib/python3.6/site-packages/celery/app/control.py", line 119, in active
    return self._request('active')
  File "/root/.virtualenvs/test/lib/python3.6/site-packages/celery/app/control.py", line 98, in _request
    return self._prepare(self.app.control.broadcast(
AttributeError: 'str' object has no attribute 'control'
4

1 回答 1

2

这是我在各种监控脚本中所做的简化版本:

app = Celery("myapp", include=["myproject.tasks", "myproject.other.tasks"])
app.config_from_object(myproject.celeryconfig)

insp = app.control.inspect()
active_lst = insp.active()
for key in active_lst.keys():
    print(key)

在不使用 Celery 实例的情况下,我什至从未尝试过检查/监控 API ......

于 2020-09-21T15:06:25.150 回答