ó õùPc@sœddddddgZddlZddlZddlZddlmZmZddlZdd l m Z dd l m Z m Z mZdd lmZmZydd lmZWn)ek rßed dddƒ‚nXedƒ\ZZejjZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdS(tLocktRLockt SemaphoretBoundedSemaphoret ConditiontEventiÿÿÿÿN(ttimetsleep(tcurrent_process(tFinalizetregister_after_forktdebug(tassert_spawningtPopen(tSemLocks*This platform lacks a functioning sem_opens( implementation, therefore, the requireds+ synchronization primitives needed will nots function, see issue 3770.iRcBs>eZd„Zd„Zd„Zd„Zd„Zd„ZRS(cCsctj|||ƒ}|_td|jƒ|jƒtjdkr_d„}t||ƒndS(Nscreated semlock with handle %stwin32cSs|jjƒdS(N(t_semlockt _after_fork(tobj((s,..\python\lib\multiprocessing\synchronize.pyR6s( t_multiprocessingRRR thandlet _make_methodstsystplatformR (tselftkindtvaluetmaxvaluetslR((s,..\python\lib\multiprocessing\synchronize.pyt__init__0s   cCs"|jj|_|jj|_dS(N(Rtacquiretrelease(R((s,..\python\lib\multiprocessing\synchronize.pyR:scCs |jjƒS(N(Rt __enter__(R((s,..\python\lib\multiprocessing\synchronize.pyR >scGs|jj|ŒS(N(Rt__exit__(Rtargs((s,..\python\lib\multiprocessing\synchronize.pyR!AscCs2t|ƒ|j}tj|jƒ|j|jfS(N(R RR tduplicate_for_childRRR(RR((s,..\python\lib\multiprocessing\synchronize.pyt __getstate__Ds  cCs5tjj|Œ|_td|dƒ|jƒdS(Ns recreated blocker with handle %ri(RRt_rebuildRR R(Rtstate((s,..\python\lib\multiprocessing\synchronize.pyt __setstate__Is(t__name__t __module__RRR R!R$R'(((s,..\python\lib\multiprocessing\synchronize.pyR.s     cBs&eZdd„Zd„Zd„ZRS(icCstj|t|tƒdS(N(RRt SEMAPHOREt SEM_VALUE_MAX(RR((s,..\python\lib\multiprocessing\synchronize.pyRTscCs |jjƒS(N(Rt _get_value(R((s,..\python\lib\multiprocessing\synchronize.pyt get_valueWscCs5y|jjƒ}Wntk r,d}nXd|S(Ntunknowns(RR,t Exception(RR((s,..\python\lib\multiprocessing\synchronize.pyt__repr__Zs   (R(R)RR-R0(((s,..\python\lib\multiprocessing\synchronize.pyRRs  cBseZdd„Zd„ZRS(icCstj|t||ƒdS(N(RRR*(RR((s,..\python\lib\multiprocessing\synchronize.pyRgscCsAy|jjƒ}Wntk r,d}nXd||jjfS(NR.s)(RR,R/R(RR((s,..\python\lib\multiprocessing\synchronize.pyR0js   (R(R)RR0(((s,..\python\lib\multiprocessing\synchronize.pyRes cBseZd„Zd„ZRS(cCstj|tddƒdS(Ni(RRR*(R((s,..\python\lib\multiprocessing\synchronize.pyRxscCsµy“|jjƒrPtƒj}tjƒjdkr’|dtjƒj7}q’nB|jjƒdkrnd}n$|jjƒdkrŒd}nd}Wntk r¬d}nXd |S( Nt MainThreadt|itNoneitSomeOtherThreadtSomeOtherProcessR.s( Rt_is_mineRtnamet threadingtcurrent_threadR,t_countR/(RR7((s,..\python\lib\multiprocessing\synchronize.pyR0{s      (R(R)RR0(((s,..\python\lib\multiprocessing\synchronize.pyRvs cBseZd„Zd„ZRS(cCstj|tddƒdS(Ni(RRtRECURSIVE_MUTEX(R((s,..\python\lib\multiprocessing\synchronize.pyR‘scCsây´|jjƒr_tƒj}tjƒjdkrM|dtjƒj7}n|jjƒ}nT|jjƒdkrƒd \}}n0|jjƒdkr§d \}}n d \}}Wntk rÓd\}}nXd ||fS(NR1R2iR3iR4tnonzeroR5R.s(sNonei(sSomeOtherThreadR<(sSomeOtherProcessR<(sunknownsunknown( RR6RR7R8R9R:R,R/(RR7tcount((s,..\python\lib\multiprocessing\synchronize.pyR0”s  (R(R)RR0(((s,..\python\lib\multiprocessing\synchronize.pyRs cBsheZd d„Zd„Zd„Zd„Zd„Zd„Zd„Z d d„Z d„Z d „Z RS( cCsM|p tƒ|_tdƒ|_tdƒ|_tdƒ|_|jƒdS(Ni(Rt_lockRt_sleeping_countt _woken_countt_wait_semaphoreR(Rtlock((s,..\python\lib\multiprocessing\synchronize.pyR«s cCs&t|ƒ|j|j|j|jfS(N(R R>R?R@RA(R((s,..\python\lib\multiprocessing\synchronize.pyR$²s  cCs,|\|_|_|_|_|jƒdS(N(R>R?R@RAR(RR&((s,..\python\lib\multiprocessing\synchronize.pyR'·scCs |jjƒS(N(R>R (R((s,..\python\lib\multiprocessing\synchronize.pyR ¼scGs|jj|ŒS(N(R>R!(RR"((s,..\python\lib\multiprocessing\synchronize.pyR!¿scCs"|jj|_|jj|_dS(N(R>RR(R((s,..\python\lib\multiprocessing\synchronize.pyRÂscCsQy&|jjjƒ|jjjƒ}Wntk r?d}nXd|j|fS(Ntunkowns(R?RR,R@R/R>(Rt num_waiters((s,..\python\lib\multiprocessing\synchronize.pyR0Æs   cCs±|jjjƒstdƒ‚|jjƒ|jjjƒ}x!t|ƒD]}|jjƒqJWz|jj t |ƒWd|j jƒx!t|ƒD]}|jj ƒq•WXdS(Ns,must acquire() condition before using wait()( R>RR6tAssertionErrorR?RR:txrangeRARtTrueR@(RttimeoutR=ti((s,..\python\lib\multiprocessing\synchronize.pytwaitÎs   cCs±|jjjƒstdƒ‚|jjtƒ s7t‚x4|jjtƒrm|jjtƒ}|s:t‚q:W|jjtƒr­|jj ƒ|jjƒ|jjtƒndS(Nslock is not owned( R>RR6RERARtFalseR@R?R(Rtres((s,..\python\lib\multiprocessing\synchronize.pytnotifyås  cCsî|jjjƒstdƒ‚|jjtƒ s7t‚x4|jjtƒrm|jjtƒ}|s:t‚q:Wd}x-|jjtƒr£|jj ƒ|d7}qwW|rêx!t |ƒD]}|jjƒq·Wx|jjtƒræqÑWndS(Nslock is not ownedii( R>RR6RERARRKR@R?RRF(RRLtsleepersRI((s,..\python\lib\multiprocessing\synchronize.pyt notify_allös N( R(R)R3RR$R'R R!RR0RJRMRO(((s,..\python\lib\multiprocessing\synchronize.pyR©s         cBs8eZd„Zd„Zd„Zd„Zdd„ZRS(cCs%ttƒƒ|_tdƒ|_dS(Ni(RRt_condRt_flag(R((s,..\python\lib\multiprocessing\synchronize.pyRscCsM|jjƒz+|jjtƒr3|jjƒtStSWd|jjƒXdS(N(RPRRQRKRRG(R((s,..\python\lib\multiprocessing\synchronize.pytis_sets  cCsP|jjƒz.|jjtƒ|jjƒ|jjƒWd|jjƒXdS(N(RPRRQRKRRO(R((s,..\python\lib\multiprocessing\synchronize.pytset!s   cCs6|jjƒz|jjtƒWd|jjƒXdS(N(RPRRQRKR(R((s,..\python\lib\multiprocessing\synchronize.pytclear*s cCs|jjƒz]|jjtƒr2|jjƒn|jj|ƒ|jjtƒre|jjƒtStSWd|jjƒXdS(N(RPRRQRKRRJRG(RRH((s,..\python\lib\multiprocessing\synchronize.pyRJ1s  N(R(R)RRRRSRTR3RJ(((s,..\python\lib\multiprocessing\synchronize.pyRs   (t__all__R8tosRRt_timeRt_sleepRtmultiprocessing.processRtmultiprocessing.utilR R R tmultiprocessing.forkingR R Rt ImportErrortrangeR;R*R+tobjectRRRRRR(((s,..\python\lib\multiprocessing\synchronize.pyt s.       $h