私は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().id
の代わりにv = Video.objects.latest()
を渡してみましたので、途中でインスタンスを更新するだけでしたが、セロリはオブジェクトであって文字列ではないため、好きではありませんでした。私はa.ready
と呼ぶたびにエラーを投げなかったが、Falseを返した。
なぜオブジェクトidを渡さずにタスクの最後にデータベースの取得と更新を実行するのですか? – balsagoth