2

私はオンライン裁判官に取り組んでいます.私はpython 2.7とMysqlを使用しています(バックエンド部分に取り組んでいるため)

私の方法:

データベースから送信を引き出し(一度に10件)、それらをキューに入れるメインスレッドを作成します。次に、キューから送信を取得し、評価して結果をデータベースに書き戻す複数のスレッドがあります。

今、私はいくつかの疑問を持っています(それらはさまざまなトピックからの疑問であることは知っていますが、それらのいくつかへのアプローチも高く評価されています)。

  1. 現在、スレッドを開始するときに、スレッドが使用する独自のデータベース接続を提供します。これは、スレッドごとに 1 つの接続を提供することをお勧めします。スレッド間の接続の共有は問題を引き起こしますか?どうすればいいですか?
  2. 私のメインスレッドは単一の接続を使用します。その唯一の作業は、データベースから送信をプルしてキューに入れることです(また、データベースのステータスを送信を評価するように更新します)。しかし、時々エラーが発生します:Lost connection to Mysql serverクエリ中に。プログラムを停止して再起動しても、引き続き発生します。どうすればよいですか? また、メインスレッドのみに接続のプールを実装する必要がありますか?
  3. また、db接続は永久に存続しますか? セッションメモリなどが使い果たされた場合の対処方法は?
4

2 に答える 2

4
  1. 接続プールを使用します。データベース接続を共有することは必ずしも悪いことではありませんが、注意が必要です。SQLAlchemy を試して、この多くを管理できます: http://docs.sqlalchemy.org/en/rel_0_8/orm/session.html#unitofwork-contextual

  2. サーバーが接続されていない、リソースの使用量が多すぎるために接続が強制終了されたなどの可能性があります。接続プールはこれを解決するのに役立ちます。

  3. それはすべて依存します。理論的には無期限に存続する可能性がありますが、通常、どこかでタイムアウトが発生します。

于 2013-06-30T17:12:31.320 に答える
2
  1. すべてのスレッドに同じ接続を与えると、スレッドはデータベースにクエリを実行できなくなり、競合状態が発生します。したがって、すべてのスレッドに個別の接続を提供する必要があり、実際には良い考えです。さまざまな接続を取得するのに役立つ目的で、接続プールを使用します。

  2. 接続プールは確かに役立ちます。

  3. 作業が終了したら、接続を解放します。接続タイムアウトと呼ばれる接続には制限があります。そのため、サードパーティのライブラリを使用して処理する必要があります。c3p0 は、これに役立つ優れたライブラリです。

以下のリンクを参照して設定してください。

c3p0 の最適な構成

于 2013-06-30T17:12:23.377 に答える