o
    Df2                     @   sr  d dl Z d dlZd dlZd dlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 d dlmZ g dZe
  eed	\ZZe	jjZze	jjZW n eyf   zd d
lmZ W n eyc   dZY nw Y nw dd ZG dd dZG dd deZG dd deZG dd deZG dd deZG dd dZG dd dZeedrG dd dej Z dS G dd dZ dS )    N   )context)process)util)	_billiardensure_SemLock)	monotonic)LockRLock	SemaphoreBoundedSemaphore	ConditionEvent   )
sem_unlinkc                 C   s   z| j W S  ty   Y d S w N)nameAttributeError)sl r   M/home/ubuntu/webapp/venv/lib/python3.10/site-packages/billiard/synchronize.py_semname4   s
   r   c                   @   s^   e Zd Ze ZdddZedd Zdd Z	dd	 Z
d
d Zdd Zdd Zedd ZdS )SemLockNc                 C   sL  |d u r	t j }| }tjdkp|dk}trZtdD ]2}zt	|||| 
 | }| _W n ttfyL }	 zt|	dd tjkrB W Y d }	~	qd }	~	ww  n
td}	tj|	_|	n
t	||| }| _td|j |   trtjdkrdd }
t| |
 t| jd urd	d
lm} || jj tj| t	j| jjfdd d S d S d S )Nwin32forkd   errnozcannot find file for semaphorezcreated semlock with handle %sc                 S   s   | j   d S r   )_semlock_after_fork)objr   r   r   r   [   s   z%SemLock.__init__.<locals>._after_forkr   )registerr   )exitpriority)r   _default_contextget_contextget_start_methodsysplatformr   ranger   r   
_make_namer   OSErrorIOErrorgetattrr   EEXISTr   debughandle_make_methodsregister_after_forkr   semaphore_trackerr    r   Finalize_cleanup)selfkindvaluemaxvaluectxr   
unlink_nowir   excr   r    r   r   r   __init__>   sH   


zSemLock.__init__c                 C   s    ddl m} t|  ||  d S )Nr   )
unregister)r1   r=   r   )r   r=   r   r   r   r3   h   s   zSemLock._cleanupc                 C      | j j| _| j j| _d S r   )r   acquirereleaser4   r   r   r   r/   n      
zSemLock._make_methodsc                 C   
   | j  S r   )r   	__enter__rA   r   r   r   rD   r      
zSemLock.__enter__c                 G      | j j| S r   )r   __exit__r4   argsr   r   r   rG   u      zSemLock.__exit__c                 C   sh   t |  | j}tjdkrt  |j}n|j}||j|j	f}z	||j
f7 }W |S  ty3   Y |S w )Nr   )r   assert_spawningr   r%   r&   get_spawning_popenduplicate_for_childr.   r5   r7   r   r   )r4   r   hstater   r   r   __getstate__x   s   

