2015-11-24 3 views
9

в сельдерее документации, есть example инспектирующих выполняющихся задач:Как получить отложенные и выполняемые задачи Celery с их аргументами?

Вы можете получить список активных задач с использованием активных():

>>> i.active() 
[{'worker1.example.com': 
    [{'name': 'tasks.sleeptask', 
     'id': '32666e9b-809c-41fa-8e93-5ae0c80afbbf', 
     'args': '(8,)', 
     'kwargs': '{}'}]}] 

Но этот вызов возвращает только представления аргументы, полученные repr(). Есть ли способ получить аргументы сериализованных задач?

+1

'eval()' на значение 'args' вернет кортеж – economy

ответ

5

Насколько вы готовы взломать код Сердечника? Представление возвращается через .active() в конечном итоге приходит через этот код: https://github.com/celery/celery/blob/b1deab39aad2fdec95f48b9f6e19ca1967285544/celery/utils/saferepr.py#L68

И устанавливается по запросу здесь: https://github.com/celery/celery/blob/master/celery/worker/request.py#L120

Вы можете изменить эти функции, чтобы вернуть то, что представление объектов вы желаемого ... из Конечно, это может сломать что-то другое.

Кроме того, @economy имеет хороший комментарий о возможном пересмотре постановления. Все зависит от вашей основной цели.

+0

Я собираюсь изучить это, спасибо за указатель. – economy

7

ОК, я собираюсь отказаться от этого в качестве ответа. Надеюсь, это касается вашей озабоченности.

Сельдерей предлагает строку для арсов. Чтобы справиться с этим, и получить список:

args = '(5,6,7,8)' # from celery status 

as_list = list(eval(args)) 

Конечно, eval() это немного опасно, так что вы можете использовать буквальный Eval:

import ast 

args = '(5,6,7,8)' # from celery status 

as_list = list(ast.literal_eval(args)) 

Вот как я ручка разбора Сельдерей арг в моем рабочие процессы. Это какая-то боль.