如何跟踪Redis中某个用户完成的Celery请求数量?

时间:2017-04-11 20:38:13

标签: python redis celery

我的想法是允许许多用户向一个实例发出大量的帖子请求。假设实例配置为一次处理一个实例,我使用Celery和Redis作为消息代理,以异步方式完成每个人的任务,但需要一些时间。

我的问题是如何查看或跟踪某个用户的任务完成了多少?例如,如果A人提出10个请求,我怎么知道所有A人的请求是否在10分钟后完成?

1 个答案:

答案 0 :(得分:1)

在您的http处理程序中获取或定义userid。将其作为参数传递给任务。使用redis存储统计信息。

class CallbackTask(Task):
    def on_success(self, retval, task_id, args, kwargs):
        db = redis.StrictRedis(host, port)
        db.incr("succeed.tasks.user{userid}".format(**kwargs)) 
        # note: explicitly pass kwargs when schedule the task 
        # regular_task.apply_async(kwargs=dict(userid=self.get_user))

    def on_failure(self, exc, task_id, args, **kwargs, einfo):
        db = redis.StrictRedis(host, port)
        db.incr("failed.tasks.user{userid}".format(kwargs))


@app.task(base=CallbackTask)
def regular_task(foo, bar, userid):
    # do things

在任何需要的地方获取统计数据:

def get_succeed_tasks(db, userid):
    return db.get("succeed.tasks.user{userid}".format(userid=userid))