o ?OgZ-@sgdZddlZddlZddlZddlZddlZddlmZddlmZddlm Z z ddlm Z m Z Wn e y?e dwe ed \ZZej jZGd d d eZ Gd d d e ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS))LockRLock SemaphoreBoundedSemaphore ConditionEventN)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\eZdZeZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c Cs|dur tj}|}tjdkp|dk}tdD]}zt|||| |}|_ Wn t y5Yqwnt dt d|j|tjdkrWdd} t || |j jdurydd lm} | |j jd t j|tj|j jfd d dSdS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jdSN)_semlock _after_fork)objrB/opt/alt/python310/lib64/python3.10/multiprocessing/synchronize.pyrGsz%SemLock.__init__.._after_forkr)register semaphorer)Z exitpriority)r Z_default_contextZ get_contextZget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsZregister_after_forknameresource_trackerrZFinalize_cleanup) selfkindvaluemaxvaluectxr#Z unlink_nowislrrrrr__init__2s6         zSemLock.__init__cCs"ddlm}t|||ddS)Nr) unregisterr)r$r.r )r#r.rrrr%Ts zSemLock._cleanupcC|jj|_|jj|_dSr)racquirereleaser&rrrr"Z zSemLock._make_methodscC |jSr)r __enter__r2rrrr5^ zSemLock.__enter__cG |jj|Sr)r__exit__r&argsrrrr8a zSemLock.__exit__cCsDt||j}tjdkrt|j}n|j}||j|j |j fS)Nr) r assert_spawningrrrZget_spawning_popenZduplicate_for_childr!r'r)r#)r&r,hrrr __getstate__ds  zSemLock.__getstate__cCs,tjj||_td|d|dS)Nz recreated blocker with handle %rr)rr Z_rebuildrr r r"r&staterrr __setstate__ms zSemLock.__setstate__cCsdtjdttjfS)Nz%s-%sZ semprefix)r current_processZ_confignextr _randrrrrrrszSemLock._make_nameN)__name__ __module__ __qualname__tempfileZ_RandomNameSequencerDr- staticmethodr%r"r5r8r>rArrrrrr .s"  r c@s&eZdZd ddZddZddZdS) rrcCstj|t|t|ddSNr*)r r- SEMAPHORE SEM_VALUE_MAXr&r(r*rrrr-}zSemaphore.__init__cCr4r)r _get_valuer2rrr get_valuer6zSemaphore.get_valuecCs6z|j}Wn tyd}Ynwd|jj|fS)Nunknownz<%s(value=%s)>)rrP Exception __class__rEr&r(rrr__repr__s  zSemaphore.__repr__Nr)rErFrGr-rQrVrrrrr{s  rc@seZdZdddZddZdS)rrcCstj|t|||ddSrJr r-rLrNrrrr-rOzBoundedSemaphore.__init__cCs<z|j}Wn tyd}Ynwd|jj||jjfS)NrRz<%s(value=%s, maxvalue=%s)>)rrPrSrTrEr)rUrrrrVs zBoundedSemaphore.__repr__NrWrErFrGr-rVrrrrrs  rc@eZdZddZddZdS)rcCtj|tdd|ddSNrrKrXr&r*rrrr-rOz Lock.__init__cCsz3|jrtj}tjdkr|dtj7}n|jdkr&d}n |jdkr0d}nd}Wn t y>d}Ynwd |j j |fS) N MainThread|rNonerSomeOtherThreadSomeOtherProcessrRz<%s(owner=%s)>) r_is_miner rBr# threadingcurrent_threadrP_countrSrTrE)r&r#rrrrVs    z Lock.__repr__NrYrrrrr rc@rZ)rcCr[r\)r r-RECURSIVE_MUTEXr]rrrr-rOzRLock.__init__cCsz>|jr!tj}tjdkr|dtj7}|j}n|jdkr-d\}}n|jdkr9d\}}nd\}}Wn t yKd\}}Ynwd |j j ||fS) Nr^r_r)r`rr)ranonzero)rbri)rRrR <%s(%s, %s)>) rrcr rBr#rdrerfrPrSrTrE)r&r#countrrrrVs        zRLock.__repr__NrYrrrrrrgrc@sleZdZdddZddZddZdd Zd d Zd d ZddZ dddZ dddZ ddZ dddZ dS)rNcCs>|p||_|d|_|d|_|d|_|dSNr)r_lockr_sleeping_count _woken_count_wait_semaphorer")r&lockr*rrrr-s     zCondition.__init__cCst||j|j|j|jfSr)r r<rmrnrorpr2rrrr>s zCondition.__getstate__cCs |\|_|_|_|_|dSr)rmrnrorpr"r?rrrrAs  zCondition.__setstate__cCr4r)rmr5r2rrrr5r6zCondition.__enter__cGr7r)rmr8r9rrrr8r;zCondition.__exit__cCr/r)rmr0r1r2rrrr"r3zCondition._make_methodscCsHz|jj|jj}Wn tyd}Ynwd|jj|j|fS)NrRrj)rnrrProrSrTrErm)r&Z num_waitersrrrrVs   zCondition.__repr__c Cs|j|jj}t|D]}|jqz|jd|W|jt|D]}|jq(S|jt|D]}|jq:w)NT) rnr1rmrrfrrpr0ro)r&timeoutrkr+rrrwaits         zCondition.waitrcCs|jdr|jd}|jdsd}||kr1|jdr1|j|d7}||kr1|jds|rNt|D]}|jq7|jdrP |jdsEdSdSdS)NFrr)ror0rnrpr1r)r&nresZsleepersr+rrrnotifys       zCondition.notifycCs|jtjddS)N)rt)rvrmaxsizer2rrr notify_all(szCondition.notify_allcCsj|}|r|S|durt|}nd}d}|s3|dur)|t}|dkr) |S|||}|r|Srl)time monotonicrs)r&Z predicaterrresultZendtimeZwaittimerrrwait_for+s"  zCondition.wait_forrrW)rErFrGr-r>rAr5r8r"rVrsrvrxr|rrrrrs   rc@s6eZdZddZddZddZddZd d d Zd S) rcCs |||_|d|_dSrl)rr_condr_flagr]rrrr-CszEvent.__init__cCsV|j|jdr|j WddS WddS1s$wYdSNFT)r}r~r0r1r2rrris_setGs  $z Event.is_setcCsL|j|jd|j|jWddS1swYdSNF)r}r~r0r1rxr2rrrsetNs    "z Event.setcCs8|j|jdWddS1swYdSr)r}r~r0r2rrrclearTs"z Event.clearNcCsz|j0|jdr|jn|j||jdr*|j WddS WddS1s6wYdSr)r}r~r0r1rs)r&rrrrrrsXs      $z Event.waitr)rErFrGr-rrrrsrrrrrAs rc@sZeZdZdddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc CsRddl}ddlm}||dd}|}||||||fd|_d|_dS)Nrr) BufferWrapperr+r)structZheaprZcalcsizerrA_staterf) r&Zpartiesactionrrr*rrwrapperZcondrrrr-js  zBarrier.__init__cCs.|\|_|_|_|_|_|jd|_dS)Nr+)_parties_action_timeoutr}_wrapperZcreate_memoryviewcast_arrayr?rrrrAsszBarrier.__setstate__cCs|j|j|j|j|jfSr)rrrr}rr2rrrr>xs zBarrier.__getstate__cC |jdSrlrr2rrrr| zBarrier._statecC||jd<dSrlrrUrrrrcCrNrrr2rrrrfrzBarrier._countcCrrrrUrrrrfr)NN) rErFrGr-rAr>propertyrsetterrfrrrrrhs     r)__all__rdrrHrryr r r r r ImportErrorlistrrhrLrMobjectrrrrrrrrrrrs0      Mo'