运行和监控 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_helpers 在 CELERY_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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ffd3504d354d4ebefa30631f0c72c17f620ba51c4d6c6ba42be52a229650b5e |
|
MD5 | f8a935c6649486bd0d29a4f7d767f701 |
|
BLAKE2b-256 | 016b9f412c2a8f978332b66318df1986194ef29ae7dbf08233b94919a586e849 |