Skip to content

Commit e134cff

Browse files
committed
optimize sendfile, avoid large read size
1 parent a1f98fb commit e134cff

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

tremolo/lib/http_response.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ async def write(self, data, buffer_size=16 * 1024, **kwargs):
242242
async def sendfile(
243243
self,
244244
path,
245-
buffer_size=16384,
245+
buffer_size=16 * 1024,
246246
content_type=b'application/octet-stream'
247247
):
248248
try:
@@ -341,9 +341,12 @@ async def sendfile(
341341
b'Content-Range', b'bytes %d-%d/%d' % (
342342
start, end, file_size)
343343
)
344-
345344
handle.seek(start)
346-
await self.write(handle.read(size), chunked=False)
345+
346+
while size > 0:
347+
await self.write(handle.read(min(size, buffer_size)),
348+
chunked=False)
349+
size -= buffer_size
347350
else:
348351
client = self._request.client
349352

@@ -369,9 +372,13 @@ async def sendfile(
369372
b'Content-Range: bytes %d-%d/%d\r\n\r\n' % (
370373
boundary, content_type, start, end, file_size)
371374
)
372-
373375
handle.seek(start)
374-
await self.write(b'%s\r\n' % handle.read(size))
376+
377+
while size > 0:
378+
await self.write(handle.read(min(size, buffer_size)))
379+
size -= buffer_size
380+
381+
await self.write(b'\r\n')
375382

376383
await self.write(b'--%s--\r\n' % boundary)
377384
await self.write(b'')

0 commit comments

Comments
 (0)