3 \@sddddgZddlZddlZddlZddlZddlZddlmZddlm Z dd l m Z m Z dd lm Z dd lmZdd lmZdd lmZddZe jejedddDZedek rddZxeD]Ze jeeqWGdddeZfifddZddZGdddeZddZd d!ZGd"d#d#eZGd$d%d%eZ e j!e j"fe j#e j$fd&Z%Gd'ddeZ&Gd(d)d)e'Z(Gd*ddeZ)d+d,Z*ifd-d.Z+dd0d1Z,Gd2d3d3eZ-Gd4d5d5eZ.dd6d7Z/Gd8d9d9e)Z0Gd:d;d;e)Z1Gdd?d?e)Z3Gd@dAdAe)Z4GdBdCdCe)Z5GdDdEdEe)Z6e+dFdZ7GdZd[d[e7Z8e+d\dZ9d]deie9_:e+dfdZ;e+dgdZe>jdwej?e>jdxej?e>jdyej@e3e>jdzejAe1e>jd{ejBe1e>jd|ejCe1e>jd}ejDe1e>jd~ejEe2e>jdejFe4e>jde jGe=e>jdee8e>jdeHe9e>jd5e.e6e>jd7e/e;e>jd3e-e5e>jdee0dde>jdsdddS) BaseManager SyncManager BaseProxyTokenN) format_exc) connection) reductionget_spawning_popen)pool)process)util) get_contextcCstj|j|jffS)N)arraytypecodetobytes)ar0/usr/lib64/python3.6/multiprocessing/managers.py reduce_array$srcCsg|]}tti|qSr)typegetattr).0namerrr (sritemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list*sr c@s0eZdZd ZddZddZdd Zd d Zd S)rtypeidaddressidcCs||||_|_|_dS)N)r!r"r#)selfr!r"r#rrr__init__9szToken.__init__cCs|j|j|jfS)N)r!r"r#)r$rrr __getstate__<szToken.__getstate__cCs|\|_|_|_dS)N)r!r"r#)r$staterrr __setstate__?szToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r!r"r#)r$rrr__repr__BszToken.__repr__N)r!r"r#)r* __module__ __qualname__ __slots__r%r&r(r+rrrrr3s cCs8|j||||f|j\}}|dkr*|St||dS)Nz#RETURN)sendrecvconvert_to_error)cr# methodnameargskwdskindresultrrrdispatchJs  r8cCs<|dkr |S|dkrt|S|dkr0td|StdSdS)Nz#ERRORz #TRACEBACKz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type) RemoteError ValueError)r6r7rrrr1Ts r1c@seZdZddZdS)r9cCs&ddddt|jdddS)N -Kr)strr4)r$rrr__str__aszRemoteError.__str__N)r*r,r-r?rrrrr9`sr9cCs6g}x,t|D] }t||}t|r|j|qW|S)N)dirrcallableappend)rtemprfuncrrr all_methodshs  rEcCsddt|DS)NcSsg|]}|ddkr|qS)r_r)rrrrrrwsz"public_methods..)rE)rrrrpublic_methodsssrGc @seZdZddddddddd g Zd d Zd d ZddZddZddZddZ ddZ ddZ e e e dZ ddZ ddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-S).Servershutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCs^||_tj||_t|\}}||dd|_|jj|_ddffi|_i|_i|_ t j |_ dS)N)r"Zbacklog0) registryr AuthenticationStringauthkeylistener_clientlistenerr" id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r$rTr"rV serializerListenerClientrrrr%s   zServer.__init__cCstj|_|tj_zZtj|jd}d|_|j y x|jj sN|jj dq6WWnt t fk rjYnXWdtjtjkrtjdtjt_tjt_tjdXdS)N)targetTrzresetting stdout, stderrr)r\Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__r debug __stderr__stderrexit)r$rhrrr serve_forevers       zServer.serve_foreverc CsPxJy|jj}Wntk r&wYnXtj|j|fd}d|_|jqWdS)N)rbr4T)rXZacceptOSErrorr\rghandle_requestrirj)r$r2trrrrhszServer.accepterc 'Cs4d}}}y>tj||jtj||j|j}|\}}}}t||}Wntk rhdtf} Yn>Xy||f||}Wntk rdtf} Yn Xd|f} y|j| Wnrtk r&} zTy|jdtfWntk rYnXt j d| t j d|t j d| WYdd} ~ XnX|j dS)Nz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r) rZdeliver_challengerVZanswer_challenger0r Exceptionrr/r infoclose) r$r2funcnamer7requestignorer4r5rDmsgerrrrxs2    zServer.handle_requestcDCstjdtjj|j}|j}|j}x|jj syBd}}|}|\}}} } y||\}} } Wn^t k r} zBy|j |\}} } Wn&t k r}z | WYdd}~XnXWYdd} ~ XnX|| krt d|t || ft||}y|| | }Wn,tk r&}zd|f}WYdd}~XnPX| o8| j|d}|rn|j|||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNy,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk r"tjdtjjtjdYn tk r@dtf}YnXyDy ||Wn2tk r}z|d tfWYdd}~XnXWq(tk r}zBtjd tjjtjd |tjd ||jtjd WYdd}~Xq(Xq(WdS)Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)r rrr\current_threadrr0r/rYrdrkKeyErrorr[AttributeErrorrrrzgetrJrr"rfallback_mappingEOFErrorrorur{r|)r$connr0r/rYr3rr~identr4r5exposed gettypeidkeZ second_keZfunctionresrrr!ZridentZrexposedtokenZ fallback_funcr7rrr serve_clientsx  (        $   zServer.serve_clientcCs|S)Nr)r$rrrrrrfallback_getvalue&szServer.fallback_getvaluecCst|S)N)r>)r$rrrrrr fallback_str)szServer.fallback_strcCst|S)N)repr)r$rrrrrr fallback_repr,szServer.fallback_repr)r?r+z #GETVALUEcCsdS)Nr)r$r2rrrrO5sz Server.dummycCs||jlg}t|jj}|jxD|D]<}|dkr(|jd||j|t|j|dddfq(Wdj|SQRXdS)NrSz %s: refcount=%s %srr=r;) r^rrZrsortrBr>rYjoin)r$r2r7rrrrrrM8s  $zServer.debug_infocCs t|jS)N)lenrZ)r$r2rrrrNGszServer.number_of_objectscCsLz:ytjd|jdWnddl}|jYnXWd|jjXdS)Nz!manager received shutdown message#RETURNr)rN)r rrr/ traceback print_excrdset)r$r2rrrrrINs zServer.shutdownc Os|j|j|\}}}}|dkr,|d} n |||} |dkrFt| }|dk r^t|t|}dt| } tjd|| | t||f|j| <| |j krd|j | <WdQRX|j || | t |fS)Nrz%xz&%r callable returned object with id %r) r^rTrGrr#r rrrrYrZrPtuple) r$r2r!r4r5rArmethod_to_typeid proxytyperrrrrrJ[s      z Server.createcCst|j|jdS)Nr)rrYr#)r$r2rrrrrLzszServer.get_methodscCs"|tj_|jd|j|dS)N#RETURN)rN)r\rrr/r)r$r2rrrrrKs  zServer.accept_connectioncCs|jy|j|d7<Wnhtk r}zL||jkrrd|j|<|j||j|<|j|\}}}tjd|n|WYdd}~XnXWdQRXdS)Nrz&Server re-enabled tracking & INCREF %r)r^rZrr[rYr rr)r$r2rrrrrrrrrPs  z Server.increfcCs||jkr$||jkr$tjd|dS|j.|j|d8<|j|dkrT|j|=WdQRX||jkrdfdf|j|<tjd||j|j|=WdQRXdS)NzServer DECREF skipping %rrrzdisposing of obj with id %r)rZr[r rrr^rY)r$r2rrrrrQs     z Server.decrefN)r*r,r-Zpublicr%rvrhrxrrrrrrOrMrNrIrJrLrKrPrQrrrrrH}s, "Q rHc@seZdZdgZdZdZdZdS)StatevaluerrN)r*r,r-r.INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZiZeZd ddZddZddZdffd d Z e dffd d Z d dZ d!ddZ ddZddZddZddZeddZeddZe d"ddZdS)#rNrcCs\|dkrtjj}||_tj||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dS)N)r rerV_addressrU_authkeyr_staterr _serializerrWZ _Listener_Clientr_ctx)r$r"rVr_Zctxrrrr%s   zBaseManager.__init__cCst|j|j|j|jS)N)rH _registryrrr)r$rrr get_servers zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)N)rVrO) rWrrrr8rrrr)r$r`rarrrrconnects zBaseManager.connectc Cs|dk rt| rtdtjdd\}}|jjt|j|j|j |j |j |||fd|_ dj dd|j jD}t|jd||j _|j j|j|j|_ |jtj|j_tj|t|j|j |j |j |j|jfd d |_dS) Nzinitializer must be a callableF)Zduplex)rbr4:css|]}t|VqdS)N)r>)rirrr sz$BaseManager.start..r<r)r4 exitpriority)rA TypeErrorrZPiperZProcessr _run_serverrrrr_processrZ _identityr*rrjr|r0rrrrr Finalize_finalize_managerrrI)r$ initializerinitargsreaderwriterrrrrrjs&       zBaseManager.startc CsN|dk r|||j||||}|j|j|jtjd|j|jdS)Nzmanager serving at %r)_Serverr/r"r|r r{rv) clsrTr"rVr_rrrserverrrrrs zBaseManager._run_serverc OsN|j|j|jd}zt|dd|f||\}}Wd|jXt||j||fS)N)rVrJ)rrrr8r|r)r$r!r4r5rr#rrrr_create%s  zBaseManager._createcCs*|jdk r&|jj||jjs&d|_dS)N)rris_alive)r$timeoutrrrr1s   zBaseManager.joinc Cs.|j|j|jd}z t|ddS|jXdS)N)rVrM)rrrr8r|)r$rrrr _debug_info:s zBaseManager._debug_infoc Cs.|j|j|jd}z t|ddS|jXdS)N)rVrN)rrrr8r|)r$rrrr_number_of_objectsDs zBaseManager._number_of_objectscCs|jjtjkr|j|S)N)rrrrrj)r$rrr __enter__NszBaseManager.__enter__cCs |jdS)N)rI)r$exc_typeexc_valexc_tbrrr__exit__TszBaseManager.__exit__cCs|jrtjdy,|||d}zt|ddWd|jXWntk rRYnX|jdd|jrtjdt|drtjd|j|jd d|jrtjd t j |_ y t j |=Wntk rYnXdS) Nz#sending shutdown message to manager)rVrIg?)rzmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rr r{r8r|rzrhasattrrrrrr_address_to_localr)r r"rVr'rrrrrrWs.         zBaseManager._finalize_managercCs|jS)N)r)r$rrrwszBaseManager.Tc sd|jkr|jj|_dkr"t|p0tdd}|p@tdd}|r`xt|jD]\}}qTW|||f|j<|rfdd} | _t|| dS)Nr _exposed__method_to_typeid_cs`tjd|jf||\}}||j||j|d}|j|j|jd}t|dd|jf|S)Nz)requesting creation of a shared %r object)managerrVr)rVrQ) r rrrrrrr"r8r#)r$r4r5rZexpproxyr)rr!rrrCs  z"BaseManager.register..temp) __dict__rcopy AutoProxyrrrr*setattr) rr!rArrr create_methodkeyrrCr)rr!rregisterys    zBaseManager.register)NNrN)N)NNNNT)r*r,r-rrHrr%rrrj classmethodrrrrrrr staticmethodrpropertyr"rrrrrrs(  $    c@seZdZddZddZdS)ProcessLocalSetcCstj|dddS)NcSs|jS)N)clear)rrrrrsz*ProcessLocalSet.__init__..)r register_after_fork)r$rrrr%szProcessLocalSet.__init__cCs t|ffS)N)r)r$rrr __reduce__szProcessLocalSet.__reduce__N)r*r,r-r%rrrrrrsrc@s|eZdZiZejZdddZddZfifdd Z d d Z d d Z e ddZ ddZddZddZddZddZdS)rNTFc Cstj8tjj|jd}|dkr:tjtf}|tj|j<WdQRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rtj||_n"|j dk r|j j|_n tjj|_|r|jtj|tjdS)Nrr)r_mutexrrr"r ZForkAwareLocalr_tls_idset_tokenr#_id_managerrrWr_owned_by_managerr rUrrerV_increfr _after_fork) r$rr_rrVrrP manager_ownedZ tls_idsetrrrr%s*      zBaseProxy.__init__cCsdtjdtjj}tjjdkr4|dtjj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|)rVrK)r rrr rerr\rrrr"rr8rr)r$rrrrr_connects  zBaseProxy._connectc Csy |jj}Wn6tk rBtjdtjj|j|jj}YnX|j |j |||f|j \}}|dkrp|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) Nz#thread %r does not own a connectionz#RETURNz#PROXYr)rrVr)rVrQ)rrrr rrr\rrrr/rr0rrr!rr"rrrr8r#r1) r$r3r4r5rr6r7rrrrrrr _callmethods,      zBaseProxy._callmethodcCs |jdS)Nz #GETVALUE)r)r$rrr _getvalueszBaseProxy._getvaluec Cs|jrtjd|jjdS|j|jj|jd}t|dd|j ftjd|jj|j j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %r)rVrPz INCREF %r )r4r)rr rrrr#rr"rr8rraddrrrr_decrefrZ_close)r$rr'rrrr s zBaseProxy._increfcCs|j|j|dks |jtjkry2tjd|j||j|d}t|dd|jfWqt k r}ztjd|WYdd}~XqXntjd|j| rt |drtjdt j j |jj|`dS)Nz DECREF %r)rVrQz... decref failed %sz%DECREF %r -- manager already shutdownrz-thread %r has no more proxies so closing conn)discardr#rrrr rrr"r8rzrr\rrrr|)rrVr'ZtlsZidsetrrrrrrr s    zBaseProxy._decrefcCsHd|_y |jWn0tk rB}ztjd|WYdd}~XnXdS)Nzincref failed: %s)rrrzr r{)r$rrrrr9s  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)NrV_isautoFr) r rrr RebuildProxyrrrr)r$r5rrrrAs    zBaseProxy.__reduce__cCs|jS)N)r)r$memorrr __deepcopy__NszBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr*rr!r#)r$rrrr+QszBaseProxy.__repr__c Cs4y |jdStk r.t|dddSXdS)Nr+rz; '__str__()' failed>r)rrzr)r$rrrr?Us zBaseProxy.__str__)NNNTF)r*r,r-rr ZForkAwareThreadLockrr%rrrrrrrrrr+r?rrrrrs (   cCsttjdd}|rT|j|jkrTtjd|d|d<|j|jkrT|j|j|j|j<|j ddopttjdd }|||fd|i|S)Nrfz*Rebuild a proxy owned by manager, token=%rTrrPZ _inheritingF) rr rer"r rrr#r[rYpop)rDrr_r5rrPrrrrbs   rc Csrt|}y |||fStk r(YnXi}x|D]}td||f|q4Wt|tf|}||_||||f<|S)NzLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicmeth ProxyTyperrr MakeProxyTypews   rTc Cst|d}|dkrB||j|d}zt|dd|f}Wd|jX|dkrX|dk rX|j}|dkrjtjj}td|j |}||||||d} d| _ | S)Nr)rVrLz AutoProxy[%s])rrVrPT) rWr"r8r|rr rerVrr!r) rr_rrVrrPrrrrrrrrs    rc@seZdZddZddZdS) NamespacecKs|jj|dS)N)rupdate)r$r5rrrr%szNamespace.__init__cCs^t|jj}g}x,|D]$\}}|jds|jd||fqW|jd|jjdj|fS)NrFz%s=%rz%s(%s)z, ) rrr startswithrBrr)r*r)r$rrCrrrrrr+s zNamespace.__repr__N)r*r,r-r%r+rrrrrsrc@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dS)N) _typecode_value)r$rrlockrrrr%szValue.__init__cCs|jS)N)r)r$rrrrsz Value.getcCs ||_dS)N)r)r$rrrrrsz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr*rr)r$rrrr+szValue.__repr__N)T) r*r,r-r%rrr+rrrrrrrs  rcCs tj||S)N)r)rZsequencerrrrArraysrc@s8eZdZdZddZddZd d Zd d Zd dZdS) IteratorProxy__next__r/throwr|cCs|S)Nr)r$rrr__iter__szIteratorProxy.__iter__cGs |jd|S)Nr)r)r$r4rrrrszIteratorProxy.__next__cGs |jd|S)Nr/)r)r$r4rrrr/szIteratorProxy.sendcGs |jd|S)Nr)r)r$r4rrrrszIteratorProxy.throwcGs |jd|S)Nr|)r)r$r4rrrr|szIteratorProxy.closeN)rr/rr|) r*r,r-rrrr/rr|rrrrrs rc@s2eZdZd ZdddZddZd d Zd d ZdS) AcquirerProxyacquirereleaseTNcCs"|dkr|fn||f}|jd|S)Nr )r)r$Zblockingrr4rrrr szAcquirerProxy.acquirecCs |jdS)Nr )r)r$rrrr szAcquirerProxy.releasecCs |jdS)Nr )r)r$rrrrszAcquirerProxy.__enter__cCs |jdS)Nr )r)r$rrrrrrrszAcquirerProxy.__exit__)r r )TN)r*r,r-rr r rrrrrrrs  rc@s4eZdZdZdddZd d Zd d Zdd dZdS)ConditionProxyr r rlnotify notify_allNcCs|jd|fS)Nrl)r)r$rrrrrlszConditionProxy.waitcCs |jdS)Nr )r)r$rrrr szConditionProxy.notifycCs |jdS)Nr )r)r$rrrr szConditionProxy.notify_allcCsh|}|r|S|dk r$tj|}nd}d}x6|sb|dk rP|tj}|dkrPP|j||}q.W|S)Nr)timeZ monotonicrl)r$Z predicaterr7ZendtimeZwaittimerrrwait_fors   zConditionProxy.wait_for)r r rlr r )N)N)r*r,r-rrlr r rrrrrr s  r c@s2eZdZdZddZddZd d Zdd d Zd S) EventProxyrkrrrlcCs |jdS)Nrk)r)r$rrrrkszEventProxy.is_setcCs |jdS)Nr)r)r$rrrrszEventProxy.setcCs |jdS)Nr)r)r$rrrrszEventProxy.clearNcCs|jd|fS)Nrl)r)r$rrrrrlszEventProxy.wait)rkrrrl)N)r*r,r-rrkrrrlrrrrrs rc@sNeZdZdZdddZdd Zd d Zed d ZeddZ eddZ dS) BarrierProxy__getattribute__rlabortresetNcCs|jd|fS)Nrl)r)r$rrrrrl szBarrierProxy.waitcCs |jdS)Nr)r)r$rrrrszBarrierProxy.abortcCs |jdS)Nr)r)r$rrrrszBarrierProxy.resetcCs |jddS)Nrparties)r)r)r$rrrrszBarrierProxy.partiescCs |jddS)Nr n_waiting)r)r)r$rrrrszBarrierProxy.n_waitingcCs |jddS)Nrbroken)r)r)r$rrrrszBarrierProxy.broken)rrlrr)N) r*r,r-rrlrrrrrrrrrrr s   rc@s(eZdZd ZddZddZdd Zd S) NamespaceProxyr __setattr__ __delattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrFrr)objectr)r$r callmethodrrr __getattr__ s   zNamespaceProxy.__getattr__cCs4|ddkrtj|||Stj|d}|d||fS)NrrFrr)rrr)r$rrrrrrr%s  zNamespaceProxy.__setattr__cCs0|ddkrtj||Stj|d}|d|fS)NrrFrr)rrr)r$rrrrrr*s   zNamespaceProxy.__delattr__N)rrr)r*r,r-rrrrrrrrrsrc@s*eZdZdZddZddZeeeZdS) ValueProxyrrcCs |jdS)Nr)r)r$rrrr3szValueProxy.getcCs|jd|fS)Nr)r)r$rrrrr5szValueProxy.setN)rr)r*r,r-rrrrrrrrrr1sr BaseListProxy__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rBcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|jd|f|S)Nr*)r)r$rrrr__iadd__AszListProxy.__iadd__cCs|jd|f|S)Nr/)r)r$rrrrr/DszListProxy.__imul__N)r*r,r-r1r/rrrrr0@sr0 DictProxyrrrrhas_keypopitem setdefaultrIterator ArrayProxy PoolProxyapply apply_asyncr|imapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)r:r>r@r;r<c@seZdZddZddZdS)r8cCs|S)Nr)r$rrrrdszPoolProxy.__enter__cCs |jdS)N)r)r$rrrrrrrfszPoolProxy.__exit__N)r*r,r-rrrrrrr8csc@s eZdZdS)rN)r*r,r-rrrrrms QueueZ JoinableQueuercr]RLock SemaphoreBoundedSemaphore ConditionBarrierPoolrdictF)rr)r)rrr)NNNT)T)r r!r"r#r$r%r&r'r(rBr)r*r+r,rr-r.rr/)r!r"r#rr$r(rrrr3rrrr4r5rr)r$r#r() r9r:r|r;r<rr=r>r?r@r)I__all__ror\rZqueuerrrrcontextr r r r r rrrZ view_typesrr Z view_typerrr8r1rzr9rErGrHrr`raZ XmlListenerZ XmlClientrWrrrrrrrrrrrrr rrrrrr0r2rr7Z BasePoolProxyr8rrArcr]rBrCrDrErFrGrHrrrr s             ; ] 4