在芹菜中使用 celery.app.control 的正确方法
Right way to use celery.app.control in celery
我正在使用 celery 最新稳定版 4.4.7。最近想使用 celery.app.control
包 (https://docs.celeryproject.org/en/stable/reference/celery.app.control.html).
根据 API,我尝试了以下代码,但这没有用。我发现另一个包 celery.task.control
确实有效,但似乎将在 5.0 中删除。所以我想使用 celery.app.control
。有人知道它们之间的区别以及如何以正确的方式使用 celery.app.control
吗?谢谢。
我已经阅读了 celery 文档指南并在 google 中进行了搜索,但没有找到答案。顺便说一句,我会抱怨芹菜文档不好,它包含很多不一致和错误。 :)
有效
>>> 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'
这是我在各种监控脚本中所做的简化版本:
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)
我什至从未尝试过 inspect/monitoring API 不使用 Celery 实例...
我正在使用 celery 最新稳定版 4.4.7。最近想使用 celery.app.control
包 (https://docs.celeryproject.org/en/stable/reference/celery.app.control.html).
根据 API,我尝试了以下代码,但这没有用。我发现另一个包 celery.task.control
确实有效,但似乎将在 5.0 中删除。所以我想使用 celery.app.control
。有人知道它们之间的区别以及如何以正确的方式使用 celery.app.control
吗?谢谢。
我已经阅读了 celery 文档指南并在 google 中进行了搜索,但没有找到答案。顺便说一句,我会抱怨芹菜文档不好,它包含很多不一致和错误。 :)
有效
>>> 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'
这是我在各种监控脚本中所做的简化版本:
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)
我什至从未尝试过 inspect/monitoring API 不使用 Celery 实例...