django celery task_id可以输出但是根据task_id在数据库无法查询到数据的问题

  • Post author:
  • Post category:其他


自己用django + celery做一个渗透测试框架

其中想做一个,用户下达任务后,会把用户的id和任务的id写入到数据库中。

这样用户可以查看到自己曾经的任务记录

问题代码如下:

 # 把执行的命令发送给任务队列,并获取任务的task_id
 task_id = asyTask.delay(request.user.username, command)
 print(task_id )
 # 把用户与任务信息绑定写入user_usertask
 u = UserTask()
 # 当前用户的ID
 u.userTask_user = User.objects.get(username=request.user)
 # 当前任务的ID
 u.userTask_task = celecy_models.TaskResult.objects.get(task_id=task_id)
 # 任务开始的时间
 u.date_start = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
 u.save()

执行时总是会报

django_celery_results.models.TaskResult.DoesNotExist: TaskResult matching query does not exist.

在这里插入图片描述

很奇怪,明明输出任务的task_id时都可以正常输出,但是一旦用这个去数据库进行查询就说无法匹配到数据

如果手动写入又可以正常找到

 u.userTask_task = celecy_models.TaskResult.objects.get(task_id='8c18cbcd-a0e5-43f8-8d50-674028bd15c9')

很奇怪

后来发现加一句task_id.get()即可

# 把执行的命令发送给任务队列,并获取任务的task_id
task_id = asyTask.delay(request.user.username, command)
# 把用户与任务信息绑定写入user_usertask
u = UserTask()
# 当前用户的ID
u.userTask_user = User.objects.get(username=request.user)
# 当前任务的ID
# 获取任务返回值
task_id.get()
u.userTask_task = celecy_models.TaskResult.objects.get(task_id=task_id)
# 任务开始的时间
u.date_start = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
u.save()



版权声明:本文为nzjdsds原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。