diff options
Diffstat (limited to 'Lib/asyncio/threads.py')
-rw-r--r-- | Lib/asyncio/threads.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Lib/asyncio/threads.py b/Lib/asyncio/threads.py index 2f40467..51e0ba9 100644 --- a/Lib/asyncio/threads.py +++ b/Lib/asyncio/threads.py @@ -1,6 +1,7 @@ """High-level support for working with threads in asyncio""" import functools +import contextvars from . import events @@ -12,10 +13,13 @@ async def to_thread(func, /, *args, **kwargs): """Asynchronously run function *func* in a separate thread. Any *args and **kwargs supplied for this function are directly passed - to *func*. + to *func*. Also, the current :class:`contextvars.Context` is propogated, + allowing context variables from the main thread to be accessed in the + separate thread. Return an asyncio.Future which represents the eventual result of *func*. """ loop = events.get_running_loop() - func_call = functools.partial(func, *args, **kwargs) + ctx = contextvars.copy_context() + func_call = functools.partial(ctx.run, func, *args, **kwargs) return await loop.run_in_executor(None, func_call) |