mirror of
				https://github.com/python/cpython.git
				synced 2025-10-29 12:44:56 +00:00 
			
		
		
		
	 2efa78180d
			
		
	
	
		2efa78180d
		
			
		
	
	
	
	
		
			
			(cherry picked from commit 4b4227b907)
Co-authored-by: Jesús Cea <jcea@jcea.es>
Co-authored-by: Jesús Cea <jcea@jcea.es>
		
	
			
		
			
				
	
	
		
			25 lines
		
	
	
	
		
			790 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
	
		
			790 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| """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)
 |