跳转到主要内容

运行和监控 celery 任务

项目描述

摘要

运行、监控和记录 celery 任务。

安装和设置

使用 celery task 或 cubicweb-celery cwtasks 声明任务。

在工作端,安装 cw-celerytask-helpers

celeryconfig.py 示例

CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = BROKER_URL
CUBICWEB_CELERYTASK_REDIS_URL = CELERY_BROKER_URL
CELERY_IMPORTS = ('cw_celerytask_helpers.helpers', 'module.containing.tasks')

在此配置示例中,cw_celerytask_helpersCELERY_IMPORTS 中是必需的,以便将日志数据(在任务中)通过 Redis 返回到 CubicWeb 实例。 CUBICWEB_CELERYTASK_REDIS_URL 是用于此日志处理机制的 Redis 端点。

启动一个工作进程

# running cubicweb tasks (celeryconfig.py will be imported from your instance config directory)
celery -A cubicweb_celery -i <CW_INSTANCE_NAME> worker -l info

# running pure celery tasks
celery worker -l info

任务状态同步需要运行 celery-monitor 命令

cubicweb-ctl celery-monitor <instance-name>

确保加载了 celeryconfig.py,无论是 CubicWeb 实例还是 celery 工作进程,通过设置 CELERY_CONFIG_MODULE 环境变量强制执行(它必须是一个可导入的 Python 模块)。

运行任务

创建一个任务

from celery import current_app as app
from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)

@app.task(name='hi_there')
def my_task(arg, kw=0):
    logger.info('HI %s %s!', arg, kw)
    return 42

运行一个任务

from cubicweb_celerytask.entities import start_async_task

cwtask = start_async_task(cnx, 'hi_there', 'THERE', kw=42)
cnx.commit()

start_async_task() 接受任务名称、任务对象或任务签名: http://docs.celeryproject.org/en/latest/userguide/canvas.html#signatures

例如,要在一个名为 myqueue 的专用队列中启动上述任务

import celery

start_async_task(cnx, celery.signature('hi_there', args=('THERE',),
                                       kwargs={'kw': 42}, queue='myqueue'))

测试基于任务的程序

在 CubicWeb 测试模式下,任务不会自动运行,使用 cubicweb_celerytask.entities.get_tasks() 来检查它们,并使用 cubicweb_celerytask.entities.run_all_tasks() 来运行它们。

此外,CELERY_ALWAYS_EAGER 和 CELERY_EAGER_PROPAGATES_EXCEPTIONS 默认设置为 True。

项目详细信息


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

cubicweb-celerytask-2.0.1.tar.gz (21.3 kB 查看哈希值)

上传时间

由以下支持