從Qt 4 docs:有沒有辦法獲得有關QNetworkAccessManager隊列的信息?
注:
QNetworkAccessManager
隊列它接收到的請求。
現在,有兩件事情我想能(使用PyQt的)做:
- 檢查多少個請求是在
QNetworkAccessManager
的‘內部’隊列,等待發送。 - 檢查有多少請求已收到答案(即完成的QNetworkReplies的計數數量)。
我認爲這些信息在內部必須已經提供給QNetworkAccessManager
,但我一直無法找到訪問它的方法。我在Qt文檔或其他地方找不到任何東西,但也許我正在尋找錯誤的地方或使用錯誤的術語。
有人能告訴我Qt是否提供某種方式來訪問有關QNetworkAccessManager
隊列的信息?
只是爲了清楚起見:我可以想出一些方法來自己跟蹤這些事情,例如,通過檢查單個QNetworkReply狀態,但這不是我尋求的解決方案(只是作爲最後的手段,如果Qt沒有提供更簡單的方法)。
---編輯---那種東西我想到的
稍微-低於最低,但仍簡單的例子:
import sys
import json
from PyQt4 import QtNetwork, QtGui, QtCore
def show_reply_content(reply):
print 'url from reply content: {}'.format(
json.loads(str(reply.readAll()))['url'])
# Quit if all replies are finished
reply.deleteLater()
reply.manager().replies_unfinished -= 1
if not reply.manager().replies_unfinished:
app.quit()
# Some initialization
app = QtGui.QApplication(sys.argv)
manager = QtNetwork.QNetworkAccessManager()
manager.finished.connect(show_reply_content)
# Add counter as dynamic attribute (quick and dirty)
manager.replies_unfinished = 0
# Schedule some dummy requests
number_of_requests = 10
for i in range(number_of_requests):
manager.get(QtNetwork.QNetworkRequest(
QtCore.QUrl('http://httpbin.org/anything/{}'.format(i))))
# Update counter
manager.replies_unfinished += 1
# Start event loop
app.exec_()
在這種情況下是這樣的allFinished
來自經理的信號會爲我節省幾行代碼。
對我來說,這似乎像Qt來提供一個非常* *可能的API。 「QNetworkReply'實際上就是這個API」,只有當我做了一些額外的簿記。我知道這很容易實現,但如果信息必須在那裏,爲什麼要這樣做呢?這隻會增加我的開銷。如果經理管理一個隊列,至少讓我看看它有多長,或者例如提供類似'allFinished'的信號。 – Dennis
假設我用一些請求發起了一些請求。 'manager.get(request)',而不明確地獲取或保留對返回答覆的引用。連接到'manager.finished'信號的插槽仍將獲得相應的回覆實例。這是否意味着經理已經保留了對答覆的引用? – Dennis
是的,在這種情況下,*就是我所說的。但是,如果Qt必須保持一個參考值,直到它向用戶提交答覆爲止,這並不意味着它可以「平凡」地給我一個等待答覆的數量的計數完成?這就是我所要求的。順便說一句,謝謝你的善意幫助。 – Dennis