2016-07-05 6 views
1

私はすでにそれを行うための最良の方法を数日間考えています。DBを再帰的に更新するには、django-celeryを使用する必要がありますか?

私が製造しているアイテムを販売しています しかし、私が販売しているアイテムは他のアイテムから構成することができます 他のアイテムは他のアイテムから構成することができます。

販売注文が作成された後、このアイテムを作成するために必要なすべてのアイテムの内部受注を登録して再帰処理を実行する必要があります。製造することができない

決勝項目ので、私はいけない偽フラグis_production =を持っていると知って、私は私の確認によってトリガされますview.pyでメソッドを作成するために考えていた。このため、より深い

を行かなければなりません販売注文。しかし、私は製造された製品の複雑さを予測することができないので、それは永遠にかかり、パフォーマンスにはコストがかかることになるのではないかと恐れています。ループを終わらせることは決してありません。 はそうビューでそれをやっていることは素晴らしいアイデアではないと私は代替に考えていますし、私が前にDjangoのセロリを使ったことがないと私はしたいので、調査によって、私はそれがジャンゴ・セロリ

質問のようなものを実装する必要がありました私の理解を確認する: django-celeryは私の要件を解決するための最高の唯一のオプションですか?

+1

RedisベースのDjango RQを使用すると、設定が非常に簡単になります。http://stackoverflow.com/questions/38106696/django-rq-how-to-call-function/38106908#38106908 http:// python -rq.org/patterns/django/ – dmitryro

+0

RedisはDBと非同期タスクキュー/ジョブキューですか? –

+0

Redisは軽量で、Djangoのキャッシュエンジンとしても使用できます。一度使い始めると非常に便利です。それはC言語でコード化されているので、それは不安です。 – dmitryro

答えて

1

まず、アプリケーション設計の問題について:あなたは、言ったように「ビューでそれをやって素晴らしいアイデアではありません」...一般的にあなたが要求応答サイクルに多くの時間を必要とするプロセスを実行しないようにする必要があり、これは、 UXには悪く、一部のレイヤーでタイムアウトが発生したため(データベーストランザクションのタイムアウト、アプリケーションコンテナのタイムアウト、リバースプロキシのタイムアウトなど)、要求が中止される可能性があります。

私の推奨事項:セールスやその他のソリューションを使用して、内部受注を作成するプロセスやその他の長期実行プロセス(電子メールの送信など)をオフロードします。

第2:どのフレームワークを使用しますか?非常に多くのオプションがあります。それを調べる必要があります:-)

第3回:決してループを終了しません。あなたはそれを修正する必要があります、使用するデザインの無関心。

関連する問題