File: //usr/local/lib/python3.10/dist-packages/sqlalchemy/util/__pycache__/concurrency.cpython-310.pyc
o
���g� �
@ sZ d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ dZdZ zd dl
Z
W n eyF Z z
e
e�Z W Y dZ[n1dZ[ww dZd d
lmZ d dlmZ d dlmZ d d
lmZ d dlmZ d dlmZ d dlmZ ed�ZG dd� d�Zejs�es�dd� Zdd� Zdd� Zdd� Zdd� Zdd� Zd d!� Zd"d#� Zd$d%� ZdS dS dS )&� )�annotationsN)�Any)�Callable)� Coroutine)�TypeVarFT� )�
await_only)�await_fallback)�in_greenlet)�greenlet_spawn)�is_exit_exception)�AsyncAdaptedLock)�_Runner�_Tc @ s8 e Zd ZdZddd�Zddd
�Zddd�Zddd�ZdS )�
_AsyncUtilz&Asyncio util for test suite/ util only�return�Nonec C s t rt� | _d S d S �N)�
have_greenletr �runner��self� r �F/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/concurrency.py�__init__) s �z_AsyncUtil.__init__�fn�&Callable[..., Coroutine[Any, Any, _T]]�argsr �kwargsr c O s | j �||i |���S )zRun coroutine on the loop)r �run�r r r r r r r r - s z_AsyncUtil.run�Callable[..., _T]c O sL t r| j�� �� r||i |��S | j�t|g|�R i |���S ||i |��S )z3Run sync function in greenlet. Support nested calls)r r �get_loop�
is_runningr r r r r r �run_in_greenlet6 s
z_AsyncUtil.run_in_greenletc C s t r | j�� d S d S r )r r �closer r r r r% B s �z_AsyncUtil.closeN)r r )r r r r r r r r )r r! r r r r r r )�__name__�
__module__�__qualname__�__doc__r r r$ r% r r r r r &