New submission from Martin Richard:

Hi,

Currently, subprocess.Popen performs blocking IO in its constructor (at least 
on Unix): it reads on a pipe in order to detect outcome of the pre-exec and 
exec phase in the new child. There is no way yet to modify this behavior as 
this blocking call is part of a long Popen._execute_child() method.

This is a problem in asyncio (asyncio.subprocess_exec and 
asyncio.subprocess_shell).

I would like to submit a patch which breaks Popen.__init__() and 
Popen._execute_child() in several methods so it becomes possible to avoid 
blocking calls (read on pipe and waitpid) by overriding a few private methods 
without duplicating too much code. The goal is to use it in asyncio, as 
described in this pull request (which currently monkey-patches Popen):
https://github.com/python/asyncio/pull/428

This patch only targets the unix implementation.

Thanks for your feedback.

----------
files: popen_execute_child_refactoring.patch
keywords: patch
messages: 277517
nosy: martius
priority: normal
severity: normal
status: open
title: Refactor subprocess.Popen to let a subclass handle IO asynchronously
type: enhancement
versions: Python 3.6
Added file: 
http://bugs.python.org/file44844/popen_execute_child_refactoring.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue28287>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to