a ÕDOgZ-ã@s"gd¢ZddlZddlZddlZddlZddlZddlmZddlmZddlm Z zddlm Z m Z Wne y‚e dƒ‚Yn0e ed ƒƒ\ZZej jZGd d „d eƒZ Gd d „d e ƒZGdd„deƒZGdd„de ƒZGdd„de ƒZGdd„deƒZGdd„deƒZGdd„dejƒZdS))ÚLockÚRLockÚ SemaphoreÚBoundedSemaphoreÚ ConditionÚEventéNé)Úcontext)Úprocess)Úutil)ÚSemLockÚ sem_unlinkz—This platform lacks a functioning sem_open implementation, therefore, the required synchronization primitives needed will not function, see issue 3770.éc@s\eZdZe ¡Zdd„Zedd„ƒZdd„Z dd„Z d d „Z d d „Z d d„Z edd„ƒZdS)r c Csô|durtj ¡}| ¡}tjdkp*|dk}tdƒD]<}z t ||||  ¡|¡}|_ Wnt yjYq40qzq4t dƒ‚t   d|j¡| ¡tjdkr°dd„} t  || ¡|j jdurðdd lm} | |j jd ƒt j|tj|j jfd d dS) NÚwin32Úforkédzcannot find name for semaphorezcreated semlock with handle %scSs|j ¡dS©N)Ú_semlockÚ _after_fork)Úobj©rú3/usr/lib64/python3.9/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)ÚregisterÚ semaphorer)Ú exitpriority)r Ú_default_contextÚ get_contextÚget_start_methodÚsysÚplatformÚrangeÚ_multiprocessingr Ú _make_namerÚFileExistsErrorr ÚdebugÚhandleÚ _make_methodsÚregister_after_forkÚnameÚresource_trackerrÚFinalizeÚ_cleanup) ÚselfÚkindÚvalueÚmaxvalueÚctxr(Ú unlink_nowÚiÚslrrrrrÚ__init__2s2   þ     ÿzSemLock.__init__cCs"ddlm}t|ƒ||dƒdS)Nr)Ú unregisterr)r)r5r )r(r5rrrr+Ts zSemLock._cleanupcCs|jj|_|jj|_dSr)rÚacquireÚrelease©r,rrrr&Zs zSemLock._make_methodscCs |j ¡Sr)rÚ __enter__r8rrrr9^szSemLock.__enter__cGs |jj|ŽSr)rÚ__exit__©r,Úargsrrrr:aszSemLock.__exit__cCsDt |¡|j}tjdkr,t ¡ |j¡}n|j}||j|j |j fS)Nr) r Úassert_spawningrrrÚget_spawning_popenÚduplicate_for_childr%r-r/r()r,r3ÚhrrrÚ __getstate__ds   zSemLock.__getstate__cCs,tjj|Ž|_t d|d¡| ¡dS)Nz recreated blocker with handle %rr)r!r Ú_rebuildrr r$r&©r,ÚstaterrrÚ __setstate__mszSemLock.__setstate__cCsdt ¡jdttjƒfS)Nz%s-%sÚ semprefix)r Úcurrent_processÚ_configÚnextr Ú_randrrrrr"rsÿzSemLock._make_nameN)Ú__name__Ú __module__Ú __qualname__ÚtempfileÚ_RandomNameSequencerJr4Ú staticmethodr+r&r9r:rArEr"rrrrr .s"  r c@s&eZdZd dd„Zdd„Zdd„ZdS) rrcCstj|t|t|ddS©N©r0)r r4Ú SEMAPHOREÚ SEM_VALUE_MAX©r,r.r0rrrr4}szSemaphore.__init__cCs |j ¡Sr)rÚ _get_valuer8rrrÚ get_value€szSemaphore.get_valuecCs6z|j ¡}Wnty$d}Yn0d|jj|fS)NÚunknownz<%s(value=%s)>)rrVÚ ExceptionÚ __class__rK©r,r.rrrÚ__repr__ƒs   zSemaphore.__repr__N)r)rKrLrMr4rWr\rrrrr{s rc@seZdZddd„Zdd„ZdS)rrcCstj|t|||ddSrQ©r r4rSrUrrrr4szBoundedSemaphore.__init__cCs<z|j ¡}Wnty$d}Yn0d|jj||jjfS)NrXz<%s(value=%s, maxvalue=%s)>)rrVrYrZrKr/r[rrrr\“s  ÿzBoundedSemaphore.__repr__N)r©rKrLrMr4r\rrrrrŽs rc@seZdZdd„Zdd„ZdS)rcCstj|tdd|ddS©NrrRr]©r,r0rrrr4¡sz Lock.__init__cCsŽzf|j ¡r8t ¡j}t ¡jdkrd|dt ¡j7}n,|j ¡dkrLd}n|j ¡dkr`d}nd}Wnt y|d}Yn0d |j j |fS) NÚ MainThreadú|rÚNonerÚSomeOtherThreadÚSomeOtherProcessrXz<%s(owner=%s)>) rÚ_is_miner rGr(Ú threadingÚcurrent_threadrVÚ_countrYrZrK)r,r(rrrr\¤s    z Lock.__repr__Nr^rrrrrŸsrc@seZdZdd„Zdd„ZdS)rcCstj|tdd|ddSr_)r r4ÚRECURSIVE_MUTEXr`rrrr4ºszRLock.__init__cCsªz||j ¡rBt ¡j}t ¡jdkr6|dt ¡j7}|j ¡}n8|j ¡dkrZd\}}n |j ¡dkrrd\}}nd\}}Wnt y–d\}}Yn0d |j j ||fS) Nrarbr)rcrr)rdÚnonzero)rerk)rXrXú <%s(%s, %s)>) rrfr rGr(rgrhrirVrYrZrK)r,r(Úcountrrrr\½s       zRLock.__repr__Nr^rrrrr¸src@sleZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z ddd„Z ddd„Z dd„Z ddd„Z dS)rNcCs>|p | ¡|_| d¡|_| d¡|_| d¡|_| ¡dS©Nr)rÚ_lockrÚ_sleeping_countÚ _woken_countÚ_wait_semaphorer&)r,Úlockr0rrrr4Ôs    zCondition.__init__cCst |¡|j|j|j|jfSr)r r=rorprqrrr8rrrrAÛs ÿzCondition.__getstate__cCs |\|_|_|_|_| ¡dSr)rorprqrrr&rCrrrrEàsÿ zCondition.__setstate__cCs |j ¡Sr)ror9r8rrrr9åszCondition.__enter__cGs |jj|ŽSr)ror:r;rrrr:èszCondition.__exit__cCs|jj|_|jj|_dSr)ror6r7r8rrrr&ës zCondition._make_methodscCsHz|jj ¡|jj ¡}Wnty2d}Yn0d|jj|j|fS)NrXrl)rprrVrqrYrZrKro)r,Ú num_waitersrrrr\ïs  ÿ  zCondition.__repr__c Cs°|jj ¡sJdƒ‚|j ¡|jj ¡}t|ƒD]}|j ¡q2zD|j d|¡W|j  ¡t|ƒD]}|j ¡qdS]}|j ¡qvn$|j  ¡t|ƒD]}|j ¡qš0dS)Nz,must acquire() condition before using wait()T) rorrfrpr7rir rrr6rq)r,Útimeoutrmr2rrrÚwait÷s&ÿ       ùü  zCondition.waitrcCs¨|jj ¡sJdƒ‚|j d¡r(Jdƒ‚|j d¡rN|j d¡}|s(Jdƒ‚q(d}||krz|j d¡rz|j ¡|d7}qR|r¤t|ƒD]}|j ¡q†|j d¡r¤q–dS)Nzlock is not ownedFznotify: Bug in sleeping_count.acquire- res should not be Falserr) rorrfrrr6rqrpr7r )r,ÚnÚresÚsleepersr2rrrÚnotifys$ÿÿ       zCondition.notifycCs|jtjddS)N)rw)rzrÚmaxsizer8rrrÚ notify_all(szCondition.notify_allcCsd|ƒ}|r|S|dur$t ¡|}nd}d}|s`|durN|t ¡}|dkrNq`| |¡|ƒ}q,|Srn)ÚtimeÚ monotonicrv)r,Ú predicateruÚresultÚendtimeÚwaittimerrrÚwait_for+s  zCondition.wait_for)N)N)r)N)rKrLrMr4rArEr9r:r&r\rvrzr|rƒrrrrrÒs   rc@s6eZdZdd„Zdd„Zdd„Zdd„Zd d d „Zd S) rcCs | | ¡¡|_| d¡|_dSrn)rrÚ_condrÚ_flagr`rrrr4CszEvent.__init__cCsR|j8|j d¡r.|j ¡WdƒdSWdƒdS1sD0YdS©NFT)r„r…r6r7r8rrrÚis_setGs   z Event.is_setcCsJ|j0|j d¡|j ¡|j ¡Wdƒn1s<0YdS©NF)r„r…r6r7r|r8rrrÚsetNs  z Event.setcCs6|j|j d¡Wdƒn1s(0YdSrˆ)r„r…r6r8rrrÚclearTsz Event.clearNcCsv|j\|j d¡r |j ¡n |j |¡|j d¡rR|j ¡WdƒdSWdƒdS1sh0YdSr†)r„r…r6r7rv)r,rurrrrvXs     z Event.wait)N)rKrLrMr4r‡r‰rŠrvrrrrrAs rc@sZeZdZddd„Zdd„Zdd„Zedd „ƒZejd d „ƒZed d „ƒZ e jd d „ƒZ dS)ÚBarrierNc CsRddl}ddlm}|| d¡dƒ}| ¡}| |||||f¡d|_d|_dS)Nrr)Ú BufferWrapperr2r)ÚstructÚheaprŒÚcalcsizerrEÚ_stateri) r,ÚpartiesÚactionrur0rrŒÚwrapperÚcondrrrr4js zBarrier.__init__cCs.|\|_|_|_|_|_|j ¡ d¡|_dS)Nr2)Ú_partiesÚ_actionÚ_timeoutr„Ú_wrapperÚcreate_memoryviewÚcastÚ_arrayrCrrrrEssÿzBarrier.__setstate__cCs|j|j|j|j|jfSr)r•r–r—r„r˜r8rrrrAxs ÿzBarrier.__getstate__cCs |jdSrn©r›r8rrrr|szBarrier._statecCs||jd<dSrnrœr[rrrr€scCs |jdS©Nrrœr8rrrri„szBarrier._countcCs||jd<dSrrœr[rrrriˆs)NN) rKrLrMr4rErAÚpropertyrÚsetterrirrrrr‹hs    r‹)Ú__all__rgrrNr!r}Úr r r r r Ú ImportErrorÚlistr rjrSrTÚobjectrrrrrrr‹rrrrÚ s,     Mo'