> My the main question is: how to detect if the new watcher can be used or asyncio should fallback to threaded based solution?
Perhaps in the __init__ we could do something like this:
class PidfdChildWatcher(AbstractChildWatcher):
def __init__(self):
if not hasattr(os, "pidfd_open"):
raise RuntimeError("os.pidfd_open() is unavailable.")
...
Thoughts?
> My WIP progress patch is attached. It passes all asyncio tests.
I think we could also specifically look for race conditions with `./python -m test test_asyncio.test_subprocess -F -j4`, rather than relying on the tests passing with a single job. The other child watchers have been particularly infamous when it comes race conditions and resource leaks.
I'd be glad to work on testing and opening a PR to asyncio if needed (while giving Benjamin credit for the patch of course). |