からセロリを通じてタスクを実行Djangoは私のmodels.pyでモデル
-
:これは、次を返して
from celery.decorators import task
from core.models import Image
@task()
def create_thumbnail(image_id):
ImageObj = Image.objects.get(id=image_id)
# other stuff here
私はImage
はここでは意味がありませんので、しかし、これは明らかに問題が発生します、tasks.py
でfrom core.models import Image
をコメントアウトした場合、エラーが消えるをインポートすることはできません。私はcreate_thumbnail
の中でそれをインポートしようとしましたが、まだそれはImage
を認識しません。
私は、通常、オブジェクト自体をタスクの引数として渡すことができますが、それは私の問題を解決するだろうと読んでいます。しかし、友人は一度、RabbitMQメッセージにできるだけ少ないデータを送信することをお勧めしています。そのため、イメージIDを渡してからタスクで再度取得しようとしています。
1)私がしようとしていることがベストプラクティスと考えられていますか?はいの場合、どうすればうまくいくのですか?
2)私はWeb上で見つかったすべての例で気づきましたが、彼らはビューから、そしてモデルから決してそのタスクを実行しません。新しい画像がアップロードされるたびにサムネイルを作成しようとしていますが、フォーム/ビューごとにcreate_thumbnailを呼びたくありません。それについてのアイデア?推奨されていないモデルや一般的なプラクティスからタスクを実行していますか?
私は本当に「循環輸入を排除するには、どのような輸入が起こるべきかを考えなければならない」というパラグラフを高く評価しました。ありがとうございました。 – pawelmech