是否有任何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"
答案 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'强> }'}},
...
这里的问题 - 它会很慢。