
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \Þ<  ã               @   s´   d ddddg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 G dd„ dƒZG dd„ dƒZ	G dd „ d e	ƒZ
G dd„ dƒZG dd„ de	ƒZG dd„ de	ƒZG dd„ deƒZdS )ÚLockÚEventÚ	ConditionÚ	SemaphoreÚBoundedSemaphoreé    Né   )Úcompat)Úevents)Úfutures)Ú	coroutinec               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_ContextManagerc             C   s
   || _ d S )N)Ú_lock)ÚselfÚlock© r   ú%/usr/lib64/python3.6/asyncio/locks.pyÚ__init__   s    z_ContextManager.__init__c             C   s   d S )Nr   )r   r   r   r   Ú	__enter__   s    z_ContextManager.__enter__c             G   s   z| j jƒ  W d d | _ X d S )N)r   Úrelease)r   Úargsr   r   r   Ú__exit__$   s    z_ContextManager.__exit__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r      s   r   c               @   sN   e Zd Zdd„ Zdd„ Zedd„ ƒZejrJdd„ Z	ed	d
„ ƒZ
edd„ ƒZdS )Ú_ContextManagerMixinc             C   s   t dƒ‚d S )Nz9"yield from" should be used as context manager expression)ÚRuntimeError)r   r   r   r   r   ,   s    z_ContextManagerMixin.__enter__c             G   s   d S )Nr   )r   r   r   r   r   r   0   s    z_ContextManagerMixin.__exit__c             c   s   | j ƒ E d H  t| ƒS )N)Úacquirer   )r   r   r   r   Ú__iter__5   s    z_ContextManagerMixin.__iter__c             c   s   | j ƒ E d H  t| ƒS )N)r   r   )r   r   r   r   Ú	__await__H   s    z_ContextManagerMixin.__await__c             c   s   | j ƒ E d H  d S )N)r   )r   r   r   r   Ú
__aenter__M   s    z_ContextManagerMixin.__aenter__c             C   s   | j ƒ  d S )N)r   )r   Úexc_typeÚexcÚtbr   r   r   Ú	__aexit__T   s    z_ContextManagerMixin.__aexit__N)r   r   r   r   r   r   r   r   ZPY35r   r   r#   r   r   r   r   r   +   s   r   c                   sN   e Zd Zddœdd„Z‡ fdd„Zdd„ Zed	d
„ ƒZdd„ Zdd„ Z	‡  Z
S )r   N)Úloopc            C   s.   t jƒ | _d| _|d k	r || _n
tjƒ | _d S )NF)ÚcollectionsÚdequeÚ_waitersÚ_lockedÚ_loopr	   Úget_event_loop)r   r$   r   r   r   r   �   s
    
zLock.__init__c                sD   t ƒ jƒ }| jrdnd}| jr0dj|t| jƒƒ}dj|dd… |ƒS )NÚlockedÚunlockedz{},waiters:{}z	<{} [{}]>r   éÿÿÿÿ)ÚsuperÚ__repr__r(   r'   ÚformatÚlen)r   ÚresÚextra)Ú	__class__r   r   r/   —   s
    
zLock.__repr__c             C   s   | j S )N)r(   )r   r   r   r   r+   ž   s    zLock.lockedc             c   s�   | j  r&tdd„ | jD ƒƒr&d| _ dS | jjƒ }| jj|ƒ y"z|E d H  W d | jj|ƒ X W n& tjk
r„   | j s~| j	ƒ  ‚ Y nX d| _ dS )Nc             s   s   | ]}|j ƒ V  qd S )N)Ú	cancelled)Ú.0Úwr   r   r   ú	<genexpr>©   s    zLock.acquire.<locals>.<genexpr>T)
r(   Úallr'   r)   Úcreate_futureÚappendÚremover
   ÚCancelledErrorÚ_wake_up_first)r   Úfutr   r   r   r   ¢   s    
zLock.acquirec             C   s"   | j rd| _ | jƒ  ntdƒ‚d S )NFzLock is not acquired.)r(   r>   r   )r   r   r   r   r   À   s    
zLock.releasec             C   s>   yt t| jƒƒ}W n tk
r&   d S X |jƒ s:|jdƒ d S )NT)ÚnextÚiterr'   ÚStopIterationÚdoneÚ
set_result)r   r?   r   r   r   r>   Ñ   s    zLock._wake_up_first)r   r   r   r   r/   r+   r   r   r   r>   Ú__classcell__r   r   )r4   r   r   Y   s   6c                   sN   e Zd Zddœdd„Z‡ fdd„Zdd„ Zd	d
„ Zdd„ Zedd„ ƒZ	‡  Z
S )r   N)r$   c            C   s.   t jƒ | _d| _|d k	r || _n
tjƒ | _d S )NF)r%   r&   r'   Ú_valuer)   r	   r*   )r   r$   r   r   r   r   è   s
    
zEvent.__init__c                sD   t ƒ jƒ }| jrdnd}| jr0dj|t| jƒƒ}dj|dd… |ƒS )NÚsetZunsetz{},waiters:{}z	<{} [{}]>r   r-   )r.   r/   rF   r'   r0   r1   )r   r2   r3   )r4   r   r   r/   ð   s
    
zEvent.__repr__c             C   s   | j S )N)rF   )r   r   r   r   Úis_set÷   s    zEvent.is_setc             C   s2   | j s.d| _ x | jD ]}|jƒ s|jdƒ qW d S )NT)rF   r'   rC   rD   )r   r?   r   r   r   rG   û   s
    z	Event.setc             C   s
   d| _ d S )NF)rF   )r   r   r   r   Úclear  s    zEvent.clearc             c   sB   | j r
