如何在没有 -A 选项的情况下 运行 celery status/flower?
How do I run celery status/flower without the -A option?
考虑这个 bash 会话:
$ export DJANGO_SETTINGS_MODULE=web.settings
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10
Error: No nodes replied within time constraint.
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app
celery@worker.9e2c39a1c42c: OK
为什么我需要 -A
选项?据我所知,芹菜应该能够检测到 redis 上的必要元数据。
类似地,如果我 运行 celery flower -b <redis url>
它表明它成功连接到 redis 但没有显示任何真实的 workers/tasks/queues 并显示几条消息,如 'stats' inspect method failed
。同样,添加 -A
会使其起作用。
我想 运行 在不包含我的任何代码或其依赖项的最小独立 Docker 容器中开花。 this one 等几个回购提供了这种东西。那我该怎么做呢?链接的 repo 提供了许多选项,但无法指定 -A
选项,这表明没有必要。
我是芹菜的初学者,所以我可能遗漏了一些愚蠢的东西。我该怎么办?
scaffold.tasks.celery_app
模块简单如下所示:
from celery import Celery
from django.conf import settings
app = Celery()
app.config_from_object(settings)
这些是涉及芹菜的 Django 设置:
{'BROKER_HEARTBEAT': 0,
'BROKER_TRANSPORT_OPTIONS': {'fanout_patterns': True,
'fanout_prefix': True,
'visibility_timeout': 172800},
'BROKER_URL': 'redis://redis.businessoptics.dev:6379/1',
'CELERYBEAT_SCHEDULE': {'journey-heartbeat': {'args': (),
'schedule': <crontab: * * * * * (m/h/d/dM/MY)>,
'task': 'kms.data.journey.tasks.heartbeat'}},
'CELERYD_CONCURRENCY': 1,
'CELERYD_HIJACK_ROOT_LOGGER': False,
'CELERYD_LOG_COLOR': False,
'CELERYD_MAX_TASKS_PER_CHILD': 1,
'CELERYD_PREFETCH_MULTIPLIER': 1,
'CELERY_ACCEPT_CONTENT': ['pickle'],
'CELERY_ACKS_LATE': True,
'CELERY_DEFAULT_EXCHANGE': 'default',
'CELERY_DEFAULT_EXCHANGE_TYPE': 'direct',
'CELERY_DEFAULT_QUEUE': 'default',
'CELERY_DEFAULT_ROUTING_KEY': 'default',
'CELERY_IGNORE_RESULT': False,
'CELERY_IMPORTS': ['kms.knowledge.query.tasks2',
# names of several more modules...
],
'CELERY_QUEUES': [<unbound Queue tablestore -> <unbound Exchange default(direct)> -> kms.data.table_store.tasks.#>,
# several more similar-looking Queues...
<unbound Queue default -> <unbound Exchange default(direct)> -> default>],
'CELERY_REDIRECT_STDOUTS': False,
'CELERY_RESULT_BACKEND': 'database',
'CELERY_RESULT_DBURI': 'mysql://businessoptics:businessoptics@mysql.businessoptics.dev:3306/product',
'CELERY_RESULT_DB_SHORT_LIVED_SESSIONS': True,
'CELERY_ROUTES': ['scaffold.tasks.routers.TaskNameRouter'],
'CELERY_SEND_EVENTS': True,
'CELERY_SEND_TASK_ERROR_EMAILS': False,
'CELERY_SEND_TASK_SENT_EVENT': True,
'CELERY_STORE_ERRORS_EVEN_IF_IGNORED': True,
'CELERY_TASKNAME_ROUTES': [('tablestore', 'kms.data.table_store.tasks.#'),
# bunch of routes...
],
'CELERY_TASK_RESULT_EXPIRES': None,
'CELERY_TIMEZONE': 'UTC',
'CELERY_TRACK_STARTED': True,
'CELERY_WORKER_DIRECT': True
}
以下是相关版本:
celery==3.1.19
Django==1.8
django-celery==3.1.0
redis==2.10.3
-A 选项是传递带有相关配置的 celery 实例的选项,包括包含您的任务的包。
要使用花的所有功能,需要像工作人员一样配置,这意味着了解芹菜任务所在的包并了解它们。
将所需的 python 库添加到您的 docker 容器应该不难,例如您可以将配置行 CELERY_IMPORTS 添加到 this file以下方式:
CELERY_IMPORTS = os.getenv('CELERY_IMPORTS ', 'default.package')
更新
正如 @asksol,celery 的创造者,在评论中指出这里有一个更详细的解释为什么你需要 -A 选项:
Flower is also a message consumer and so will help recover unacked messages. Since you have a custom visibility defined, starting flower unconfigured means it will use the default visibility timeout and thus will redeliver unacked messages faster than your workers. Always use -A so that worker, flower and client configuration is in sync
考虑这个 bash 会话:
$ export DJANGO_SETTINGS_MODULE=web.settings
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10
Error: No nodes replied within time constraint.
$ celery status -b redis://redis.businessoptics.dev:6379/1 -t 10 -A scaffold.tasks.celery_app
celery@worker.9e2c39a1c42c: OK
为什么我需要 -A
选项?据我所知,芹菜应该能够检测到 redis 上的必要元数据。
类似地,如果我 运行 celery flower -b <redis url>
它表明它成功连接到 redis 但没有显示任何真实的 workers/tasks/queues 并显示几条消息,如 'stats' inspect method failed
。同样,添加 -A
会使其起作用。
我想 运行 在不包含我的任何代码或其依赖项的最小独立 Docker 容器中开花。 this one 等几个回购提供了这种东西。那我该怎么做呢?链接的 repo 提供了许多选项,但无法指定 -A
选项,这表明没有必要。
我是芹菜的初学者,所以我可能遗漏了一些愚蠢的东西。我该怎么办?
scaffold.tasks.celery_app
模块简单如下所示:
from celery import Celery
from django.conf import settings
app = Celery()
app.config_from_object(settings)
这些是涉及芹菜的 Django 设置:
{'BROKER_HEARTBEAT': 0,
'BROKER_TRANSPORT_OPTIONS': {'fanout_patterns': True,
'fanout_prefix': True,
'visibility_timeout': 172800},
'BROKER_URL': 'redis://redis.businessoptics.dev:6379/1',
'CELERYBEAT_SCHEDULE': {'journey-heartbeat': {'args': (),
'schedule': <crontab: * * * * * (m/h/d/dM/MY)>,
'task': 'kms.data.journey.tasks.heartbeat'}},
'CELERYD_CONCURRENCY': 1,
'CELERYD_HIJACK_ROOT_LOGGER': False,
'CELERYD_LOG_COLOR': False,
'CELERYD_MAX_TASKS_PER_CHILD': 1,
'CELERYD_PREFETCH_MULTIPLIER': 1,
'CELERY_ACCEPT_CONTENT': ['pickle'],
'CELERY_ACKS_LATE': True,
'CELERY_DEFAULT_EXCHANGE': 'default',
'CELERY_DEFAULT_EXCHANGE_TYPE': 'direct',
'CELERY_DEFAULT_QUEUE': 'default',
'CELERY_DEFAULT_ROUTING_KEY': 'default',
'CELERY_IGNORE_RESULT': False,
'CELERY_IMPORTS': ['kms.knowledge.query.tasks2',
# names of several more modules...
],
'CELERY_QUEUES': [<unbound Queue tablestore -> <unbound Exchange default(direct)> -> kms.data.table_store.tasks.#>,
# several more similar-looking Queues...
<unbound Queue default -> <unbound Exchange default(direct)> -> default>],
'CELERY_REDIRECT_STDOUTS': False,
'CELERY_RESULT_BACKEND': 'database',
'CELERY_RESULT_DBURI': 'mysql://businessoptics:businessoptics@mysql.businessoptics.dev:3306/product',
'CELERY_RESULT_DB_SHORT_LIVED_SESSIONS': True,
'CELERY_ROUTES': ['scaffold.tasks.routers.TaskNameRouter'],
'CELERY_SEND_EVENTS': True,
'CELERY_SEND_TASK_ERROR_EMAILS': False,
'CELERY_SEND_TASK_SENT_EVENT': True,
'CELERY_STORE_ERRORS_EVEN_IF_IGNORED': True,
'CELERY_TASKNAME_ROUTES': [('tablestore', 'kms.data.table_store.tasks.#'),
# bunch of routes...
],
'CELERY_TASK_RESULT_EXPIRES': None,
'CELERY_TIMEZONE': 'UTC',
'CELERY_TRACK_STARTED': True,
'CELERY_WORKER_DIRECT': True
}
以下是相关版本:
celery==3.1.19
Django==1.8
django-celery==3.1.0
redis==2.10.3
-A 选项是传递带有相关配置的 celery 实例的选项,包括包含您的任务的包。
要使用花的所有功能,需要像工作人员一样配置,这意味着了解芹菜任务所在的包并了解它们。
将所需的 python 库添加到您的 docker 容器应该不难,例如您可以将配置行 CELERY_IMPORTS 添加到 this file以下方式:
CELERY_IMPORTS = os.getenv('CELERY_IMPORTS ', 'default.package')
更新
正如 @asksol,celery 的创造者,在评论中指出这里有一个更详细的解释为什么你需要 -A 选项:
Flower is also a message consumer and so will help recover unacked messages. Since you have a custom visibility defined, starting flower unconfigured means it will use the default visibility timeout and thus will redeliver unacked messages faster than your workers. Always use -A so that worker, flower and client configuration is in sync