New submission from Kyle Stanley <aeros...@gmail.com>:

Proposal: 
Deprecate the alternative process watcher implementation to 
ThreadedChildWatcher, MultiLoopChildWatcher.

Motivation:
The idea for this proposal came from a comment from Andrew Svetlov in GH-16552:
"I believe after polishing ThreadedChildWatcher we can start deprecation of 
watchers subsystem at all, it generates more problems than solves."

Although Andrew suggested the idea of deprecating the process watchers 
subsystem entirely, I think that it would be adequate to start with just 
deprecating MultiLoopChildWatcher and proceeding from there. This is because 
the other three watcher implementations are significantly more stable in 
comparison (based on number of issues), have less complex implementations, and 
have far more widespread usage across public repositories. I would not be 
opposed to deprecating the other alternative watchers as well, but 
MultiLoopChildWatcher likely has the most justification for removal.

Details:
The class MultiLoopChildWatcher has a fairly complex implementation, causes a 
number of issues, is fairly unstable, is rarely utilized in comparison with the 
rest of the watchers API. It seems to have become a significant burden on 
maintenance for asyncio development without providing a significant benefit to 
the vast majority of users. 

Current unresolved MultiLoopChildWatcher issues:
https://bugs.python.org/issue38323
https://bugs.python.org/issue38182
https://bugs.python.org/issue37573

(3 out of the 5 open process watcher issues are caused by MultiLoopChildWatcher)

GitHub code usage comparison:
MultiLoopChildWatcher: 
https://github.com/search?l=Python&q=MultiLoopChildWatcher&type=Code (20 
results)
ThreadedChildWatcher: 
https://github.com/search?l=Python&q=ThreadedChildWatcher&type=Code (77 
results) 
FastChildWatcher: 
https://github.com/search?l=Python&q=FastChildWatcher&type=Code (4,426 results)
SafeChildWatcher: 
https://github.com/search?l=Python&q=SafeChildWatcher&type=Code (7,007 results)
All of asyncio usage: https://github.com/search?l=Python&q=asyncio&type=Code 
(599,131 results)

Note that for the above results, it also includes matches in the CPython 
repository and for repositories that have exact copies of 
Lib/asyncio/unix_events.py. Also, ThreadedChildWatcher likely has significantly 
less results since it's already the default watcher returned by 
asyncio.get_child_watcher(), so there's less need to explicitly declare it 
compared to the others. There are of course private repositories and non-GitHub 
repositories this doesn't include, but it should provide a general idea of 
overall usage.

My experience in interacting with asyncio users is similar to the results. The 
process watchers subsystem seems to be minimally used compared to the rest of 
asyncio, with ThreadedChildWatcher likely being the most used as the default 
returned from `asyncio.get_child_watcher()`. I have not personally seen a 
realistic example of usage of MultiLoopChildWatcher outside of python/cpython, 
and all of the results returned on GitHub were copies of 
Lib/asyncio/unix_events.py or Lib/test/test_asyncio/test_subprocess.py.

I would be interested in working on this issue if it is approved, as I think it 
would provide a significant long term reduction in maintenance for asyncio; 
allowing us to focus on the improvement and development of other features that 
benefit a far larger audience.

----------
components: asyncio
messages: 355372
nosy: aeros, asvetlov, yselivanov
priority: normal
severity: normal
status: open
title: Deprecating MultiLoopChildWatcher
versions: Python 3.9

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

Reply via email to