dS | jjƒ }| jj|ƒ z|E d H  dS | jj|ƒ X d S )NT)rF   r)   r:   r'   r;   r<   )r   r?   r   r   r   Úwait  s    

z
Event.wait)r   r   r   r   r/   rH   rG   rI   r   rJ   rE   r   r   )r4   r   r   ß   s   	c                   sV   e Zd Zdddœdd„Z‡ fdd„Zedd„ ƒZed	d
„ ƒZddd„Zdd„ Z	‡  Z
S )r   N)r$   c            C   sp   |d k	r|| _ n
tjƒ | _ |d kr0t| j d�}n|j | j k	rDtdƒ‚|| _|j| _|j| _|j| _t	j
ƒ | _d S )N)r$   z"loop argument must agree with lock)r)   r	   r*   r   Ú
ValueErrorr   r+   r   r   r%   r&   r'   )r   r   r$   r   r   r   r   +  s    
zCondition.__init__c                sF   t ƒ jƒ }| jƒ rdnd}| jr2dj|t| jƒƒ}dj|dd… |ƒS )Nr+   r,   z{},waiters:{}z	<{} [{}]>r   r-   )r.   r/   r+   r'   r0   r1   )r   r2   r3   )r4   r   r   r/   >  s
    
zCondition.__repr__c             c   sœ   | j ƒ stdƒ‚| jƒ  z8| jjƒ }| jj|ƒ z|E d H  dS | jj|ƒ X W d d}x4y| jƒ E d H  P W qX t	j
k
r†   d}Y qXX qXW |r–t	j
‚X d S )Nzcannot wait on un-acquired lockTF)r+   r   r   r)   r:   r'   r;   r<   r   r
   r=   )r   r?   r5   r   r   r   rJ   E  s&    

zCondition.waitc             c   s(   |ƒ }x|s"| j ƒ E d H  |ƒ }qW |S )N)rJ   )r   Z	predicateÚresultr   r   r   Úwait_fork  s
    
zCondition.wait_forr   c             C   sL   | j ƒ stdƒ‚d}x2| jD ](}||kr*P |jƒ s|d7 }|jdƒ qW d S )Nz!cannot notify on un-acquired lockr   r   F)r+   r   r'   rC   rD   )r   ÚnÚidxr?   r   r   r   Únotifyy  s    zCondition.notifyc             C   s   | j t| jƒƒ d S )N)rP   r1   r'   )r   r   r   r   Ú
notify_all‘  s    zCondition.notify_all)N)r   )r   r   r   r   r/   r   rJ   rM   rP   rQ   rE   r   r   )r4   r   r   !  s   
&
c                   sP   e Zd Zdddœdd„Z‡ fdd„Zdd	„ Zd
d„ Zedd„ ƒZdd„ Z	‡  Z
S )r   r   N)r$   c            C   s>   |dk rt dƒ‚|| _tjƒ | _|d k	r0|| _n
tjƒ | _d S )Nr   z$Semaphore initial value must be >= 0)rK   rF   r%   r&   r'   r)   r	   r*   )r   Úvaluer$   r   r   r   r   ©  s    
zSemaphore.__init__c                sN   t ƒ jƒ }| jƒ rdn
dj| jƒ}| jr:dj|t| jƒƒ}dj|dd… |ƒS )Nr+   zunlocked,value:{}z{},waiters:{}z	<{} [{}]>r   r-   )r.   r/   r+   r0   rF   r'   r1   )r   r2   r3   )r4   r   r   r/   ³  s    
zSemaphore.__repr__c             C   s0   x*| j r*| j jƒ }|jƒ s|jd ƒ d S qW d S )N)r'   ÚpopleftrC   rD   )r   Zwaiterr   r   r   Ú_wake_up_next»  s
    

zSemaphore._wake_up_nextc             C   s
   | j dkS )Nr   )rF   )r   r   r   r   r+   Â  s    zSemaphore.lockedc          	   c   sz   xf| j dkrf| jjƒ }| jj|ƒ y|E d H  W q   |jƒ  | j dkr\|jƒ  r\| jƒ  ‚ Y qX qW |  j d8  _ dS )Nr   r   T)rF   r)   r:   r'   r;   Zcancelr5   rT   )r   r?   r   r   r   r   Æ  s    

zSemaphore.acquirec             C   s   |  j d7  _ | jƒ  d S )Nr   )rF   rT   )r   r   r   r   r   Þ  s    zSemaphore.release)r   )r   r   r   r   r/   rT   r+   r   r   r   rE   r   r   )r4   r   r   š  s   
c                   s0   e Zd Zdddœ‡ fdd„Z‡ fdd„Z‡  ZS )	r   r   N)r$   c               s   || _ tƒ j||d� d S )N)r$   )Ú_bound_valuer.   r   )r   rR   r$   )r4   r   r   r   î  s    zBoundedSemaphore.__init__c                s"   | j | jkrtdƒ‚tƒ jƒ  d S )Nz(BoundedSemaphore released too many times)rF   rU   rK   r.   r   )r   )r4   r   r   r   ò  s    zBoundedSemaphore.release)r   )r   r   r   r   r   rE   r   r   )r4   r   r   ç  s   )Ú__all__r%   Ú r   r	   r
   Z
coroutinesr   r   r   r   r   r   r   r   r   r   r   r   Ú<module>   s   . ByM