й¼]š:ã@södddddgZddlZddlmZdd lmZdd lmZdd lmZGd d „d ƒZGdd„dƒZ Gdd„de ƒZ Gdd„dƒZ Gdd„de ƒZ Gdd„de ƒZ Gdd„de ƒZdS)ÚLockÚEventÚ ConditionÚ SemaphoreÚBoundedSemaphoreéNé)Úcompat)Úevents)Úfutures)Ú coroutinec@s4eZdZdd„Zdd„Zdd„ZdS)Ú_ContextManagercCs ||_dS)N)Ú_lock)ÚselfÚlock©rú*/opt/alt/python35/lib64/python3.5/locks.pyÚ__init__sz_ContextManager.__init__cCsdS)Nr)rrrrÚ __enter__sz_ContextManager.__enter__c Gs"z|jjƒWdd|_XdS)N)r Úrelease)rÚargsrrrÚ__exit__$sz_ContextManager.__exit__N)Ú__name__Ú __module__Ú __qualname__rrrrrrrr s   r c@sseZdZdd„Zdd„Zedd„ƒZejrodd„Z ed d „ƒZ ed d „ƒZ d S)Ú_ContextManagerMixincCstdƒ‚dS)Nz9"yield from" should be used as context manager expression)Ú RuntimeError)rrrrr,sz_ContextManagerMixin.__enter__cGsdS)Nr)rrrrrr0sz_ContextManagerMixin.__exit__ccs|jƒEdHt|ƒS)N)Úacquirer )rrrrÚ__iter__5sz_ContextManagerMixin.__iter__ccs|jƒEdHt|ƒS)N)rr )rrrrÚ __await__Hsz_ContextManagerMixin.__await__ccs|jƒEdHdS)N)r)rrrrÚ __aenter__Msz_ContextManagerMixin.__aenter__cCs|jƒdS)N)r)rÚexc_typeÚexcÚtbrrrÚ __aexit__Tsz_ContextManagerMixin.__aexit__N) rrrrrr rrZPY35rrr#rrrrr+s     rcsjeZdZdddd„Z‡fdd†Zdd„Zed d „ƒZd d „Zd d„Z ‡S)rÚloopNcCsCtjƒ|_d|_|dk r0||_ntjƒ|_dS)NF)Ú collectionsÚdequeÚ_waitersÚ_lockedÚ_loopr Úget_event_loop)rr$rrrr�s    z Lock.__init__csbtƒjƒ}|jrdnd}|jrHdj|t|jƒƒ}dj|dd…|ƒS)NÚlockedÚunlockedz {},waiters:{}z <{} [{}]>réÿÿÿÿ)ÚsuperÚ__repr__r(r'ÚformatÚlen)rÚresÚextra)Ú __class__rrr/—s  z Lock.__repr__cCs|jS)N)r()rrrrr+žsz Lock.lockedccs¶|j r3tdd„|jDƒƒr3d|_dS|jjƒ}|jj|ƒzLy|EdHd|_dSWn+tjk rœ|js•|jƒ‚YnXWd|jj |ƒXdS)Ncss|]}|jƒVqdS)N)Ú cancelled)Ú.0Úwrrrú ©szLock.acquire..T) r(Úallr'r)Ú create_futureÚappendr ÚCancelledErrorÚ_wake_up_firstÚremove)rÚfutrrrr¢s&      z Lock.acquirecCs/|jrd|_|jƒn tdƒ‚dS)NFzLock is not acquired.)r(r=r)rrrrrºs   z Lock.releasecCs2x+|jD] }|jƒs |jdƒPq WdS)NT)r'ÚdoneÚ set_result)rr?rrrr=Ës  zLock._wake_up_first) rrrrr/r+r rrr=rr)r4rrYs 6  csjeZdZdddd„Z‡fdd†Zdd„Zd d „Zd d „Zed d„ƒZ ‡S)rr$NcCsCtjƒ|_d|_|dk r0||_ntjƒ|_dS)NF)r%r&r'Ú_valuer)r r*)rr$rrrrÜs    zEvent.__init__csbtƒjƒ}|jrdnd}|jrHdj|t|jƒƒ}dj|dd…|ƒS)NÚsetZunsetz {},waiters:{}z <{} [{}]>rr-)r.r/rBr'r0r1)rr2r3)r4rrr/äs  zEvent.__repr__cCs|jS)N)rB)rrrrÚis_setësz Event.is_setcCsC|js?d|_x*|jD]}|jƒs|jdƒqWdS)NT)rBr'r@rA)rr?rrrrCïs    z Event.setcCs d|_dS)NF)rB)rrrrÚclearûsz Event.clearc csU|jr dS|jjƒ}|jj|ƒz|EdHdSWd|jj|ƒXdS)NT)rBr)r:r'r;r>)rr?rrrÚwaits  z Event.wait) rrrrr/rDrCrEr rFrr)r4rrÓs   csveZdZddddd„Z‡fdd†Zedd„ƒZed d „ƒZd d d „Zdd„Z ‡S)rNr$cCs¦|dk r||_ntjƒ|_|dkrHtd|jƒ}n|j|jk rftdƒ‚||_|j|_|j|_|j|_t j ƒ|_ dS)Nr$z"loop argument must agree with lock) r)r r*rÚ ValueErrorr r+rrr%r&r')rrr$rrrrs        zCondition.__init__csetƒjƒ}|jƒr!dnd}|jrKdj|t|jƒƒ}dj|dd…|ƒS)Nr+r,z {},waiters:{}z <{} [{}]>rr-)r.r/r+r'r0r1)rr2r3)r4rrr/2s  zCondition.__repr__ccs¥|jƒstdƒ‚|jƒzH|jjƒ}|jj|ƒz|EdHdSWd|jj|ƒXWdx0y|jƒEdHPWqpt j k r›YqpXqpWXdS)Nzcannot wait on un-acquired lockT) r+rrr)r:r'r;r>rr r<)rr?rrrrF9s    zCondition.waitccs2|ƒ}x"|s-|jƒEdH|ƒ}q W|S)N)rF)rÚ predicateÚresultrrrÚwait_for[s    zCondition.wait_forrcCsf|jƒstdƒ‚d}xA|jD]6}||kr;P|jƒs(|d7}|jdƒq(WdS)Nz!cannot notify on un-acquired lockrrF)r+rr'r@rA)rÚnÚidxr?rrrÚnotifyis     zCondition.notifycCs|jt|jƒƒdS)N)rMr1r')rrrrÚ notify_all�szCondition.notify_all) rrrrr/r rFrJrMrNrr)r4rrs "csmeZdZddddd„Z‡fdd†Zdd „Zd d „Zed d „ƒZdd„Z ‡S)rrr$NcCs[|dkrtdƒ‚||_tjƒ|_|dk rH||_ntjƒ|_dS)Nrz$Semaphore initial value must be >= 0)rGrBr%r&r'r)r r*)rÚvaluer$rrrr™s     zSemaphore.__init__csqtƒjƒ}|jƒr!dndj|jƒ}|jrWdj|t|jƒƒ}dj|dd…|ƒS)Nr+zunlocked,value:{}z {},waiters:{}z <{} [{}]>rr-)r.r/r+r0rBr'r1)rr2r3)r4rrr/£s   zSemaphore.__repr__cCs@x9|jr;|jjƒ}|jƒs|jdƒdSqWdS)N)r'Úpopleftr@rA)rÚwaiterrrrÚ _wake_up_next«s    zSemaphore._wake_up_nextcCs |jdkS)Nr)rB)rrrrr+²szSemaphore.lockedc cs“x}|jdkr|jjƒ}|jj|ƒy |EdHWq|jƒ|jdkrt|jƒ rt|jƒ‚YqXqW|jd8_dS)NrrT)rBr)r:r'r;Úcancelr5rR)rr?rrrr¶s     zSemaphore.acquirecCs|jd7_|jƒdS)Nr)rBrR)rrrrrÎszSemaphore.release) rrrrr/rRr+r rrrr)r4rrŠs    cs=eZdZddd‡fdd†Z‡fdd†Z‡S)rrr$Ncs#||_tƒj|d|ƒdS)Nr$)Ú _bound_valuer.r)rrOr$)r4rrrÞs zBoundedSemaphore.__init__cs/|j|jkrtdƒ‚tƒjƒdS)Nz(BoundedSemaphore released too many times)rBrTrGr.r)r)r4rrrâs zBoundedSemaphore.release)rrrrrrr)r4rr×s )Ú__all__r%Úrr r Z coroutinesr r rrrrrrrrrrÚs .zBuM