如何使用芹菜检索所有挂起和活动的任务

时间:2017-05-20 18:42:59

标签: python celery

我正在尝试从Celery检索所有当前的pendingactive任务。

activescheduledreserved很容易获得:

i = celery_app.control.inspect()
tasks=list()
for k in i.active():
    tasks += i.active()[k]
for k in i.reserved():
    tasks += i.reserved()[k]
for k in i.scheduled():
    tasks += i.scheduled()[k]

但是,这不包括尚未scheduledreserved的任务。以下代码检索这些任务,但显然只适用于Redis,假定JSON序列化,并且由于各种原因它并不理想。

r = redis.StrictRedis(
        host='localhost',
        port='6379',
    )
tasks = [json.loads(pending_task)['headers'] for pending_task in r.lrange('celery', 0, -1)]

有没有办法以类似于pending的形式检索这些inspect.active()任务,并且可以轻松访问argskwargsid(最好通过Celery,所以我不需要指定Celery后端和序列化等)?

编辑(对冲我的赌注)

据我所知,这并不简单,芹菜中没有i.pending()。所以,我有几个子问题可以让我自己写这个。

  1. 如何获取活跃的芹菜队列表? (以上仅假设默认队列)也许类似于queues = [q['exchange']['name'] for host in i.active_queues().values() for q in host])
  2. 如何通常在这些队列中获取消息?这将是上面r.lrange('celery', 0, -1)的通用版本。
  3. 如何通常解码/反序列化邮件?这将是json.loads(...) above 的通用版本 celery_app.backend.decode
  4. 使用该信息,从消息标题中提取必要的信息应该很简单。

0 个答案:

没有答案