Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 23, 2017. It is now read-only.
This repository was archived by the owner on Nov 23, 2017. It is now read-only.

subprocess._loop deleted too soon causing exception when trying to read from pipe #484

Open
@BotoX

Description

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /