我正在使用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)
如果在芹菜任务完成后有另一种更新对象的方法,我也会对此感兴趣。
PS:我尝试传入v = Video.objects.latest()
而不是v = Video.objects.latest().id
,所以我可以沿途更新实例,但芹菜不喜欢它,因为它是一个对象,而不是一个字符串。虽然它没有抛出任何错误,但每次我调用a.ready
时它返回False。
答案 0 :(得分:1)
您可以从任务中调用Django代码。例如:
def video_download(v):
from video.models import Video
v = Video.objects.get(pk=v)
do_download(v)
v.status = "downloaded"
v.save()