python, wie man iobytes zugewiesenen Speicher Länge?
Dies ist der code, den ich verwende zum testen die Speicher Zuweisung
import pycurl
import io
url = "http://www.stackoverflow.com"
buf = io.BytesIO()
print(len(buf.getvalue())) #here i am getting 0 as length
c = pycurl.Curl()
c.setopt(c.URL, url)
c.setopt(c.CONNECTTIMEOUT, 10)
c.setopt(c.TIMEOUT, 10)
c.setopt(c.ENCODING, 'gzip')
c.setopt(c.FOLLOWLOCATION, True)
c.setopt(c.IPRESOLVE, c.IPRESOLVE_V4)
c.setopt(c.USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0')
c.setopt(c.WRITEFUNCTION, buf.write)
c.perform()
c.close()
print(len(buf.getvalue())) #here length of the dowloaded file
print(buf.getvalue())
buf.close()
Wie man den zugewiesenen Puffer/Speicher Länge von BytesIO ?
was mache ich hier falsch ? python nicht zuordnen fixe Pufferlänge ?
- zeigen Sie den stack-trace.
- Warum nicht mehr anständig client-Bibliothek wie
requests
? - es gibt keine errror ich will einfach nur wissen, wie man den zugewiesenen Arbeitsspeicher Länge
- Sie hat nicht alles schreiben, was in den stream, damit Ihr Inhalt sind leer. Was ist das Problem? Was Speicherzuordnung redest du?
- python nicht zuordnen festen Speicher für Puffer ?
- Nein, das konnte nicht funktionieren, weil Sie nicht wissen, welche Größe benötigt wird. Es neu reserviert, wenn Sie benötigt wird.
- wie kann ich reservieren einen festen Betrag an Speicher
e.g. 50 KB
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht sicher, was du damit meinst zugewiesenen Puffer/Speicher Länge, aber wenn Sie möchten, dass die Länge des Nutzers gespeicherten Daten in der
BytesIO
Objekt, das Sie tun können,Aber das scheint äquivalent zu der
len(buf.getvalue())
, die Sie derzeit verwenden.Die tatsächliche Größe der BytesIO Objekt kann gefunden werden, mit
sys.getsizeof()
:Oder Sie könnten böse sein und rufen
__sizeof__()
direkt (das ist wiesys.getsizeof()
aber ohne garbage collector Aufwand anwendbar auf das Objekt):Speicher für
BytesIO
zugeordnet ist, als erforderlich, und einige Pufferung erfolgt:numpy
, die Sie verwenden können, z.B.numpy.empty(50, dtype=numpy.character)
io.BytesIO()
gibt eine standard-Datei-Objekt, das die Funktiontell()
. Es meldet den aktuellen Deskriptor position und kopiert nicht den gesamten Puffer aus, um zu berechnen, Gesamtgröße alslen(bio.getvalue())
vonbio.getbuffer().nbytes
. Es ist eine sehr schnelle und einfache Methode, um die genaue Größe des belegten Speichers in den Puffer-Objekt.Ich gepostet ein Beispiel-code und eine detaillierte Antwort hier