]/ @sddddddgZddlZddlZddlZddlZddlmZd d lmZd d lm Z d d lm Z ydd lm Z m Z Wn*e k re ddddYnXeed\ZZej jZGdddeZ Gddde ZGdddeZGddde ZGddde ZGdddeZGdddeZGdddejZdS)LockRLock SemaphoreBoundedSemaphore ConditionEventN)time)context)process)util)SemLock sem_unlinkz*This platform lacks a functioning sem_openz( implementation, therefore, the requiredz+ synchronization primitives needed will notz function, see issue 3770.c@seZdZejZddZeddZddZ ddZ d d Z d d Z d dZ eddZdS)r c CsK|dkrtjj}|j}tjdkp?|dk}xbtdD]H}y,tj||||j |}|_ Wnt k rYqOXPqOWt dt j d|j|jtjdkrdd} t j|| |j jdk rGdd lm} | |j jt j|tj|j jfd d dS) Nwin32forkdzcannot find name for semaphorezcreated semlock with handle %scSs|jjdS)N)_semlock _after_fork)objr0/opt/alt/python35/lib64/python3.5/synchronize.pyrHsz%SemLock.__init__.._after_forkr )register exitpriorityr)r _default_context get_contextget_start_methodsysplatformrange_multiprocessingr _make_namerFileExistsErrorr debughandle _make_methodsregister_after_forknamesemaphore_trackerrFinalize_cleanup) selfkindvaluemaxvaluectxr'Z unlink_nowislrrrrr__init__3s.      zSemLock.__init__cCs(ddlm}t|||dS)Nr ) unregister)r(r3r)r'r3rrrr*Us zSemLock._cleanupcCs"|jj|_|jj|_dS)N)racquirerelease)r+rrrr%[szSemLock._make_methodscCs |jjS)N)r __enter__)r+rrrr6_szSemLock.__enter__cGs|jj|S)N)r__exit__)r+argsrrrr7bszSemLock.__exit__cCsbtj||j}tjdkr@tjj|j}n |j}||j|j |j fS)Nr) r assert_spawningrrrget_spawning_popenduplicate_for_childr$r,r.r')r+r1hrrr __getstate__es    zSemLock.__getstate__cCs8tjj||_tjd|d|jdS)Nz recreated blocker with handle %rr)r r _rebuildrr r#r%)r+staterrr __setstate__nszSemLock.__setstate__cCs$dtjjdttjfS)Nz%s-%s semprefix)r current_process_confignextr _randrrrrr!sszSemLock._make_nameN)__name__ __module__ __qualname__tempfile_RandomNameSequencerEr2 staticmethodr*r%r6r7r=r@r!rrrrr /s   "    r c@s7eZdZdddZddZddZdS) rr cCs tj|t|td|dS)Nr/)r r2 SEMAPHORE SEM_VALUE_MAX)r+r-r/rrrr2~szSemaphore.__init__cCs |jjS)N)r _get_value)r+rrr get_valueszSemaphore.get_valuec CsBy|jj}Wntk r-d}YnXd|jj|fS)Nunknownz<%s(value=%s)>)rrN Exception __class__rF)r+r-rrr__repr__s   zSemaphore.__repr__N)rFrGrHr2rOrSrrrrr|s  c@s+eZdZdddZddZdS)rr cCs tj|t||d|dS)Nr/)r r2rL)r+r-r/rrrr2szBoundedSemaphore.__init__c CsKy|jj}Wntk r-d}YnXd|jj||jjfS)NrPz<%s(value=%s, maxvalue=%s)>)rrNrQrRrFr.)r+r-rrrrSs   zBoundedSemaphore.__repr__N)rFrGrHr2rSrrrrrs c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r/)r r2rL)r+r/rrrr2sz Lock.__init__c Csy|jjrPtjj}tjjdkr|dtjj7}nB|jjdkrnd}n$|jjdkrd}nd}Wnt k rd}YnXd |j j |fS) N MainThread|r NonerSomeOtherThreadSomeOtherProcessrPz<%s(owner=%s)>) r_is_miner rBr' threadingcurrent_threadrN_countrQrRrF)r+r'rrrrSs     z Lock.__repr__N)rFrGrHr2rSrrrrrs  c@s(eZdZddZddZdS)rcCs tj|tddd|dS)Nr r/)r r2RECURSIVE_MUTEX)r+r/rrrr2szRLock.__init__c Csy|jjr_tjj}tjjdkrM|dtjj7}|jj}nT|jjdkrd \}}n0|jjdkrd \}}n d \}}Wnt k rd\}}YnXd |j j ||fS)NrTrUr rVrrWnonzerorXrPz <%s(%s, %s)>)rVr)rWr^)rXr^)rPrP) rrYr rBr'rZr[r\rNrQrRrF)r+r'countrrrrSs zRLock.__repr__N)rFrGrHr2rSrrrrrs  c@seZdZdddZddZddZdd Zd d Zd d ZddZ dddZ ddZ ddZ dddZ dS)rNcCsY|p|j|_|jd|_|jd|_|jd|_|jdS)Nr)r_lockr_sleeping_count _woken_count_wait_semaphorer%)r+lockr/rrrr2s zCondition.__init__cCs)tj||j|j|j|jfS)N)r r9r`rarbrc)r+rrrr=s  zCondition.__getstate__cCs,|\|_|_|_|_|jdS)N)r`rarbrcr%)r+r?rrrr@szCondition.__setstate__cCs |jjS)N)r`r6)r+rrrr6szCondition.__enter__cGs|jj|S)N)r`r7)r+r8rrrr7szCondition.__exit__cCs"|jj|_|jj|_dS)N)r`r4r5)r+rrrr%szCondition._make_methodsc Cs[y&|jjj|jjj}Wntk r@d}YnXd|jj|j|fS)NrPz <%s(%s, %s)>)rarrNrbrQrRrFr`)r+Z num_waitersrrrrSs   zCondition.__repr__c Cs|jj|jjj}x!t|D]}|jjq,Wz|jjd|SWd|jjx!t|D]}|jjqwWXdS)NT) rar5r`rr\rrcr4rb)r+timeoutr_r0rrrwaits  zCondition.waitcCskx(|jjdr*|jjd}qW|jjdrg|jj|jj|jjddS)NF)rbr4rarcr5)r+resrrrnotifys  zCondition.notifycCsx(|jjdr*|jjd}qWd}x-|jjdr`|jj|d7}q4W|rx!t|D]}|jjqtWx|jjdrqWdS)NFrr )rbr4rarcr5r)r+rgZsleepersr0rrr notify_all s zCondition.notify_allcCs|}|r|S|dk r/t|}n d}d}xF|s|dk rj|t}|dkrjP|j||}q>W|S)Nr)_timerf)r+ predicatereresultendtimewaittimerrrwait_for7s        zCondition.wait_for)rFrGrHr2r=r@r6r7r%rSrfrhrirorrrrrs         c@sOeZdZddZddZddZddZd d d Zd S) rcCs.|j|j|_|jd|_dS)Nr)rr_condr_flag)r+r/rrrr2OszEvent.__init__c Cs<|j,|jjdr-|jjdSdSWdQRXdS)NFT)rprqr4r5)r+rrris_setSs   z Event.is_setc Cs?|j/|jjd|jj|jjWdQRXdS)NF)rprqr4r5ri)r+rrrsetZs  z Event.setc Cs%|j|jjdWdQRXdS)NF)rprqr4)r+rrrclear`s z Event.clearNc Csn|j^|jjdr,|jjn|jj||jjdr_|jjdSdSWdQRXdS)NFT)rprqr4r5rf)r+rerrrrfds  z Event.wait)rFrGrHr2rrrsrtrfrrrrrMs     c@seZdZddddZddZddZedd Zejd d Zed d Z e jd d Z dS)BarrierNc Cssddl}ddlm}||jdd}|j}|j|||||fd|_d|_dS)Nrr ) BufferWrapperr0r)structheaprvcalcsizerr@_stater\) r+partiesactionrer/rwrvwrapperZcondrrrr2vs   zBarrier.__init__cCsC|\|_|_|_|_|_|jjjd|_dS)Nr0)_parties_action_timeoutrp_wrapperZcreate_memoryviewcast_array)r+r?rrrr@s$zBarrier.__setstate__cCs"|j|j|j|j|jfS)N)r~rrrpr)r+rrrr=szBarrier.__getstate__cCs |jdS)Nr)r)r+rrrrzszBarrier._statecCs||jd s0       Mz'