0

一度に複数の Web サイトからデータをダウンロードする tkinter GUI があります。ダウンロードごとに個別のスレッドを実行します (約 28)。1 つの GUI プロセスに対してスレッドが多すぎますか? 非常に遅いため、個々のページには約 1 ~ 2 秒かかりますが、すべてを一度に実行すると 40 秒以上かかります。すべてのページをダウンロードするのにかかる時間を短縮する方法はありますか? どんな助けでも大歓迎です、ありがとう。

4

3 に答える 3

2

邪魔をするのはおそらく GIL (グローバル インタープリター ロック) です。Python には、多くのスレッドでいくつかのパフォーマンス上の問題があります。

twisted.web.getPage を試すことができます (ページの少し下にあるhttp://twistedmatrix.com/projects/core/documentation/howto/async.htmlを参照)。そのためのベンチマークはありません。しかし、そのページの例を取り上げて、28 個の deferred を追加して、それがどれほど速いかを確認すると、同等の結果がかなり速く得られます。ただし、gtk リアクターを使用して、ねじれたプログラミング スタイルに入る必要があることに注意してください。

于 2009-07-20T19:31:22.877 に答える
1

プロセスは、最新の OS で問題なく数百のスレッドを持つことができます。

帯域幅が限られている場合、1 ~ 2 秒 x 28 は、40 秒が適切であることを意味します。レイテンシが制限されている場合は、より高速になるはずですが、情報がない場合、私が提案できるのは次のとおりです。

  • コードにロギングを追加して、コードが実際に並行して実行されていることを確認し、誤ってスレッドをシリアル化していないことを確認します。
  • ネットワーク モニタを使用して、ネットワーク リクエストが実際に並行して送信されていることを確認します。

より多くの情報がなければ、より良いものを提供することは困難です。

于 2009-07-20T19:35:07.237 に答える
0

スレッドの代わりにプロセスを使用してみることができます。Python には GIL があり、状況によっては遅延が発生する可能性があります。

于 2009-07-20T19:31:59.520 に答える