Stückweise aus StringIO lesen, wie?
Verfasst: Mittwoch 22. Februar 2006, 19:49
Ich biete per CGI Dateien zum Download an... Es sind ZIP-Dateien die mit StringIO im Speicher erzeugt werden:
Nun überlege ich ein billiges "Traffic Shaping" bzw. throttling einzubauen... Meine Idee. Ich übertrage die Daten von buffer stückweise in self.request.write() rüber und zwischendurch mache ich ein time.sleep()...
Nur, wie lese ich Stückweise aus einem StringIO herraus?
Code: Alles auswählen
buffer = cStringIO.StringIO()
z = zipfile.ZipFile(buffer, "w")
for file_info in files:
z.write(file_info)
z.close()
if simulation:
self.request.write("-"*80)
self.request.write("\n")
buffer.seek(0,2) # Am Ende der Daten springen
buffer_len = buffer.tell() # Aktuelle Position
buffer.seek(0) # An den Anfang springen
filename = posixpath.split(self.request_path)[-1]
if not simulation:
self.request.headers['Content-Disposition'] = 'attachment; filename="%s.zip"' % filename
self.request.headers['Content-Length'] = '%s' % buffer_len
self.request.headers['Content-Transfer-Encoding'] = 'binary'
self.request.headers['Content-Type'] = 'application/octet-stream; charset=utf-8'
self.request.write(buffer.getvalue())
Nur, wie lese ich Stückweise aus einem StringIO herraus?