New submission from Stefan Seefeld <ste...@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.

----------
components: asyncio
messages: 332855
nosy: asvetlov, stefan, yselivanov
priority: normal
severity: normal
status: open
title: asyncio.create_subprocess_exec() only works in main thread
type: behavior

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

Reply via email to