[New-bugs-announce] [issue35635] asyncio.create_subprocess_exec() only works in main thread
report at bugs.python.org
Tue Jan 1 21:07:20 EST 2019
New submission from Stefan Seefeld <stefan at seefeld.name>:
This is an addendum to issue35621:
To be able to call `asyncio.create_subprocess_exec()` from another thread, A separate event loop needs to be created. To make the child watcher aware of this new loop, I have to call `asyncio.get_child_watcher().attach_loop(loop)`. However, in the current implementation this call needs to be made by the main thread (or else the `signal` module will complain as handlers may only be registered in the main thread).
So, to work around the above limitations, the following workflow needs to be used:
1) create a new loop in the main thread
2) attach it to the child watcher
3) spawn a worker thread
4) set the previously created event loop as default loop
After that, I can run `asyncio.create_subprocess_exec()` in the worker thread. However, I suppose the worker thread will be the only thread able to call that function, given the child watcher's limitation to a single loop.
Am I missing something ? Given the complexity of this, I would expect this to be better documented in the sections explaining how `asyncio.subprocess` and `threading` interact.
nosy: asvetlov, stefan, yselivanov
title: asyncio.create_subprocess_exec() only works in main thread
Python tracker <report at bugs.python.org>
More information about the New-bugs-announce