aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python3/src/Lib/asyncio/threads.py
blob: cce2f05e1074c1878a66f261c77f5be5e774eb6a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"""High-level support for working with threads in asyncio""" 
 
import functools 
import contextvars 
 
from . import events 
 
 
__all__ = "to_thread", 
 
 
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*. Also, the current :class:`contextvars.Context` is propagated, 
    allowing context variables from the main thread to be accessed in the 
    separate thread. 
 
    Return a coroutine that can be awaited to get the eventual result of *func*. 
    """ 
    loop = events.get_running_loop() 
    ctx = contextvars.copy_context() 
    func_call = functools.partial(ctx.run, func, *args, **kwargs) 
    return await loop.run_in_executor(None, func_call)