gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:17:40 26 4
gpt4 key购买 nike

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

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

最佳答案

在您的 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))

关于python - 如何跟踪 Redis 中某个用户完成的 Celery 请求数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com