我有一个 python qt 程序,它从服务器下载许多 url。大多数 url 是小图像(图标)并且是唯一的。
由于某些奇怪的原因,在请求完成后,python/qt 仍然与服务器有一个事件的 http 连接。在我的例子中,这意味着许多 http 连接。
QT 文档指出 QNetworkAccessManager -“6 个请求针对一个主机/端口组合并行执行。”这么多、几百个 http 连接是怎么保持打开的?
几分钟后,连接关闭,但如果应用程序下载太多太快,应用程序就会死掉,并显示“(process:3265): GLib-ERROR **: Creating pipes for GWakeup: Too many open files”
在 finished() 信号中,我调用 reply.deleteLater() 然后确保我的应用程序没有引用回复。
首先,我能否捕捉到“太多打开的文件”错误并正确处理它?</p>
其次,我可以防止这么多 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
最佳答案
经过多次调试,我发现了这个问题。
事实证明 self.manager 被覆盖了很多(不小心它应该被创建并分配一次。
self.manager = Qt.QNetworkAccessManager(self)
发生了不止一次,不应该发生。
现在真的有一次 QNetworkAccessManager 只有 6 个 http 连接 + 6 个 https 连接,这正是我想要的。 :)
关于Python QT QNetworkRequest 以 "(process:3265): GLib-ERROR **: Creating pipes for GWakeup: Too many open files"退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17038133/