【发布时间】:2012-04-24 17:32:11
【问题描述】:
我正在使用 django-celery。我需要下载一个大的视频文件。我想在文件下载完成后更新我的数据库。当任务完成时,有没有办法添加一个回调来调用 django 代码,而不是另一个任务?我理想的代码应该是这样的......
from video.tasks import video_download
from video.models import Video
def my_callback(v):
v.status = "downloaded"
v.save()
def download_http(request):
v = Video.objects.latest().id #this is a string
a = video_download.delay(v, my_callback)
如果在 celery 任务完成后还有其他方法可以更新对象,我也会对此感兴趣。
PS:我尝试传入v = Video.objects.latest() 而不是v = Video.objects.latest().id,所以我可以一路更新实例,但 celery 不喜欢它,因为它是一个对象而不是字符串。虽然它没有抛出任何错误,但每次我调用 a.ready 时它都会返回 False。
【问题讨论】:
-
为什么在任务结束时不传递对象 id 并执行数据库获取和更新?
标签: django celery django-celery