o
    $Th                     @   s*   d dl mZ d dlmZ G dd dZdS )    )Lock)Callablec                   @   s4   e Zd ZdZd	ddZdeg df defddZdS )
OncezExecute a function exactly once and block all callers until the function returns

    Same as golang's `sync.Once <https://pkg.go.dev/sync#Once>`_
    returnNc                 C   s   t  | _d| _d S )NF)r   _lock_done)self r	   Y/home/air/segue/gemini/back/venv/lib/python3.10/site-packages/opentelemetry/util/_once.py__init__   s   
zOnce.__init__funcc                 C   sZ   | j rdS | j | j s|  d| _ 	 W d   dS W d   dS 1 s&w   Y  dS )zExecute ``func`` if it hasn't been executed or return.

        Will block until ``func`` has been called by one thread.

        Returns:
            Whether or not ``func`` was executed in this call
        FTN)r   r   )r   r   r	   r	   r
   do_once   s   

zOnce.do_once)r   N)__name__
__module____qualname____doc__r   r   boolr   r	   r	   r	   r
   r      s    
r   N)	threadingr   typingr   r   r	   r	   r	   r
   <module>   s   