1

サーバーから多くの URL をダウンロードする python qt プログラムがあります。ほとんどの URL は小さな画像 (アイコン) であり、一意です。

リクエストが終了した後、何らかの奇妙な理由で、python/qt はまだサーバーへのアクティブな http 接続を保持しています。そして私の場合、これは多くの http 接続を意味します。

QT のドキュメントには、QNetworkAccessManager - 「1 つのホスト/ポートの組み合わせに対して 6 つの要求が並行して実行される」と記載されています。何百もの http 接続を開いたままにしておくことができるでしょうか。

数分後に接続は閉じられますが、アプリケーションのダウンロードが速すぎると、アプリケーションは "(process:3265): GLib-ERROR **: Creating pipes for GWakeup: Too many open files" で終了します。

finished() シグナルでは、reply.deleteLater() を呼び出して、アプリケーションが応答を参照しないようにします。

まず、「開いているファイルが多すぎます」というエラーをキャッチして、正しく処理できますか?

次に、閉じられる前に非常に多くの http 接続が開いたままになるのを防ぐことができますか?

- - 切れ端 - -

image_request = Qt.QNetworkRequest()
image_request.setUrl(Qt.QUrl(url))
self.image_reply = self.manager.get(image_request)
self.image_reply.finished.connect(self.image_available)

image_available は

def image_available(self):
    if self.image_reply.error() == Qt.QNetworkReply.NoError:
        data = self.image_reply.readAll()
        img = Qt.QImage()
        img.loadFromData(data)
        self.lbl_icon.setPixmap(Qt.QPixmap(img))
        self.image_reply.deleteLater()
        self.image_reply = None
4

2 に答える 2