私は一度に複数のWebサイトからデータをダウンロードするtkinter GUIを持っています。私はダウンロードごとに別々のスレッドを実行します(約28)。 1つのGUIプロセスにはあまりにも多くのスレッドがありますか?それは本当に遅いので、個々のページには約1〜2秒かかりますが、すべてを一度に実行すると40秒以上かかります。すべてのページをダウンロードするのにかかる時間を短縮する方法はありますか?どんな助けでも感謝しています。Pythonは一度に複数のWebページにアクセスします
答えて
おそらくGIL(グローバルインタプリタロック)があなたのやり方になっているでしょう。 Pythonには多くのスレッドでいくつかのパフォーマンス上の問題があります。
twisted.web.getPageを試すことができます(http://twistedmatrix.com/projects/core/documentation/howto/async.htmlを参照してください)。 ベンチマークはありません。 しかし、そのページの例を取って28の延期を追加すると、それがどれほど速いかを見るとかなり速い結果が得られます。 gtkリアクトルを使用して、ツイストプログラミングスタイルにする必要があることに注意してください。
スレッドの代わりにプロセスを使用できます。 PythonにはGILがあり、状況によっては遅延が発生する可能性があります。
プロセスには、現代のOSに問題のない何百ものスレッドが存在する可能性があります。
帯域幅が制限されている場合は、1〜2秒の28倍は約40秒が正しいことを意味します。あなたは待ち時間が限られている場合、それはより速くなるはずですが、情報なしで、私が提案することができるすべては、次のとおりです。
- は、それが実際に並列で実行していることを確認するために、コードへのロギングを追加し、あなたが誤っていないだということ何らかの形でスレッドをシリアライズします。
- ネットワークモニタを使用して、ネットワーク要求が実際にパラレルに出力されていることを確認します。
さらに詳しい情報がないと、何か改善するのは難しいです。
私はチェックして、スレッドはすべて同時に起動して並列に実行しますが、それらはすべて異なる時間にurllibリクエストから戻ってきます。私はそれがネットワークと関係していて、一度に複数の要求を処理するものと仮定しています。あなたはそれが問題だと思いますか、それとも何か他のものですか?一度に複数のネットワーク要求を実行できますか?私はWindows XP上で、私はそれが役立つ場合は、ワイヤレス接続があります。あなたの助けに感謝し、私の無知を言い訳します。私はネットワークの人ではありません。 –
- 1. numpy pythonは複数の列を一度にフィルタリングします。
- 2. 一度に複数のSQLデータベースにアクセスできますか?
- 3. PythonフラスコのWebページ複数のアイテムの単一アイテムページ
- 4. nodejsは一度に複数のページをレンダリングする
- 5. 単一ページまたは複数ページWebアプリケーション?
- 6. 複数のリストを一度に追加できますか? (Python)
- 7. は、一度に取得した複数ページのWebサイトのすべての資産です
- 8. 複数のWebページをPythonで削る
- 9. 一度に複数のFacebookブックアプリへのアクセス許可
- 10. SSRSは一度に複数のクエリを実行しますか?
- 11. Djangoは一度に複数のレコードを作成します
- 12. Laravelは一度に複数のジョブを追加します
- 13. SpriteKitは、一度に複数のタッチを防止します
- 14. Djangoは複数のファイルを一度にパッケージ化します
- 15. Python 3.6.2 - 複数の__init__;一度に複数のクラスを使用する
- 16. Python:YouTubeのWebページにアクセスするには?
- 17. 複数のWebサービスにアクセスする
- 18. Tkinter Python:一度に複数のウィジェットを移動する
- 19. React - 単一ページまたは複数ページ
- 20. 複数のページでクッキーにアクセスする
- 21. Pythonは一度に行数をループします
- 22. PythonによるWebスクレイプ - 複数のWebページをループする問題
- 23. 単一のWebアプリケーションを使用して複数の仮想ディレクトリにアクセスする
- 24. Pythonで一度に複数のバッチを同時に実行できますか?
- 25. 複数の関数キーワードを一度にPython 2で設定する方法は?
- 26. AndroidブラウザのWebページ一度のログイン
- 27. リストから複数のクエリを一度にPythonで実行するには?
- 28. 複数のUILabelsを一度に隠す
- 29. オープン方法複数のWebページを次々にPythonで開きますか?
- 30. Q:VBA - 複数のチャートのデータラベルを一度にフォーマットしますか?
私はそれを疑っています。それが、TCPソケットがバッファされている理由です。私はそれに好奇心から試してみなければならないでしょうが、ソケットバッファリングが大部分のためにこれを処理することを期待しています。 –
私はそのページを読んで、それは非常に役に立つと思う、私は何かを見つけることができない場合、ツイストを使用しようとする可能性があります、ありがとう。 –
ねじれ推奨のUpvote。同等のスレッドコードよりもねじれを使用するコードを作成してデバッグするのははるかに簡単です。 – habnabit