从芹菜调度程序检索已执行的任务?



我使用的是Python 3.6.6,最新版本的Redis,Celery,Celery Beat和Celery Redbeat。

我目前正在使用 Celery redbeat 来安排任务的定期执行。一切正常,但是我没有看到链接调度程序执行的任务的明显方法,因此我可以检索它们的结果。

例如,调度程序运行的任务在 redis 中显示为"celery-task-meta-(task-id("。在任务或调度程序中,我没有看到任何链接它们的内容。我知道我可以指定"选项"参数并提供参数字典来修改任务执行,但是没有什么突出的。我正在寻找一种方法,将"celery-task-meta"更改为与调度程序名称对应的值,或者将已完成的任务信息传播到调度程序的选项。我觉得我可能忽略了一些明显的东西,并希望提供意见。

在下面的输出中,我使用 python redis 库直接与 redis 代理交互:

>>> entry = RedBeatSchedulerEntry('nameoftask', 'tasks.test', interval, args=args, kwargs=kwargs, app=app, options={'dict of apply_async arguments'})
>>> r.hkeys('redbeat:nameoftask')
[b'meta', b'definition']
>>> r.hget('redbeat:nameoftask', 'meta')
b'{"last_run_at": {"__type__": "datetime", "year": 2018, "month": 10, "day": 2, "hour": 2, "minute": 9, "second": 42, "microsecond": 79758}, "total_run_count": 5}'
>>> r.hget('redbeat:nameoftask', 'definition')
b'{"name": "nameoftask", "task": "tasks.test", "args": [...], "kwargs": {...}, "schedule": {"__type__": "interval", "every": 360.0, "relative": false}, "enabled": true}'
>>> r.get('celery-task-meta-19ec44ba-3440-4f9f-9e0a-7fce2b59de13')
b'{"status": "SUCCESS", "result": {"current": 100, "total": 100, "status": "Task completed!", "result": {"task output": "result"}}, "traceback": null, "children": [], "task_id": "19ec44ba-3440-4f9f-9e0a-7fce2b59de13"}'

最后,我无法使用 redbeat 调度程序找到任何机制。我最终创建了一个 RedbeatEntryScheduler 的子类,当调用 due_next(( 时,它会检查是否存在与 RedbeatSchedulerEntry 对象名称相关的键,然后将生成的任务的 id 附加到该键/值对。

从Redis的角度来看,它看起来像这样:

>>> r.hget(b'redbeat:<task-name>-tasks', 'executed_tasks')
b'["d037db29-ef2c-4227-b7d3-6d19dc6ed68c", "ca4c509f-874f-4d87-80f1- 
dcaf3f5f2fa0", "89733f21-272e-485f-b6b9-55dbdfd07fca"]'

相关内容

  • 没有找到相关文章

最新更新