HTTP Upload Fortschritt und Geschwindigkeit ermitteln

Tag zusammen, ich würde gerne wissen wie ich am besten bei einem HTTP Upload den Fortschrtt und die Geschwindigkeit ermittle.
Schon mal danke für die Hilfe, Bernd
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Bernd Kaiser schrieb:
Tag zusammen, ich würde gerne wissen wie ich am besten bei einem HTTP Upload den Fortschrtt und die Geschwindigkeit ermittle.
Falls du ein HTML Formular hast und der Browser die Daten uploaden soll, ist dies nicht möglich. Der Browser müsste die Funktionalität implementiert haben. Da die Daten vom Browser zum Server geladen werden, hast Python auf dem Server noch gar keine Ahnung von den Daten. Dazu muss man jedoch sagen, dass es Java Applets gibt, die solche Funktionalitäten zur Verfügung stellen.
Falls du selber einen HTTP Client bestellst, sollte dies kein Problem sein. Ein time und http client package verwenden und dann noch die übertragenen Daten (Bits, Bytes etc.) zählen.
Viel Spass!
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Andreas Wapf wrote:
Falls du selber einen HTTP Client bestellst, sollte dies kein Problem sein.
Genau, ich möchte mit Python eine Datei an einem HTTP-Server schicken
Ein time und http client package verwenden und dann noch die übertragenen Daten (Bits, Bytes etc.) zählen.
Wie ich das am beste mache würd ich gerne wissen.
Bernd
(Sorry für den Fehlpost)
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Bernd Kaiser wrote:
Tag zusammen, ich würde gerne wissen wie ich am besten bei einem HTTP Upload den Fortschrtt und die Geschwindigkeit ermittle.
Du musst von httplib.HTTPConnection ableiten und .send überdefinieren. Dort überträgst Du die Daten mit self.socket.send, und zerlegst sie vielleicht in Stücken von 3kB. Nach jedem Stück meldest Du dem Nutzer Fortschritt. Gleichzeitig addierst Du die Größe aller Stücken zusammen und teilst das durch die verstrichene Zeit.
Ciao, Martin
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Martin v. Löwis wrote:
Du musst von httplib.HTTPConnection ableiten und .send überdefinieren. Dort überträgst Du die Daten mit self.socket.send, und zerlegst sie vielleicht in Stücken von 3kB. Nach jedem Stück meldest Du dem Nutzer Fortschritt. Gleichzeitig addierst Du die Größe aller Stücken zusammen und teilst das durch die verstrichene Zeit.
send wird ja auch noch von anderen Funktionen der httplib gebraucht, wie schreib ich das denn so dass sich das alles verträgt?
Meine Versuche die Datei mit StringIO zu teilen sind glaub ich auch nicht so das Wahre, wie teilt man denn die Datei am besten?
Bernd
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Bernd Kaiser wrote:
send wird ja auch noch von anderen Funktionen der httplib gebraucht, wie schreib ich das denn so dass sich das alles verträgt?
send wird dazu verwendet, Daten an die andere Seite zu senden. Es ist aus Deiner Problembeschreibung nicht klar, ob Du *alle* gesendeten Daten mitzählen willst oder nur die Datei im Dateiupload (also unter Auslassung von HTTP headers usw.)
Ich bin davon ausgegangen, dass Du alle Daten zählen willst. Das machst Du so:
class CountingConnection(httplib.Connection): def send(self, data): pos=0 # Sende Stücken von 3000 byte while len(data)-pos > 3000: count_progress(3000) httplib.Connection.send(self, data[pos:pos+3000]) pos+=3000 # Sende den Rest if pos<len(data): count_progress(len(data)-pos) httplib.Connection.send(self, data[pos:])
Die Funktion count_progress musst Du nun selbst implementieren.
Ciao, Martin
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
"Martin v. Löwis"
-
Andreas Wapf
-
Bernd Kaiser