� !A?h � �0 � d Z ddlZddlZddlmZ dZd� ZdS )z6High-level support for working with threads in asyncio� N� )�events)� to_threadc � �� K � t j � � }t j � � }t j |j | g|�R i |��}|� d|� � � d{V ��S )a� 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*. N)r �get_running_loop�contextvars�copy_context� functools�partial�run�run_in_executor)�func�args�kwargs�loop�ctx� func_calls �