Я использую Python 3.6.6 с последними версиями Redis, Celery, Celery Beat и Celery Redbeat.
В настоящее время я использую Celery Redbeat для планирования периодического выполнения задач.Все работает правильно, однако я не вижу очевидного способа связать задачи, которые выполняет планировщик, поэтому я могу получить их результаты.
Например, задача, запускаемая планировщиком, отображается в redis как 'celery-task-meta- (задача-идентификатор).Внутри задачи или планировщика я не вижу ничего связывающего их.Я знаю, что могу указать аргумент 'options' и указать набор аргументов для изменения выполнения задачи, однако ничто не выделяется.Я ищу способ изменить 'celery-task-meta' на значение, которое соответствует имени планировщика, или параметр, который будет передавать информацию о выполненной задаче планировщику.Я чувствую, что могу упустить что-то очевидное и был бы признателен за ввод.
В приведенном ниже выводе я напрямую взаимодействую с брокером Redis с помощью библиотеки Python 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"}'