De l'Qt 4 docs:Existe-t-il un moyen d'obtenir des informations sur la file d'attente QNetworkAccessManager?
Note:
QNetworkAccessManager
files d'attente les requêtes qu'il reçoit.
Maintenant, il y a deux choses que je voudrais pouvoir faire (en utilisant PyQt):
- Vérifiez le nombre de requêtes dans la file d'attente « interne » de
QNetworkAccessManager
, en attente d'envoi . - Vérifiez le nombre de demandes ayant reçu une réponse (c'est-à-dire le nombre de réponses QNetworkReplies terminées).
Je suppose que cette information doit déjà être disponible pour le QNetworkAccessManager
en interne, mais je n'ai pas réussi à trouver un moyen d'y accéder. Je ne pouvais rien trouver dans les documents Qt ou ailleurs, mais peut-être que je cherche au mauvais endroit ou en utilisant la mauvaise terminologie. Est-ce que quelqu'un peut me dire si Qt fournit un moyen d'accéder à l'information sur la file d'attente QNetworkAccessManager
? Pour plus de clarté: je peux penser à quelques façons de garder une trace de ces choses moi-même, par exemple. en vérifiant les états QNetworkReply individuels, mais ce n'est pas le genre de solution que je cherche (seulement en dernier recours, si Qt ne fournit pas un moyen plus simple).
--- EDIT ---
Un exemple légèrement moins que minimal mais toujours trivial du genre de chose que j'avais en tête:
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_()
Dans ce cas quelque chose comme un allFinished
le signal du gestionnaire me permettrait d'économiser quelques lignes de code.
Pour moi, il semble comme une * très * API probable pour Qt de fournir. "QNetworkReply" est effectivement cette API "seulement si je fais une comptabilité supplémentaire. Je sais que c'est facile à réaliser, mais pourquoi le faire moi-même si l'information doit déjà être là? Cela ne fait qu'ajouter à mes frais généraux. Si le gestionnaire gère une file d'attente, laissez-moi au moins voir combien de temps il est, par exemple. fournir quelque chose comme un signal 'allFinished'. – Dennis
Supposons que je tire une ou deux requêtes en utilisant, par exemple, 'manager.get (request)', sans obtenir explicitement ou conserver une référence à la réponse renvoyée. Un emplacement connecté au signal 'manager.finished' obtiendra toujours les instances de réponse correspondantes. Cela ne signifie-t-il pas que le gestionnaire conserve déjà des références aux réponses? – Dennis
Oui, dans ce cas, c'est * ce que je dis. Mais, s'il est «trivialement vrai que Qt doit conserver une référence jusqu'au moment où il donne la réponse à l'utilisateur», cela ne signifie-t-il pas qu'il pourrait aussi «trivialement» me donner le nombre de réponses en attente? d'être fini? C'est tout ce que je demande. Btw merci pour votre aide aimable. – Dennis