zSemLock.__getstate__c                 C   s*   t jj| | _td|d  |   d S )Nz recreated blocker with handle %rr   )r   r   _rebuildr   r   r-   r/   r4   rO   r   r   r   __setstate__   s   zSemLock.__setstate__c                   C   s   dt  jd ttjf S )Nz%s-%s	semprefix)r   current_process_confignextr   _randr   r   r   r   r(      s   zSemLock._make_namer   )__name__
__module____qualname__tempfile_RandomNameSequencerX   r<   staticmethodr3   r/   rD   rG   rP   rS   r(   r   r   r   r   r   ;   s    
*
r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
r   r   Nc                 C   s   t j| t|t|d d S Nr8   )r   r<   	SEMAPHORESEM_VALUE_MAXr4   r6   r8   r   r   r   r<         zSemaphore.__init__c                 C   rC   r   )r   
_get_valuerA   r   r   r   	get_value   rE   zSemaphore.get_valuec                 C   s6   z| j  }W n ty   d}Y nw d| jj|f S )Nunknownz<%s(value=%s)>)r   re   	Exception	__class__rY   r4   r6   r   r   r   __repr__   s   zSemaphore.__repr__r   N)rY   rZ   r[   r<   rf   rk   r   r   r   r   r      s    
r   c                   @   s   e Zd ZdddZdd ZdS )r   r   Nc                 C   s   t j| t|||d d S r_   r   r<   ra   rc   r   r   r   r<      rd   zBoundedSemaphore.__init__c                 C   s<   z| j  }W n ty   d}Y nw d| jj|| j jf S )Nrg   z<%s(value=%s, maxvalue=%s)>)r   re   rh   ri   rY   r7   rj   r   r   r   rk      s   zBoundedSemaphore.__repr__rl   )rY   rZ   r[   r<   rk   r   r   r   r   r      s    
r   c                   @   "   e Zd ZdZdddZdd ZdS )r	   z
    Non-recursive lock.
    Nc                 C      t j| tdd|d d S Nr   r`   rm   r4   r8   r   r   r   r<      rd   zLock.__init__c                 C   s   z3| j  rt j}t jdkr|dt j 7 }n| j  dkr&d}n| j  dkr0d}nd}W n t	y>   d}Y nw d	| j
j|f S )
N
MainThread|r   Noner   SomeOtherThreadSomeOtherProcessrg   z<%s(owner=%s)>)r   _is_miner   rU   r   	threadingcurrent_threadre   _countrh   ri   rY   )r4   r   r   r   r   rk      s    

zLock.__repr__r   rY   rZ   r[   __doc__r<   rk   r   r   r   r   r	          
r	   c                   @   rn   )r
   z
    Recursive lock
    Nc                 C   ro   rp   )r   r<   RECURSIVE_MUTEXrq   r   r   r   r<      rd   zRLock.__init__c                 C   s   z>| j  r!t j}t jdkr|dt j 7 }| j  }n| j  dkr-d\}}n| j  dkr9d\}}nd\}}W n t	yK   d\}}Y nw d	| j
j||f S )
Nrr   rs   r   )rt   r   r   )ru   nonzero)rv   r   )rg   rg   <%s(%s, %s)>)r   rw   r   rU   r   rx   ry   rz   re   rh   ri   rY   )r4   r   countr   r   r   rk      s    



zRLock.__repr__r   r{   r   r   r   r   r
      r}   r
   c                   @   sn   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dddZdd Zdd ZdddZdS )r   z
    Condition variable
    Nc                 C   sF   |sJ |p	|  | _|d| _|d| _|d| _|   d S Nr   )r
   _lockr   _sleeping_count_woken_count_wait_semaphorer/   )r4   lockr8   r   r   r   r<      s   zCondition.__init__c                 C   s   t |  | j| j| j| jfS r   )r   rK   r   r   r   r   rA   r   r   r   rP      s   
zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )r   r   r   r   r/   rR   r   r   r   rS      s   
zCondition.__setstate__c                 C   rC   r   )r   rD   rA   r   r   r   rD      rE   zCondition.__enter__c                 G   rF   r   )r   rG   rH   r   r   r   rG      rJ   zCondition.__exit__c                 C   r>   r   )r   r?   r@   rA   r   r   r   r/      rB   zCondition._make_methodsc                 C   sH   z| j j | jj  }W n ty   d}Y nw d| jj| j|f S )Nrg   r   )r   r   re   r   rh   ri   rY   r   )r4   num_waitersr   r   r   rk     s   

zCondition.__repr__c              	   C   s   | j j s
J d| j  | j j }t|D ]}| j   qz| jd|W | j	  t|D ]}| j   q2S | j	  t|D ]}| j   qDw )Nz,must acquire() condition before using wait()T)
r   r   rw   r   r@   rz   r'   r   r?   r   )r4   timeoutr   r:   r   r   r   wait  s"   


zCondition.waitc                 C   s   | j j s
J d| jdrJ | jdr(| jd}|s"J | jds| jdr@| j  | j  | jd d S d S )Nlock is not ownedF)r   r   rw   r   r?   r   r   r@   )r4   resr   r   r   notify#  s   

zCondition.notifyc                 C   s   | j j s
J d| jdrJ | jdr(| jd}|s"J | jdsd}| jdr?| j  |d7 }| jds0|r\t|D ]}| j  qE| jdr^	 | jdsSd S d S d S )Nr   Fr   r   )	r   r   rw   r   r?   r   r   r@   r'   )r4   r   sleepersr:   r   r   r   
notify_all4  s&   
zCondition.notify_allc                 C   sf   | }|r|S |d urt  | }nd }d }|s1|d ur'|t   }|dkr'	 |S | | | }|r|S r   )r   r   )r4   	predicater   resultendtimewaittimer   r   r   wait_forK  s"   

zCondition.wait_for)NNr   )rY   rZ   r[   r|   r<   rP   rS   rD   rG   r/   rk   r   r   r   r   r   r   r   r   r      s    

	r   c                   @   s8   e Zd ZdddZdd Zdd Zdd	 Zdd
dZdS )r   Nc                 C   s(   |sJ | | | _|d| _d S r   )r   r	   _condr   _flagrq   r   r   r   r<   `  s   zEvent.__init__c                 C   sV   | j  | jdr| j  	 W d    dS 	 W d    dS 1 s$w   Y  d S NFT)r   r   r?   r@   rA   r   r   r   is_sete  s   
$zEvent.is_setc                 C   sL   | j  | jd | j  | j   W d    d S 1 sw   Y  d S NF)r   r   r?   r@   r   rA   r   r   r   setl  s
   
