我正在使用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。