o
    OZh5.                     @   sf  g d Z ddlZddlZddlZzddlZW n ey#   ddlZY nw ddlZddlm	Z	 ddlm
Z
 ddlmZ z
ddlmZmZ W n eyc   z
ddlmZmZ W n ey`   edw Y nw eed	\ZZejj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eZG dd deZG dd deZG dd dejZdS ))LockRLock	SemaphoreBoundedSemaphore	ConditionEvent    N   )context)process)util)SemLock
sem_unlinkzThis platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.   c                   @   s\   e Zd Ze Z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 )r   c             	   C   s   |d u r	t j }| }tjdkp|dk}tdD ]}zt|||| 	 | }| _
W n	 ty5   Y qw  ntdtd|j  |   tjdkrWdd }	t| |	 | j
jd urydd	lm}
 |
| j
jd
 tj| tj| j
jfdd d S d S )Nwin32forkd   zcannot find name for semaphorezcreated semlock with handle %sc                 S   s   | j   d S N)_semlock_after_fork)obj r   O/var/www/html/lang_env/lib/python3.10/site-packages/multiprocess/synchronize.pyr   M   s   z%SemLock.__init__.<locals>._after_forkr   )register	semaphorer   )Zexitpriority)r	   Z_default_contextZget_contextZget_start_methodsysplatformrange_multiprocessingr   
_make_namer   FileExistsErrorr   debughandle_make_methodsZregister_after_forknameresource_trackerr   ZFinalize_cleanup)selfkindvaluemaxvaluectxr#   Z
unlink_nowislr   r   r   r   r   __init__8   s6   


zSemLock.__init__c                 C   s"   ddl m} t|  || d d S )Nr   )
unregisterr   )r$   r.   r   )r#   r.   r   r   r   r%   Z   s   zSemLock._cleanupc                 C      | j j| _| j j| _d S r   )r   acquirereleaser&   r   r   r   r"   `      
zSemLock._make_methodsc                 C   
   | j  S r   )r   	__enter__r2   r   r   r   r5   d      
zSemLock.__enter__c                 G      | j j| S r   )r   __exit__r&   argsr   r   r   r8   g      zSemLock.__exit__c                 C   sD   t |  | j}tjdkrt  |j}n|j}||j|j	|j
fS )Nr   )r	   assert_spawningr   r   r   Zget_spawning_popenZduplicate_for_childr!   r'   r)   r#   )r&   r,   hr   r   r   __getstate__j   s   

zSemLock.__getstate__c                 C   s,   t jj| | _td|d   |   d S )Nz recreated blocker with handle %rr   )r   r   Z_rebuildr   r   r    r"   r&   stater   r   r   __setstate__s   s   zSemLock.__setstate__c                   C   s   dt  jd ttjf S )Nz%s-%sZ	semprefix)r
   current_process_confignextr   _randr   r   r   r   r   x   s   zSemLock._make_nameN)__name__
__module____qualname__tempfile_RandomNameSequencerE   r-   staticmethodr%   r"   r5   r8   r>   rA   r   r   r   r   r   r   4   s    "
	r   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
r   r   c                C   s   t j| t|t|d d S Nr*   )r   r-   	SEMAPHORESEM_VALUE_MAXr&   r(   r*   r   r   r   r-         zSemaphore.__init__c                 C   r4   r   )r   
_get_valuer2   r   r   r   	get_value   r6   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   rR   	Exception	__class__rF   r&   r(   r   r   r   __repr__   s   zSemaphore.__repr__Nr   )rF   rG   rH   r-   rS   rX   r   r   r   r   r      s    
r   c                   @   s   e Zd ZdddZdd ZdS )r   r   c                C   s   t j| t|||d d S rL   r   r-   rN   rP   r   r   r   r-      rQ   zBoundedSemaphore.__init__c                 C   s<   z| j  }W n ty   d}Y nw d| jj|| j jf S )NrT   z<%s(value=%s, maxvalue=%s)>)r   rR   rU   rV   rF   r)   rW   r   r   r   rX      s   zBoundedSemaphore.__repr__NrY   rF   rG   rH   r-   rX   r   r   r   r   r      s    
r   c                   @      e Zd Zdd Zdd ZdS )r   c                C      t j| tdd|d d S Nr   rM   rZ   r&   r*   r   r   r   r-      rQ   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SomeOtherProcessrT   z<%s(owner=%s)>)r   _is_miner
   rB   r#   	threadingcurrent_threadrR   _countrU   rV   rF   )r&   r#   r   r   r   rX      s    

