7

あるモデルには、いくつかのフィールドを更新し、他のモデルの1つのオブジェクトを作成するupdate()メソッドがあります。問題は、更新に使用するデータが別のホストからフェッチされ(オブジェクトごとに一意)、時間がかかる可能性があることです(ホストがオフラインで、タイムアウトが3秒に設定されている可能性があります)。そして今、私は数百のオブジェクトを1時間に3〜4回更新する必要があります。もちろん、1日中かかる可能性があるため、連続してすべてを更新することはできません。私の最初の考えは、それぞれがオブジェクトの独自の部分を更新できるように、50〜100スレッドに分割することでした。更新機能時間の99%がサーバーの応答を待機しています(データが数バイトしかないため、pingが問題になります)。CPUは問題にならないだろうと思います。もっと心配しています。

  • DjangoORM。それを処理できますか?すべてのオブジェクトを取得し、分割し、50を超えるスレッドから更新しますか?
  • これを解決するのは良い考えですか?もしそうなら-それを行う方法とデータベースを台無しにしないでください?それとも、私はそれほど小さなレコードを気にするべきではありませんか?
  • それが良い方法ではない場合、それを正しく行う方法は?
4

2 に答える 2

7

別のスレッドからアクションを手動で実行できますが (例:Queueおよび executors プールを使用)、Django の ORM はデータベース接続をスレッドローカル変数で管理することに注意してください。したがって、それぞれの新しいスレッド = データベースへの新しい接続 (これは、1 つの要求に対して 50 ~ 100 のスレッドの場合はお勧めできません。接続が多すぎます)。一方、データベースの「帯域幅」を確認する必要があります。

于 2012-08-24T19:34:03.653 に答える