django获取当前django用户

时间:2016-04-22 04:23:39

标签: celery django-celery

是否有任何pythonic方法可以为当前登录的django用户获取所有正在运行/待处理的芹菜任务?我正在尝试的伪代码:

    @celery.task
    def process_task(user, task_to_do):
        #get all running or pending(queued) task for current user
        user_tasks = user.get_task(status=PENDING or status=STARTED)
        if not user_task:
            #allow user to schedule additional task
            process....
        else:
            return "Your previous tasks is already running"

1 个答案:

答案 0 :(得分:1)

这通常是一项棘手的任务。

  

首先,您需要实施inspecting of workers

inspector = app.control.inspect()
scheduled = inspector.scheduled()
reserved = inspector.reserved()
active = inspector.active()

芹菜会从你的经纪人那里得到它们。关键是 - 经纪人不存储有关用户的信息,因此您需要将user添加到任务 kwargs

user_task.delay(user=user)

您可以在结果中通过kwarg user过滤来自thees函数的结果: [{'worker1.example.com': [{'eta': '2010-06-07 09:07:52', 'priority': 0, 'request': { 'name': 'tasks.usertask', 'id': '1a7980ea-8b19-413e-91d2-0b74f3844c4d', 'args': '[]', 'kwargs': '{ '用户': '7' }'}}, ...

  

这里的问题 - 它会很慢。