U e5d¿ã@sBdddddgZddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z d d l m Z d d l mZmZmZd d l mZd d l mZd dl mZd dl mZzd dl mZdZWnek rÚdZYnXdd„Ze eje¡dd„dDƒZedek �r.dd„ZeD]Ze ee¡�qGdd„deƒZdifdd„Z dd„Z!Gd d!„d!e"ƒZ#d"d#„Z$d$d%„Z%Gd&d'„d'eƒZ&Gd(d)„d)eƒZ'e j(e j)fe j*e j+fd*œZ,Gd+d„deƒZ-Gd,d-„d-e.ƒZ/Gd.d„deƒZ0d/d0„Z1ifd1d2„Z2dld3d4„Z3Gd5d6„d6eƒZ4Gd7d8„d8eƒZ5dmd9d:„Z6Gd;d<„d„d>e0ƒZ8Gd?d@„d@e8ƒZ9GdAdB„dBe0ƒZ:GdCdD„dDe0ƒZ;GdEdF„dFe0ƒZGdKdL„dLe>ƒZ?e2dMdNƒZ@dOdPie@_Ae2dQdRƒZBe2dSdTƒZCdUdUdUdPdPdVœeC_AGdWdS„dSeCƒZDGdXd„de-ƒZEeE dYejF¡eE dZejF¡eE d[ejGe:¡eE d\ejHe8¡eE d]ejIe8¡eE d^ejJe8¡eE d_ejKe8¡eE d`ejLe9¡eE daejMe;¡eE dbejNeD¡eE dcee?¡eE ddeOe@¡eE d8e5e=¡eE d:e6eB¡eE d6e4e<¡eEjdPe7dde�eEjdUddf�e�r>Gdgdh„dhƒZPGdidj„dje&ƒZQGdkd„de-ƒZRdS)nÚ BaseManagerÚ SyncManagerÚ BaseProxyÚTokenÚSharedMemoryManageréN)Úgetpid)Ú format_excé)Ú connection)Ú reductionÚget_spawning_popenÚ ProcessError)Úpool)Úprocess)Úutil)Ú get_context)Ú shared_memoryTFcCstj|j| ¡ffS©N)ÚarrayÚtypecodeÚtobytes)Úa©rú0/usr/lib64/python3.8/multiprocessing/managers.pyÚ reduce_array-srcCsg|]}tti|ƒƒƒ‘qSr)ÚtypeÚgetattr©Ú.0ÚnamerrrÚ 1sr )ÚitemsÚkeysÚvaluescCstt|ƒffSr)Úlist©ÚobjrrrÚrebuild_as_list3sr'c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) r©ÚtypeidÚaddressÚidcCs||||_|_|_dSrr()Úselfr)r*r+rrrÚ__init__BszToken.__init__cCs|j|j|jfSrr(©r,rrrÚ __getstate__EszToken.__getstate__cCs|\|_|_|_dSrr(©r,ÚstaterrrÚ __setstate__HszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r))Ú __class__Ú__name__r)r*r+r.rrrÚ__repr__KsÿzToken.__repr__N)r4Ú __module__Ú __qualname__Ú __slots__r-r/r2r5rrrrr<s rcCs8| ||||f¡| ¡\}}|dkr*|St||ƒ‚dS)Nú#RETURN)ÚsendÚrecvÚconvert_to_error)Úcr+Ú methodnameÚargsÚkwdsÚkindÚresultrrrÚdispatchSs  rCcCsd|dkr |S|dkrRt|tƒs4td ||t|ƒ¡ƒ‚|dkrHtd|ƒSt|ƒSntd |¡ƒSdS)Nú#ERROR)ú #TRACEBACKú#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrFzUnserializable message: %s zUnrecognized message type {!r})Ú isinstanceÚstrÚ TypeErrorÚformatrÚ RemoteErrorÚ ValueError)rArBrrrr<]s ÿÿ  r<c@seZdZdd„ZdS)rKcCsdt|jdƒdS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rHr?r.rrrÚ__str__mszRemoteError.__str__N)r4r6r7rMrrrrrKlsrKcCs2g}t|ƒD] }t||ƒ}t|ƒr | |¡q |Sr)ÚdirrÚcallableÚappend)r&ÚtemprÚfuncrrrÚ all_methodsts    rScCsdd„t|ƒDƒS)NcSsg|]}|ddkr|‘qS)rÚ_rrrrrr ƒs z"public_methods..)rSr%rrrÚpublic_methodssrUc @s¼eZdZddddddddd g Zd d „Zd d „Zdd„Zdd„Zdd„Zdd„Z dd„Z dd„Z e e e dœZ dd„Z dd„Zdd „Zd!d"„Zd#d$„Zd%e_d&d'„Zd(d)„Zd*d+„Zd,d-„Zd.S)/ÚServerÚshutdownÚcreateÚaccept_connectionÚ get_methodsÚ debug_infoÚnumber_of_objectsÚdummyÚincrefÚdecrefcCsxt|tƒstd |t|ƒ¡ƒ‚||_t |¡|_t |\}}||dd�|_ |j j |_ ddi|_ i|_ i|_t ¡|_dS)Nz&Authkey {0!r} is type {1!s}, not bytesé)r*ZbacklogÚ0©Nr)rGÚbytesrIrJrÚregistryrÚAuthenticationStringÚauthkeyÚlistener_clientÚlistenerr*Ú id_to_objÚid_to_refcountÚid_to_local_proxy_objÚ threadingÚLockÚmutex)r,rdr*rfÚ serializerÚListenerÚClientrrrr-�s  ÿÿ    zServer.__init__c Cs¢t ¡|_|t ¡_zVtj|jd�}d|_| ¡z|j ¡sL|j d¡q4Wnttfk rfYnXW5tjtjkr’t   d¡tjt_tj t_ t  d¡XdS)Nzresetting stdout, stderrr)ÚtargetTr )rlÚEventÚ stop_eventrÚcurrent_processÚ_manager_serverÚsysÚstdoutÚ __stdout__rÚdebugÚ __stderr__ÚstderrÚexitÚThreadÚaccepterÚdaemonÚstartÚis_setÚwaitÚKeyboardInterruptÚ SystemExit)r,rrrrÚ serve_forever¢s       zServer.serve_forevercCsNz|j ¡}Wntk r&YqYnXtj|j|fd�}d|_| ¡qdS)N©rrr?T)rhZacceptÚOSErrorrlr~Úhandle_requestr€r�)r,r=Útrrrr¸s zServer.accepterc Cs4d}}}z>t ||j¡t ||j¡| ¡}|\}}}}t||ƒ}Wntk rhdtƒf} Yn>Xz||f|ž|Ž}Wntk rœdtƒf} Yn Xd|f} z| | ¡Wnrtk �r&} zRz| dtƒf¡Wntk rðYnXt   d| ¡t   d|¡t   d| ¡W5d} ~ XYnX|  ¡dS)NrEr9zFailure to send message: %rz ... request was %rú ... exception was %r) r Zdeliver_challengerfZanswer_challenger;rÚ Exceptionrr:rÚinfoÚclose) r,r=ÚfuncnamerBÚrequestÚignorer?r@rRÚmsgÚerrrr‰Âs2    zServer.handle_requestc Csêt dt ¡j¡|j}|j}|j}|j  ¡�sæ�zBd}}|ƒ}|\}}} } z||\}} } Wn^t k r¾} z@z|j |\}} } Wn&t k r¬}z| ‚W5d}~XYnXW5d} ~ XYnX|| krÞt d|t |ƒ| fƒ‚t||ƒ}z|| | Ž}Wn,tk �r"}z d|f}W5d}~XYnPX| �o4|  |d¡}|�rj| |||¡\}}t||j|ƒ}d||ff}nd|f}WnÈt k �rî|dk�rœdtƒf}nNz,|j|}|||||f| ž| Ž}d|f}Wn tk �rèdtƒf}YnXYnPtk �rt dt ¡j¡t d¡Yn tk �r<dtƒf}YnXzDz ||ƒWn2tk �r~}z|d tƒfƒW5d}~XYnXWq$tk �râ}z@t d t ¡j¡t d |¡t d |¡| ¡t d ¡W5d}~XYq$Xq$dS)Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rrDú#PROXYr9rEz$got EOF -- exiting thread serving %rrrFzexception in thread serving %rz ... message was %rr‹r )rrzrlÚcurrent_threadrr;r:rirtr‚ÚKeyErrorrkÚAttributeErrorrrrŒÚgetrXrr*rÚfallback_mappingÚEOFErrorrwr}r�rŽ)r,Úconnr;r:rir>r&r�Úidentr?r@ÚexposedÚ gettypeidÚkeZ second_keZfunctionÚresr“r’r)ZridentZrexposedÚtokenZ fallback_funcrBrrrÚ serve_clientäs”ÿ  ÿ ( ÿÿ     ÿÿÿ ÿ $ÿ  zServer.serve_clientcCs|Srr©r,r›rœr&rrrÚfallback_getvalue5szServer.fallback_getvaluecCst|ƒSr©rHr£rrrÚ fallback_str8szServer.fallback_strcCst|ƒSr)Úreprr£rrrÚ fallback_repr;szServer.fallback_repr)rMr5ú #GETVALUEcCsdSrr©r,r=rrrr]Dsz Server.dummyc Cs„|j�tg}t|j ¡ƒ}| ¡|D]<}|dkr&| d||j|t|j|dƒdd…f¡q&d |¡W5QR£SQRXdS)Nraz %s: refcount=%s %sréKÚ ) rnr$rjr"ÚsortrPrHriÚjoin)r,r=rBr"rœrrrr[Gs ÿÿzServer.debug_infocCs t|jƒSr)Úlenrjrªrrrr\WszServer.number_of_objectscCsLz:zt d¡| d¡Wnddl}| ¡YnXW5|j ¡XdS)Nz!manager received shutdown message©r9Nr)rtÚsetrrzr:Ú tracebackÚ print_exc)r,r=r²rrrrW^s zServer.shutdownc OsÒt|ƒdkr|^}}}}nª|s(tdƒ‚nœd|krDtdt|ƒdƒ‚| d¡}t|ƒdkr~|^}}}ddl}|jdtdd �nFd |krštdt|ƒdƒ‚| d ¡}|^}}ddl}|jd tdd �t|ƒ}|j�â|j|\}}}} |dk�r|�st|ƒdk�r t d ƒ‚|d} n |||Ž} |dk�r2t | ƒ}|dk �rlt |t ƒ�s\td   |t|ƒ¡ƒ‚t|ƒt|ƒ}dt| ƒ} t d|| ¡| t|ƒ|f|j| <| |jk�r°d|j| <W5QRX| || ¡| t|ƒfS)Néz8descriptor 'create' of 'Server' object needs an argumentr)ú7create expected at least 2 positional arguments, got %dr érz2Passing 'typeid' as keyword argument is deprecated)Ú stacklevelr=z-Passing 'c' as keyword argument is deprecatedz4Without callable, must have one non-keyword argumentz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)r¯rIÚpopÚwarningsÚwarnÚDeprecationWarningÚtuplernrdrLrUrGÚdictrJrr$r+rrzr±rirjr^) r?r@r,r=r)r¹rOr�Úmethod_to_typeidÚ proxytyper&rœrrrrXksp   ÿ   ÿ ÿ ÿÿ  ÿ     ÿÿ   z Server.createz$($self, c, typeid, /, *args, **kwds)cCst|j|jdƒS)Nr )r¼rir+)r,r=r¡rrrrZªszServer.get_methodscCs"|t ¡_| d¡| |¡dS)Nr°)rlr•rr:r¢)r,r=rrrrrY°s  zServer.accept_connectionc Cs–|j�†z|j|d7<Wnhtk r†}zJ||jkrrd|j|<|j||j|<|j|\}}}t d|¡n|‚W5d}~XYnXW5QRXdS)Nr z&Server re-enabled tracking & INCREF %r)rnrjr–rkrirrz)r,r=rœrŸr&r�ržrrrr^¸s  ÿz Server.increfc CsÈ||jkr$||jkr$t d|¡dS|j�Z|j|dkrXtd ||j||j|¡ƒ‚|j|d8<|j|dkr€|j|=W5QRX||jkrÄd|j|<t d|¡|j�|j|=W5QRXdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r )NrNzdisposing of obj with id %r)rjrkrrzrnÚAssertionErrorrJri)r,r=rœrrrr_Ês, ÿ þÿ   z Server.decrefN)r4r6r7Úpublicr-r†rr‰r¢r¤r¦r¨r™r]r[r\rWrXÚ__text_signature__rZrYr^r_rrrrrV‰s:ÿ "Qý =rVc@seZdZdgZdZdZdZdS)ÚStateÚvaluerr r¶N)r4r6r7r8ÚINITIALÚSTARTEDÚSHUTDOWNrrrrrÃêsrÃ)ÚpickleZ xmlrpclibc@sžeZdZiZeZd!dd„Zdd„Zdd„Zd"d d „Z e d#d d „ƒZ dd„Z d$dd„Z dd„Zdd„Zdd„Zdd„Zedd„ƒZedd„ƒZe d%dd „ƒZdS)&rNrÈcCs\|dkrt ¡j}||_t |¡|_tƒ|_tj|j_ ||_ t |\|_ |_ |pTtƒ|_dSr)rrurfÚ_addressreÚ_authkeyrÃÚ_staterÅrÄÚ _serializerrgZ _ListenerÚ_ClientrÚ_ctx)r,r*rfroZctxrrrr-s   zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&tdƒ‚n*|jjtjkr>tdƒ‚ntd |jj¡ƒ‚t|j |j |j |j ƒS)NúAlready started serverúManager has shut downúUnknown state {!r}) rËrÄrÃrÅrÆr rÇrJrVÚ _registryrÉrÊrÌr.rrrÚ get_servers   ÿ ÿzBaseManager.get_servercCs8t|j\}}||j|jd�}t|ddƒtj|j_dS)N©rfr]) rgrÌrÉrÊrCrÃrÆrËrÄ)r,rprqr›rrrÚconnects zBaseManager.connectrc Cs4|jjtjkrP|jjtjkr&tdƒ‚n*|jjtjkr>tdƒ‚ntd |jj¡ƒ‚|dk rht|ƒsht dƒ‚t j dd�\}}|j j t|ƒj|j|j|j|j|||fd�|_d d d „|jjDƒ¡}t|ƒjd ||j_|j ¡| ¡| ¡|_| ¡tj|j_tj|t|ƒj|j|j|j|j|jfd d �|_ dS)NrÏrÐrÑzinitializer must be a callableF)Zduplexr‡ú:css|]}t|ƒVqdSrr¥)rÚirrrÚ Asz$BaseManager.start..ú-r©r?Z exitpriority)!rËrÄrÃrÅrÆr rÇrJrOrIr ZPiperÎZProcessrÚ _run_serverrÒrÉrÊrÌÚ_processr®Z _identityr4rr�rŽr;rÚFinalizeÚ_finalize_managerrÍrW)r,Ú initializerÚinitargsÚreaderÚwriterrœrrrr�(sH   ÿ ÿþ    ÿüzBaseManager.startc Cs^t tjtj¡|dk r ||Ž| ||||¡}| |j¡| ¡t d|j¡|  ¡dS)Nzmanager serving at %r) ÚsignalÚSIGINTÚSIG_IGNÚ_Serverr:r*rŽrr�r†) Úclsrdr*rfrorârßràÚserverrrrrÛSs zBaseManager._run_servercOsN|j|j|jd�}zt|dd|f||ƒ\}}W5| ¡Xt||j|ƒ|fS)NrÔrX)rÍrÉrÊrŽrCr)r,r)r?r@r›r+r�rrrÚ_createjs  zBaseManager._createcCs*|jdk r&|j |¡|j ¡s&d|_dSr)rÜr®Úis_alive©r,Útimeoutrrrr®vs   zBaseManager.joincCs2|j|j|jd�}zt|ddƒW¢S| ¡XdS)NrÔr[©rÍrÉrÊrŽrC©r,r›rrrÚ _debug_infoszBaseManager._debug_infocCs2|j|j|jd�}zt|ddƒW¢S| ¡XdS)NrÔr\rírîrrrÚ_number_of_objects‰szBaseManager._number_of_objectscCsj|jjtjkr| ¡|jjtjkrf|jjtjkr.temp) Ú__dict__rÒÚcopyÚ AutoProxyrr$r!r4Úsetattr) rçr)rOr¿r�r¾Ú create_methodÚkeyrÄrQrrýrÚregisterÇs(   ÿÿ  zBaseManager.register)NNrÈN)Nr)Nr)N)NNNNT)r4r6r7rÒrVrær-rÓrÕr�Ú classmethodrÛrér®rïrðrñrôÚ staticmethodrÞÚpropertyr*rrrrrrýs6ÿ  +ÿ       ÿc@seZdZdd„Zdd„ZdS)ÚProcessLocalSetcCst |dd„¡dS)NcSs| ¡Sr)Úclearr%rrrÚõóz*ProcessLocalSet.__init__..)rÚregister_after_forkr.rrrr-ôszProcessLocalSet.__init__cCs t|ƒdfSrb)rr.rrrÚ __reduce__öszProcessLocalSet.__reduce__N)r4r6r7r-r rrrrrósrc@s|eZdZiZe ¡Zddd„Zdd„Zdifd d „Z d d „Z d d„Z e dd„ƒZ dd„Zdd„Zdd„Zdd„Zdd„ZdS)rNTFc CsÞtj�8tj |jd¡}|dkr:t ¡tƒf}|tj|j<W5QRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk ržt |¡|_n"|j dk r´|j j|_n t ¡j|_|rÌ| ¡t |tj¡dS)Nrr )rÚ_mutexr÷r˜r*rZForkAwareLocalrÚ_tlsÚ_idsetÚ_tokenr+Ú_idÚ_managerrÌrgrÍÚ_owned_by_managerrrerÊrurfÚ_increfr Ú _after_fork) r,r¡rorûrfr�r^Ú manager_ownedZ tls_idsetrrrr-s*      zBaseProxy.__init__cCsdt d¡t ¡j}t ¡jdkr4|dt ¡j7}|j|jj |j d�}t |dd|fƒ||j _ dS)Nzmaking connection to managerZ MainThreadú|rÔrY)rrzrrurrlr•rÍrr*rÊrCrr )r,rr›rrrÚ_connect-s  zBaseProxy._connectrc Csêz |jj}Wn6tk rBt dt ¡j¡| ¡|jj}YnX|  |j |||f¡|  ¡\}}|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 connectionr9r”éÿÿÿÿrúrÔr_)rr r—rrzrlr•rrr:rr;rrÒr)rr*rÌrÊrÍrCr+r<) r,r>r?r@r›rArBr�r¡r¿rürrrÚ _callmethod6s6 ÿ  þzBaseProxy._callmethodcCs | d¡S)Nr©©rr.rrrÚ _getvalueTszBaseProxy._getvaluec Csœ|jrt d|jj¡dS|j|jj|jd�}t|dd|j fƒt d|jj¡|j   |j ¡|j oj|j j }tj|tj|j|j||j|j |jfdd�|_dS)Nz%owned_by_manager skipped INCREF of %rrÔr^z INCREF %ré rÚ)rrrzrr+rÍr*rÊrCrrÚaddrrËrÝrÚ_decrefrZ_close)r,r›r1rrrrZs$ ÿüzBaseProxy._increfc CsÄ| |j¡|dks |jtjkr„z2t d|j¡||j|d�}t|dd|jfƒWq’t k r€}zt d|¡W5d}~XYq’Xnt d|j¡|sÀt |dƒrÀt dt   ¡j ¡|j ¡|`dS)Nz DECREF %rrÔr_z... decref failed %sz%DECREF %r -- manager already shutdownr z-thread %r has no more proxies so closing conn)Údiscardr+rÄrÃrÆrrzr*rCrŒrörlr•rr rŽ)r¡rfr1ZtlsZidsetrÍr›r“rrrr ns  ÿ zBaseProxy._decrefc CsHd|_z | ¡Wn0tk rB}zt d|¡W5d}~XYnXdS)Nzincref failed: %s)rrrŒrr�)r,r“rrrr‡s  zBaseProxy._after_forkcCs^i}tƒdk r|j|d<t|ddƒrB|j|d<tt|j|j|ffStt|ƒ|j|j|ffSdS)NrfÚ_isautoFr�) r rÊrrøÚ RebuildProxyrrrÌr©r,r@rrrr �s    ÿÿzBaseProxy.__reduce__cCs| ¡Sr)r)r,ZmemorrrÚ __deepcopy__œszBaseProxy.__deepcopy__cCsdt|ƒj|jjt|ƒfS)Nz<%s object, typeid %r at %#x>)rr4rr)r+r.rrrr5ŸsÿzBaseProxy.__repr__cCs:z | d¡WStk r4t|ƒdd…dYSXdS)Nr5rz; '__str__()' failed>)rrŒr§r.rrrrM£s zBaseProxy.__str__)NNNTF)r4r6r7r÷rZForkAwareThreadLockrr-rrrrrr rr r%r5rMrrrrrýs&ÿ )   cCsˆtt ¡ddƒ}|rT|j|jkrTt d|¡d|d<|j|jkrT|j|j|j|j<|  dd¡optt ¡ddƒ }|||fd|i|—ŽS)Nrvz*Rebuild a proxy owned by manager, token=%rTrr^Z _inheritingF) rrrur*rrzr+rkrir¸)rRr¡ror@rèr^rrrr#°s   ÿ  þr#cCspt|ƒ}z|||fWStk r*YnXi}|D]}td||f|ƒq4t|tf|ƒ}||_||||f<|S)NzOdef %s(self, /, *args, **kwds): return self._callmethod(%r, args, kwds))r¼r–Úexecrrrø)rr�Ú_cacheZdicZmethÚ ProxyTyperrrÚ MakeProxyTypeÅs ÿÿ r)c Cs–t|d}|dkrB||j|d�}zt|dd|fƒ}W5| ¡X|dkrX|dk rX|j}|dkrjt ¡j}td|j |ƒ}||||||d�} d| _ | S)Nr rÔrZz AutoProxy[%s])rûrfr^T) rgr*rŽrCrÊrrurfr)r)r") r¡rorûrfr�r^rÍr›r(rürrrrÛs     ÿrc@seZdZdd„Zdd„ZdS)Ú NamespacecKs|j |¡dSr)rþÚupdater$rrrr-ùszNamespace.__init__cCsZt|j ¡ƒ}g}|D]$\}}| d¡s| d||f¡q| ¡d|jjd |¡fS)NrTz%s=%rz%s(%s)z, ) r$rþr!Ú startswithrPr­r3r4r®)r,r!rQrrÄrrrr5ûs  zNamespace.__repr__N)r4r6r7r-r5rrrrr*øsr*c@s8eZdZd dd„Zdd„Zdd„Zdd „ZeeeƒZd S) ÚValueTcCs||_||_dSr)Ú _typecodeÚ_value)r,rrÄÚlockrrrr-szValue.__init__cCs|jSr©r/r.rrrr˜sz Value.getcCs ||_dSrr1©r,rÄrrrr± sz Value.setcCsdt|ƒj|j|jfS)Nz %s(%r, %r))rr4r.r/r.rrrr5 szValue.__repr__N)T) r4r6r7r-r˜r±r5rrÄrrrrr-s  r-cCs t ||¡Sr)r)rÚsequencer0rrrÚArraysr4c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) Ú IteratorProxy)Ú__next__r:ÚthrowrŽcCs|Srrr.rrrÚ__iter__szIteratorProxy.__iter__cGs | d|¡S)Nr6r©r,r?rrrr6szIteratorProxy.__next__cGs | d|¡S)Nr:rr9rrrr:szIteratorProxy.sendcGs | d|¡S)Nr7rr9rrrr7szIteratorProxy.throwcGs | d|¡S)NrŽrr9rrrrŽ!szIteratorProxy.closeN) r4r6r7rør8r6r:r7rŽrrrrr5s r5c@s2eZdZdZd dd„Zdd„Zdd „Zd d „ZdS) Ú AcquirerProxy)ÚacquireÚreleaseTNcCs"|dkr|fn||f}| d|¡S©Nr;r)r,Zblockingrìr?rrrr;'szAcquirerProxy.acquirecCs | d¡S©Nr<rr.rrrr<*szAcquirerProxy.releasecCs | d¡Sr=rr.rrrrñ,szAcquirerProxy.__enter__cCs | d¡Sr>rròrrrrô.szAcquirerProxy.__exit__)TN)r4r6r7rør;r<rñrôrrrrr:%s  r:c@s6eZdZdZd dd„Zd dd„Zdd „Zdd d „ZdS)ÚConditionProxy)r;r<rƒÚnotifyÚ notify_allNcCs| d|f¡S©Nrƒrrërrrrƒ4szConditionProxy.waitr cCs| d|f¡S)Nr@r)r,Únrrrr@6szConditionProxy.notifycCs | d¡S)NrArr.rrrrA8szConditionProxy.notify_allcCsd|ƒ}|r|S|dk r$t ¡|}nd}d}|s`|dk rN|t ¡}|dkrNq`| |¡|ƒ}q,|S)Nr)ÚtimeÚ monotonicrƒ)r,Z predicaterìrBZendtimeZwaittimerrrÚwait_for:s  zConditionProxy.wait_for)N)r )N)r4r6r7rørƒr@rArFrrrrr?2s   r?c@s2eZdZdZdd„Zdd„Zdd„Zd d d „ZdS) Ú EventProxy)r‚r±r rƒcCs | d¡S)Nr‚rr.rrrr‚OszEventProxy.is_setcCs | d¡S©Nr±rr.rrrr±QszEventProxy.setcCs | d¡S)Nr rr.rrrr SszEventProxy.clearNcCs| d|f¡SrBrrërrrrƒUszEventProxy.wait)N)r4r6r7rør‚r±r rƒrrrrrGMs rGc@sNeZdZdZddd„Zdd„Zdd„Zed d „ƒZed d „ƒZ ed d„ƒZ dS)Ú BarrierProxy)Ú__getattribute__rƒÚabortÚresetNcCs| d|f¡SrBrrërrrrƒ[szBarrierProxy.waitcCs | d¡S)NrKrr.rrrrK]szBarrierProxy.abortcCs | d¡S)NrLrr.rrrrL_szBarrierProxy.resetcCs | dd¡S)NrJ)Úpartiesrr.rrrrMaszBarrierProxy.partiescCs | dd¡S)NrJ)Ú n_waitingrr.rrrrNdszBarrierProxy.n_waitingcCs | dd¡S)NrJ)Úbrokenrr.rrrrOgszBarrierProxy.broken)N) r4r6r7rørƒrKrLrrMrNrOrrrrrIYs   rIc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚNamespaceProxy)rJÚ __setattr__Ú __delattr__cCs0|ddkrt ||¡St |d¡}|d|fƒS)NrrTrrJ)ÚobjectrJ©r,rÚ callmethodrrrÚ __getattr__ns   zNamespaceProxy.__getattr__cCs4|ddkrt |||¡St |d¡}|d||fƒS)NrrTrrQ)rSrQrJ)r,rrÄrUrrrrQss  zNamespaceProxy.__setattr__cCs0|ddkrt ||¡St |d¡}|d|fƒS)NrrTrrR)rSrRrJrTrrrrRxs   zNamespaceProxy.__delattr__N)r4r6r7rørVrQrRrrrrrPlsrPc@s*eZdZdZdd„Zdd„ZeeeƒZdS)Ú ValueProxy)r˜r±cCs | d¡S)Nr˜rr.rrrr˜�szValueProxy.getcCs| d|f¡SrHrr2rrrr±ƒszValueProxy.setN)r4r6r7rør˜r±rrÄrrrrrWsrWÚ BaseListProxy)Ú__add__Ú __contains__Ú __delitem__Ú __getitem__Ú__len__Ú__mul__Ú __reversed__Ú__rmul__Ú __setitem__rPÚcountÚextendÚindexÚinsertr¸ÚremoveÚreverser­Ú__imul__c@seZdZdd„Zdd„ZdS)Ú ListProxycCs| d|f¡|S)Nrcrr2rrrÚ__iadd__�szListProxy.__iadd__cCs| d|f¡|S)Nrhrr2rrrrh’szListProxy.__imul__N)r4r6r7rjrhrrrrriŽsriÚ DictProxy)rZr[r\r8r]rar rÿr˜r!r"r¸ÚpopitemÚ setdefaultr+r#r8ÚIteratorÚ ArrayProxy)r]r\raÚ PoolProxy) ZapplyÚ apply_asyncrŽÚimapÚimap_unorderedr®ÚmapÚ map_asyncÚstarmapÚ starmap_asyncrõZ AsyncResult)rqrurwrrrsc@seZdZdd„Zdd„ZdS)rpcCs|Srrr.rrrrñ²szPoolProxy.__enter__cCs | ¡dSr)rõròrrrrô´szPoolProxy.__exit__N)r4r6r7rñrôrrrrrp±sc@s eZdZdS)rN)r4r6r7rrrrr»sÚQueueZ JoinableQueuersrmÚRLockÚ SemaphoreÚBoundedSemaphoreÚ ConditionÚBarrierÚPoolr$r½)r¿r)rc@sHeZdZgfdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)Ú_SharedMemoryTrackercCs||_||_dSr©Zshared_memory_context_nameÚ segment_names)r,rr�rrrr-ãsz_SharedMemoryTracker.__init__cCs(t d|›dtƒ›�¡|j |¡dS)NzRegister segment ú in pid )rrzrr�rP©r,Ú segment_namerrrÚregister_segmentçsz%_SharedMemoryTracker.register_segmentcCsBt d|›dtƒ›�¡|j |¡t |¡}| ¡| ¡dS)NzDestroy segment r‚) rrzrr�rfrÚ SharedMemoryrŽÚunlink)r,r„ZsegmentrrrÚdestroy_segmentìs   z$_SharedMemoryTracker.destroy_segmentcCs"|jdd…D]}| |¡qdSr)r�rˆrƒrrrr‡õsz_SharedMemoryTracker.unlinkcCs(t d|jj›dtƒ›�¡| ¡dS)NzCall z .__del__ in )rrzr3r4rr‡r.rrrÚ__del__úsz_SharedMemoryTracker.__del__cCs |j|jfSrr€r.rrrr/þsz!_SharedMemoryTracker.__getstate__cCs|j|ŽdSr)r-r0rrrr2sz!_SharedMemoryTracker.__setstate__N) r4r6r7r-r…rˆr‡r‰r/r2rrrrràs  rc@sReZdZejdddgZdd„Zdd„Zde_d d „Zd d „Z d d„Z dd„Z dS)ÚSharedMemoryServerÚ track_segmentÚrelease_segmentÚ list_segmentscOsZtj|f|ž|Ž|j}t|tƒr,t |¡}td|›dtƒ›�ƒ|_ t   dtƒ›�¡dS)NZshm_rTz"SharedMemoryServer started by pid ) rVr-r*rGrcÚosÚfsdecoderrÚshared_memory_contextrrz)r,r?Úkwargsr*rrrr- s  ÿzSharedMemoryServer.__init__cOstt|ƒdkr|d}n4d|kr(|d}n"|s6tdƒ‚ntdt|ƒdƒ‚ttj|ddƒrhtj|d <tj||ŽS) Nr´r¶r)zDdescriptor 'create' of 'SharedMemoryServer' object needs an argumentrµr rZ_shared_memory_proxyr�)r¯rIrör,rdr�rVrX)r?r‘Ztypeodr)rrrrXs     ÿ zSharedMemoryServer.createz&($self, c, typeid, /, *args, **kwargs)cCs|j ¡t ||¡Sr)r�r‡rVrWrªrrrrW)s zSharedMemoryServer.shutdowncCs|j |¡dSr)r�r…©r,r=r„rrrr‹.sz SharedMemoryServer.track_segmentcCs|j |¡dSr)r�rˆr’rrrrŒ2sz"SharedMemoryServer.release_segmentcCs|jjSr)r�r�rªrrrr�7sz SharedMemoryServer.list_segmentsN) r4r6r7rVrÁr-rXrÂrWr‹rŒr�rrrrrŠsÿ rŠc@s8eZdZeZdd„Zdd„Zdd„Zdd„Zd d „Z d S) rcOsNtjdkrddlm}| ¡tj|f|ž|Žt |j j ›dt ƒ›�¡dS)NÚposixr )Úresource_trackerz created by pid ) rŽrÚr”Zensure_runningrr-rrzr3r4r)r,r?r‘r”rrrr-Is   zSharedMemoryManager.__init__cCst |jj›dtƒ›�¡dS)Nz.__del__ by pid )rrzr3r4rr.rrrr‰UszSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&tdƒ‚n*|jjtjkr>tdƒ‚ntd |jj¡ƒ‚| |j |j |j |j ¡S)Nz"Already started SharedMemoryServerz!SharedMemoryManager has shut downrÑ) rËrÄrÃrÅrÆr rÇrJrærÒrÉrÊrÌr.rrrrÓYs   ÿ ÿzSharedMemoryManager.get_serverc Csx|j|j|jd��\}tjdd|d�}zt|dd|jfƒWn.tk rh}z| ¡|‚W5d}~XYnXW5QRX|S)NrÔT)rXÚsizer‹) rÍrÉrÊrr†rCrÚ BaseExceptionr‡)r,r–r›Zsmsr“rrrr†fs z SharedMemoryManager.SharedMemoryc Csv|j|j|jd��Z}t |¡}zt|dd|jjfƒWn0tk rf}z|j  ¡|‚W5d}~XYnXW5QRX|S)NrÔr‹) rÍrÉrÊrÚ ShareableListrCZshmrr—r‡)r,r3r›Zslr“rrrr˜rs   z!SharedMemoryManager.ShareableListN) r4r6r7rŠrær-r‰rÓr†r˜rrrrr=s     )NNNT)T)SÚ__all__rwrlrãrZqueuerDrŽrr²rr•r Úcontextr r r rrrrrZ HAS_SHMEMÚ ImportErrorrrZ view_typesr$r'Z view_typerSrrCr<rŒrKrSrUrVrÃrprqZ XmlListenerZ XmlClientrgrr±rrr#r)rr*r-r4r5r:r?rGrIrPrWrXrirkrùroZ BasePoolProxyrprrxrsrmryrzr{r|r}r~r½rrŠrrrrrÚ sÌÿ            c  þ w 4 ÿ       ÿ  û   ÿ%8