Ich möchte eine große Protokolldatei mit asyncio über das Netzwerk streamen. Ich erhalte die Daten aus der Datenbank, formatiere sie, komprimiere sie mit pythons zlib und streame sie über das Netzwerk.Wie streame man ein gzip, das in Python on the fly gebaut wurde?
Hier ist im Grunde der Code, den ich verwenden:
@asyncio.coroutine
def logs(requests):
# ...
yield from resp.prepare(request)
# gzip magic number and compression format
resp.write(b'\x1f\x8b\x08\x00\x00\x00\x00\x00')
compressor = compressobj()
for row in rows:
ip, uid, date, url, answer, volume = row
NCSA_ROW = '{} {} - [{}] "GET {} HTTP/1.0" {} {}\n'
row = NCSA_ROW.format(ip, uid, date, url, answer, volume)
row = row.encode('utf-8')
data = compressor.compress(row)
resp.write(data)
resp.write(compressor.flush())
return resp
Die Datei, die ich abrufen kann nicht mit gunzip geöffnet werden und die folgenden Fehler zcat zu erhöhen:
gzip: out.gz: unexpected end of file