【问题标题】:Python QT QNetworkRequest exits with "(process:3265): GLib-ERROR **: Creating pipes for GWakeup: Too many open files"Python QT QNetworkRequest 以“(进程:3265):GLib-ERROR **:为 GWakeup 创建管道:打开的文件太多”退出
【发布时间】:2013-06-11 06:53:56
【问题描述】:

我有一个 python qt 程序,它从服务器下载许多 url。大多数网址都是小图像(图标)并且是独一无二的。

由于某些奇怪的原因,请求完成后 python/qt 仍然有一个活动的 http 连接到服务器。在我的例子中,这意味着很多 http 连接。

QT 文档指出 QNetworkAccessManager -“6 个请求针对一个主机/端口组合并行执行。”这么多、几百个http连接怎么能保持打开状态?

几分钟后连接关闭,但如果应用程序下载太多太快,应用程序会因“(process:3265): GLib-ERROR **: Creating pipelines 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

【问题讨论】:

    标签: python qt http networking pyqt4


    【解决方案1】:

    经过大量调试,我发现了问题。

    事实证明 self.manager 被覆盖了很多次(不小心它应该被创建和分配一次。

    self.manager = Qt.QNetworkAccessManager(self)
    

    发生了不止一次,它不应该发生。

    现在真的有一次 QNetworkAccessManager 只有 6 个 http 连接 + 6 个 https 连接,这正是我想要的。 :)

    【讨论】:

      【解决方案2】:

      您的条件self.image_reply.error() == Qt.QNetworkReply.NoError 总是正确的吗?如果 ts 为 false,则不会调用 deleteLater

      尝试设置“连接:关闭”标题:

      image_request.setRawHeader("Connection", "close");
      

      也可以尝试手动拨打self.image_reply.close()

      【讨论】:

      • 我目前没有收到任何错误(直到出现打开的文件太多)。错误记录在 manager.finished 信号中。我尝试将 Keep-Alive 设置为 false,但这没有任何区别。我会尝试 Connection:close 标头
      • self.image_reply.close() 没有帮助,也许这是预期的,因为文档说“网络资源在完成之前不会被丢弃”
      猜你喜欢
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 2013-05-07
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多