[New-bugs-announce] [issue29704] Can't read data from Transport after asyncio.SubprocessStreamProtocol closes
Seth Michael Larson
report at bugs.python.org
Thu Mar 2 17:24:23 EST 2017
New submission from Seth Michael Larson:
Copied from https://github.com/python/asyncio/issues/484
"""
>From https://bugs.python.org/issue23242#msg284930
The following script is used to reproduce the bug:
import asyncio
async def execute():
process = await asyncio.create_subprocess_exec(
"timeout", "0.1", "cat", "/dev/urandom", stdout=asyncio.subprocess.PIPE)
while True:
data = await process.stdout.read(65536)
print('read %d bytes' % len(data))
if data:
await asyncio.sleep(0.3)
else:
break
asyncio.get_event_loop().run_until_complete(execute())
will produce following output and terminate with exception:
read 65536 bytes
read 65536 bytes
Traceback (most recent call last):
File "read_subprocess.py", line 18, in <module>
asyncio.get_event_loop().run_until_complete(execute())
File "/usr/lib/python3.6/asyncio/base_events.py", line 466, in run_until_complete
return future.result()
File "read_subprocess.py", line 9, in execute
data = await process.stdout.read(65536)
File "/usr/lib/python3.6/asyncio/streams.py", line 634, in read
self._maybe_resume_transport()
File "/usr/lib/python3.6/asyncio/streams.py", line 402, in _maybe_resume_transport
self._transport.resume_reading()
File "/usr/lib/python3.6/asyncio/unix_events.py", line 401, in resume_reading
self._loop._add_reader(self._fileno, self._read_ready)
AttributeError: 'NoneType' object has no attribute '_add_reader'
When the process exits https://github.com/python/asyncio/blob/master/asyncio/unix_events.py#L444 is called which sets this._loop = None
Next time read() is called on the pipe the above exception is thrown.
I have tried to fix this issue myself but would sometimes have read terminate too early and miss the last chunks of data.
"""
- BotoX
----------
messages: 288839
nosy: SethMichaelLarson, yselivanov
priority: normal
pull_requests: 337
severity: normal
status: open
title: Can't read data from Transport after asyncio.SubprocessStreamProtocol closes
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue29704>
_______________________________________
More information about the New-bugs-announce
mailing list