"z	Event.setc                 C   s8   | j  | jd W d    d S 1 sw   Y  d S r   )r   r   r?   rA   r   r   r   clearr  s   "zEvent.clearc                 C   sz   | j 0 | jdr| j  n| j | | jdr*| j  	 W d    dS 	 W d    dS 1 s6w   Y  d S r   )r   r   r?   r@   r   )r4   r   r   r   r   r   v  s   
	$z
Event.waitr   )rY   rZ   r[   r<   r   r   r   r   r   r   r   r   r   ^  s    
r   Barrierc                   @   sZ   e Zd ZdddZdd Zdd Zedd	 Zejd
d	 Zedd Z	e	jdd Z	dS )r   Nc           	      C   sZ   |sJ dd l }ddlm} ||dd }| }| |||||f d| _d| _d S )Nr   r   )BufferWrapperr:   r   )structheapr   calcsizer   rS   _staterz   )	r4   partiesactionr   r8   r   r   wrappercondr   r   r   r<     s   
Barrier.__init__c                 C   s.   |\| _ | _| _| _| _| j d| _d S )Nr:   )_parties_action_timeoutr   _wrappercreate_memoryviewcast_arrayrR   r   r   r   rS     s   zBarrier.__setstate__c                 C   s   | j | j| j| j| jfS r   )r   r   r   r   r   rA   r   r   r   rP     s   zBarrier.__getstate__c                 C   
   | j d S r   r   rA   r   r   r   r        
zBarrier._statec                 C      || j d< d S r   r   rj   r   r   r   r        c                 C   r   Nr   r   rA   r   r   r   rz     r   zBarrier._countc                 C   r   r   r   rj   r   r   r   rz     r   )NNN)
rY   rZ   r[   r<   rS   rP   propertyr   setterrz   r   r   r   r   r     s    




c                   @   s   e Zd Zdd ZdS )r   c                 O   s   t d)NzBarrier only supported on Py3)NotImplementedError)r4   rI   kwargsr   r   r   r<     s   r   N)rY   rZ   r[   r<   r   r   r   r   r     s    )!r   r%   r\   rx    r   r   r   _extr   r   timer   __all__listr'   r~   ra   r   rb   r   r   _multiprocessingImportErrorr   r   r   r	   r
   r   r   hasattrr   r   r   r   r   <module>   sD   	V|
)(