我正在尝试使用一个任务更新django模型
django-background-tasks
. 以下是我得到的:
@background(schedule=0)
def difficult_work():
for i in range(0,100):
time.sleep(1)
with transaction.atomic():
workProgress = WorkProgress.objects.filter(id="fixed_work_id_for_testing").select_for_update().get()
print("updating work progress to " + str(i))
workProgress.progress = i
workProgress.currentJobInfo = "test work"
# if we've finished then make sure to set the status
if i == 100:
workProgress.status = "success"
transfer.save(force_update=True)
此外,我有一个API视图来获取工作任务的进度。
class WorkDetail(APIView):
def get(self, request, workId, format=None):
with transaction.atomic():
work = WorkProgress.objects.filter(id=workId).select_for_update().get()
data = WorkProgressSerializer(transfer).data
return Response(data)
问题是,我在执行任务时没有看到任何数据库更新。我有
python manage.py dbshell
运行、监视数据库表,它们不会随着任务的进行而更新。我一定要跑
python manage.py process_tasks
,并输出正确的
print
语句,指示进度,但在任务退出之前,数据库不会更新。
我发现有人遇到了类似的问题
here
,但他们只是在测试中体验到了这一点
get()
更新的模型。然而,我甚至没有看到数据库更新
dbshell
.
如何确保在任务运行时更新表?
注:根据
this
网站上,他们在使用
celery
. 有人能证实这一点吗?我会尝试一下,并评论一下可行性。