Python QT QNetworkRequest 以 "(process:3265): GLib-ERROR **: Creating pipes for GWakeup: Too many open files"退出

标签 python qt http networking pyqt4

我有一个 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/

相关文章:

python - 如何在使用带有 request.post 方法的文件参数上传文件时应用压缩

java - 发布数据时无法得到回复?

python - 在 pandas 数据框中水平移动 bool 值

python - 需要使用现有数组生成新数组

c++ - QGLShaderProgram OpenGL 着色器

Qt Creator 在树莓派上没有 CMake 生成器

linux - 用反斜杠空格替换 QString 中的空格

angularjs - 无法读取 $httpInterceptor 中未定义的属性 'push'

Python Pandas : Error tokenizing data. C 错误:读取 1GB CSV 文件时字符串内的 EOF 开始

python - 在 youtube_dl 进度 Hook 中获取下载视频的 URL