Django 芹菜中的延迟回调
我用的是django芹菜。我需要下载一个大的视频文件。我想在文件下载完成后更新我的数据库。有没有一种方法可以添加一个回调,在任务完成时调用django代码,而不是另一个任务?我的理想代码如下所示Django 芹菜中的延迟回调,django,celery,django-celery,Django,Celery,Django Celery,我用的是django芹菜。我需要下载一个大的视频文件。我想在文件下载完成后更新我的数据库。有没有一种方法可以添加一个回调,在任务完成时调用django代码,而不是另一个任务?我的理想代码如下所示 from video.tasks import video_download from video.models import Video def my_callback(v): v.status = "downloaded" v.save() def download_ht
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。您可以从任务中调用您的Django代码。例如:
def video_download(v):
from video.models import Video
v = Video.objects.get(pk=v)
do_download(v)
v.status = "downloaded"
v.save()
为什么不在任务结束时传递对象id并执行数据库获取和更新?嗨,你能告诉我这是否意味着,在幕后,芹菜只是在django进程中的一个分支,以便执行回调吗?(对于相关的非芹菜情况,了解这一点会有所帮助)。不,本质上没有分叉,您启动一个单独的芹菜工作进程,该进程侦听新任务,并在收到新任务时执行它(例如回调)