o
    e5.                     @   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win32Zforkd   zcannot find name for semaphorezcreated semlock with handle %sc                 S   s   | j   d S N)_semlock_after_fork)obj r   HD:\Projects\ConvertPro\env\Lib\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__r1   r   r   r   r4   d      
zSemLock.__enter__c                 G      | j j| S r   )r   __exit__r%   argsr   r   r   r7   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_RandomNameSequencerD   r,   staticmethodr$   r!   r4   r7   r=   r@   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   r3   r   )r   
_get_valuer1   r   r   r   	get_value   r5   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   rQ   	Exception	__class__rE   r%   r'   r   r   r   __repr__   s   zSemaphore.__repr__Nr   )rE   rF   rG   r,   rR   rW   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 rK   r   r,   rM   rO   r   r   r   r,      rP   zBoundedSemaphore.__init__c                 C   s<   z| j  }W n ty   d}Y nw d| jj|| j jf S )NrS   z<%s(value=%s, maxvalue=%s)>)r   rQ   rT   rU   rE   r(   rV   r   r   r   rW      s   zBoundedSemaphore.__repr__NrX   rE   rF   rG   r,   rW   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   rL   rY   r%   r)   r   r   r   r,      rP   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SomeOtherProcessrS   z<%s(owner=%s)>)r   _is_miner
   rA   r"   	threadingcurrent_threadrQ   _countrT   rU   rE   )r%   r"   r   r   r   rW      s    

zLock.__repr__NrZ   r   r   r   r   r          r   c                   @   r[   )r   c                C   r\   r]   )r   r,   RECURSIVE_MUTEXr^   r   r   r   r,      rP   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_   r`   r   )ra   r   r   )rb   nonzero)rc   rj   )rS   rS   <%s(%s, %s)>)r   rd   r
   rA   r"   re   rf   rg   rQ   rT   rU   rE   )r%   r"   countr   r   r   rW      s    



zRLock.__repr__NrZ   r   r   r   r   r      rh   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;   rn   ro   rp   rq   r1   r   r   r   r=      s   
zCondition.__getstate__c                 C   s    |\| _ | _| _| _|   d S r   )rn   ro   rp   rq   r!   r>   r   r   r   r@      s   
zCondition.__setstate__c                 C   r3   r   )rn   r4   r1   r   r   r   r4      r5   zCondition.__enter__c                 G   r6   r   )rn   r7   r8   r   r   r   r7      r:   zCondition.__exit__c                 C   r.   r   )rn   r/   r0   r1   r   r   r   r!      r2   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 )NrS   rk   )ro   r   rQ   rp   rT   rU   rE   rn   )r%   Znum_waitersr   r   r   rW      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)
rn   r   rd   ro   r0   rg   r   rq   r/   rp   )r%   timeoutrl   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   )	rn   r   rd   rq   r/   rp   ro   r0   r   )r%   nresZsleepersr*   r   r   r   notify  s.   
zCondition.notifyc                 C   s   | j tjd d S )N)ru   )rw   r   maxsizer1   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timert   )r%   	predicaters   resultendtimewaittimer   r   r   wait_for1  s"   
zCondition.wait_forr   rX   )rE   rF   rG   r,   r=   r@   r4   r7   r!   rW   rt   rw   ry   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 rm   )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   r/   r0   r1   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   r/   r0   ry   r1   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   r/   r1   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   r/   r0   rt   )r%   rs   r   r   r   rt   ^  s   
	$z
Event.waitr   )rE   rF   rG   r,   r   r   r   rt   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   r@   _staterg   )	r%   partiesactionrs   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   r@   y  s   zBarrier.__setstate__c                 C   s   | j | j| j| j| jfS r   )r   r   r   r   r   r1   r   r   r   r=   ~  s   zBarrier.__getstate__c                 C   
   | j d S rm   r   r1   r   r   r   r        
zBarrier._statec                 C      || j d< d S rm   r   rV   r   r   r   r        c                 C   r   Nr   r   r1   r   r   r   rg     r   zBarrier._countc                 C   r   r   r   rV   r   r   r   rg     r   )NN)
rE   rF   rG   r,   r@   r=   propertyr   setterrg   r   r   r   r   r   n  s    
	


r   )__all__re   r   rH   Z_multiprocessr   ImportErrorr|    r	   r
   r   r   r   listr   ri   rM   rN   objectr   r   r   r   r   r   r   r   r   r   r   <module>   sB   	Mo'