bpo-32410: Avoid blocking on file IO in sendfile fallback code (GH-7172) (#7182)

(cherry picked from commit 7165754b6b)

Co-authored-by: Yury Selivanov <yury@magic.io>
This commit is contained in:
Miss Islington (bot) 2018-05-28 18:42:45 -07:00 committed by Ned Deily
parent a379dea11e
commit 420092e255
5 changed files with 24 additions and 2 deletions

View file

@ -800,7 +800,10 @@ class BaseEventLoop(events.AbstractEventLoop):
async def _sock_sendfile_fallback(self, sock, file, offset, count):
if offset:
file.seek(offset)
blocksize = min(count, 16384) if count else 16384
blocksize = (
min(count, constants.SENDFILE_FALLBACK_READBUFFER_SIZE)
if count else constants.SENDFILE_FALLBACK_READBUFFER_SIZE
)
buf = bytearray(blocksize)
total_sent = 0
try:
@ -810,7 +813,7 @@ class BaseEventLoop(events.AbstractEventLoop):
if blocksize <= 0:
break
view = memoryview(buf)[:blocksize]
read = file.readinto(view)
read = await self.run_in_executor(None, file.readinto, view)
if not read:
break # EOF
await self.sock_sendall(sock, view)