zLock.__repr__Nr[   r   r   r   r   r          r   c                   @   r\   )r   c                C   r]   r^   )r   r-   RECURSIVE_MUTEXr_   r   r   r   r-      rQ   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 )
Nr`   ra   r   )rb   r   r   )rc   nonzero)rd   rk   )rT   rT   <%s(%s, %s)>)r   re   r
   rB   r#   rf   rg   rh   rR   rU   rV   rF   )r&   r#   countr   r   r   rX      s    



zRLock.__repr__Nr[   r   r   r   r   r      ri   r   c                   @   sl   e 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dZdd ZdddZdS )r   Nc                C   s>   |p|  | _|d| _|d| _|d| _|   d S Nr   )r   _lockr   _sleeping_count_woken_count_wait_semaphorer"   )r&   lockr*   r   r   r   r-      s
   zCondition.__init__c                 C   s   t |  | j| j| j| jfS r   )r	   r<   ro   rp   rq   rr   r2   r   r   r   r>      s   
zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )ro   rp   rq   rr   r"   r?   r   r   r   rA      s   
zCondition.__setstate__c                 C   r4   r   )ro   r5   r2   r   r   r   r5      r6   zCondition.__enter__c                 G   r7   r   )ro   r8   r9   r   r   r   r8      r;   zCondition.__exit__c                 C   r/   r   )ro   r0   r1   r2   r   r   r   r"      r3   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 )NrT   rl   )rp   r   rR   rq   rU   rV   rF   ro   )r&   Znum_waitersr   r   r   rX      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)
ro   r   re   rp   r1   rh   r   rr   r0   rq   )r&   timeoutrm   r+   r   r   r   wait   s"   


zCondition.waitr   c                 C   s   | j j s
J d| jdrJ d| jdr,| jd}|s&J d| jdsd}||k rK| jdrK| j  |d7 }||k rK| jds8|rht|D ]}| j  qQ| jdrj	 | jds_d S d S d S )Nzlock is not ownedFz<notify: Should not have been able to acquire _wait_semaphorez>notify: Bug in sleeping_count.acquire- res should not be Falser   r   )	ro   r   re   rr   r0   rq   rp   r1   r   )r&   nresZsleepersr+   r   r   r   notify  s.   
zCondition.notifyc                 C   s   | j tjd d S )N)rv   )rx   r   maxsizer2   r   r   r   
notify_all.  s   zCondition.notify_allc                 C   sz   | }|r|S |d urt tdtj | }nd }d }|s;|d ur1|t tdtj  }|dkr1	 |S | | | }|r|S )N	monotonicr   )getattrtimeru   )r&   	predicatert   resultendtimewaittimer   r   r   wait_for1  s"   
zCondition.wait_forr   rY   )rF   rG   rH   r-   r>   rA   r5   r8   r"   rX   ru   rx   rz   r   r   r   r   r   r      s    


r   c                   @   s6   e Zd Zdd Zdd Zdd Zdd Zdd
dZd	S )r   c                C   s    | | | _|d| _d S rn   )r   r   _condr   _flagr_   r   r   r   r-   I  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   r0   r1   r2   r   r   r   is_setM  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   r0   r1   rz   r2   r   r   r   setT  s
   
"z	Event.setc                 C   s8   | j  | jd W d    d S 1 sw   Y  d S r   )r   r   r0   r2   r   r   r   clearZ  s   "zEvent.clearNc                 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   r0   r1   ru   )r&   rt   r   r   r   ru   ^  s   
	$z
Event.waitr   )rF   rG   rH   r-   r   r   r   ru   r   r   r   r   r   G  s    r   c                   @   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 )BarrierNc          	      C   sR   dd l }ddlm} ||dd }| }| |||||f d| _d| _d S )Nr   r   )BufferWrapperr+   r   )structheapr   calcsizer   rA   _staterh   )	r&   partiesactionrt   r*   r   r   wrapperZcondr   r   r   r-   p  s   
zBarrier.__init__c                 C   s.   |\| _ | _| _| _| _| j d| _d S )Nr+   )_parties_action_timeoutr   _wrapperZcreate_memoryviewcast_arrayr?   r   r   r   rA   y  s   zBarrier.__setstate__c                 C   s   | j | j| j| j| jfS r   )r   r   r   r   r   r2   r   r   r   r>   ~  s   zBarrier.__getstate__c                 C   
   | j d S rn   r   r2   r   r   r   r        
zBarrier._statec                 C      || j d< d S rn   r   rW   r   r   r   r        c                 C   r   Nr   r   r2   r   r   r   rh     r   zBarrier._countc                 C   r   r   r   rW   r   r   r   rh     r   )NN)
rF   rG   rH   r-   rA   r>   propertyr   setterrh   r   r   r   r   r   n  s    
	


r   )__all__rf   r   rI   Z_multiprocessr   ImportErrorr}    r	   r
   r   r   r   listr   rj   rN   rO   objectr   r   r   r   r   r   r   r   r   r   r   <module>   sB   	Mo'