Wie messe ich die Download-Geschwindigkeit und den Fortschritt anhand von Anfragen?

ich benutzerequests zum Herunterladen von Dateien, aber bei großen Dateien muss ich jedes Mal die Größe der Datei auf der Festplatte überprüfen, da ich den Fortschritt nicht in Prozent anzeigen kann und auch die Download-Geschwindigkeit wissen möchte. Wie kann ich das machen? Hier ist mein Code:

import requests
import sys
import time
import os

def downloadFile(url, directory) :
  localFilename = url.split('/')[-1]
  r = requests.get(url, stream=True)

  start = time.clock()
  f = open(directory + '/' + localFilename, 'wb')
  for chunk in r.iter_content(chunk_size = 512 * 1024) :
        if chunk :
              f.write(chunk)
              f.flush()
              os.fsync(f.fileno())
  f.close()
  return (time.clock() - start)

def main() :
  if len(sys.argv) > 1 :
        url = sys.argv[1]
  else :
        url = raw_input("Enter the URL : ")
  directory = raw_input("Where would you want to save the file ?")

  time_elapsed = downloadFile(url, directory)
  print "Download complete..."
  print "Time Elapsed: " + time_elapsed


if __name__ == "__main__" :
  main()

Ich denke, eine Möglichkeit, dies zu tun, wäre, die Datei jedes Mal im Internet zu lesenfor Schleife und berechnen Sie den Prozentsatz des Fortschritts basierend auf dem HeaderContent-Length. Aber das wäre wieder ein Problem für große Dateien (ca. 500MB). Gibt es eine andere Möglichkeit?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage