planning towards supporting fully mixed sync/async hook calling
RonnyPfannschmidt opened this issue · 4 comments
cc @simonw
this is a rough outline of supporting async hook calls and awaitable results in
the starting point will be a async hook caller that will call sync and async hook, deferring all awaitables to the event loop
nesting like async->sync->async
will trigger failures when awaitables are encountered in the inner loop
the next level will be deferring all sync calls to a thread executor
any sync call that triggers a awaitable, will steal one thread of that pool , this is considered acceptable as execution is typically expected to be fairly non-concurrent (based on pytest)
a own threadpool with a maxium size of 10 ? shal be used (this accounts for the expectation that hooks run in order and should not nest to arbitrary levels)
nonblocking sync hooks may be marked as nonblocking
in which case they may run in the mainloop, as before nesting async into sync will trigger errros
the primary use case for nonblocking sync hooks is to support being nested into other legacy hooks without causing issues but transparently working with modern hook calls
Why is mixing sync and async hooks needed?
To migrate ecosystems
Is this intended to support only asyncio
, or open to other async
libraries?
Any async, end goal here is to prepare the possible recoloring of the pytest internals