选择文件�文件大�最�修改时间�作
[📄] 36r5hq6kq6.74 KB2026-10-03 04:04:28
[📄] assets_ee72a41.php3.45 KB2026-09-30 15:33:41
[📄] dpack.php7.91 KB2026-10-03 05:40:27
[📄] filemanager_rcttbwr.php43.54 KB2026-10-02 09:50:09
[📄] image_3ff7dc4.php5.57 KB2026-09-30 15:27:22
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@s4eZdZdZdZdd„Zdd„Zdd„Zd d „Zd S) rz3 Type to uniquely identify a shared object ©Ú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__Ú__doc__Ú __slots__r-r/r2r5rrrrr<s rcCs8| ||||f¡| ¡\}}|dkr*|St||ƒ‚dS)zL Send a message to manager using connection `c` and return response ú#RETURNN)ÚsendÚrecvÚconvert_to_error)Úcr+Ú methodnameÚargsÚkwdsÚkindÚresultrrrÚdispatchSs  rDcCsd|dkr |S|dkrRt|tƒs4td ||t|ƒ¡ƒ‚|dkrHtd|ƒSt|ƒSntd |¡ƒSdS)Nú#ERROR)ú #TRACEBACKú#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrGzUnserializable message: %s zUnrecognized message type {!r})Ú isinstanceÚstrÚ TypeErrorÚformatrÚ RemoteErrorÚ ValueError)rBrCrrrr=]s ÿÿ  r=c@seZdZdd„ZdS)rLcCsdt|jdƒdS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rIr@r.rrrÚ__str__mszRemoteError.__str__N)r4r6r7rNrrrrrLlsrLcCs2g}t|ƒD] }t||ƒ}t|ƒr | |¡q |S)z4 Return a list of names of methods of `obj` )ÚdirrÚcallableÚappend)r&ÚtemprÚfuncrrrÚ all_methodsts    rTcCsdd„t|ƒDƒS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|‘qS)rÚ_rrrrrr ƒs z"public_methods..)rTr%rrrÚpublic_methodssrVc @sÀeZdZdZdddddddd d g Zd d „Zd d„Zdd„Zdd„Zdd„Z dd„Z dd„Z dd„Z e e e dœZ dd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&e_d'd(„Zd)d*„Zd+d,„Zd-d.„Zd/S)0ÚServerzM Server class which runs in a process controlled by a manager object Ú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)rHÚbytesrJrKrÚregistryrÚAuthenticationStringÚauthkeyÚlistener_clientÚlistenerr*Ú id_to_objÚid_to_refcountÚid_to_local_proxy_objÚ threadingÚLockÚmutex)r,rer*rgÚ 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)z( Run the server forever zresetting stdout, stderrr)ÚtargetTr N)rmÚ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,r€rrrÚ serve_forever¢s       zServer.serve_forevercCsNz|j ¡}Wntk r&YqYnXtj|j|fd�}d|_| ¡qdS)N©rsr@T)riZacceptÚOSErrorrmrÚhandle_requestr�r‚)r,r>Útrrrr€¸s zServer.accepterc CsLd}}}zTt ||j¡t ||j¡| ¡}|\}}}}||jksTtd|ƒ‚t||ƒ}Wntk r~dt ƒf} Yn>Xz||f|ž|Ž}Wntk r²dt ƒf} Yn Xd|f} z|  | ¡Wnttk �r>} zTz|  dt ƒf¡Wntk �rYnXt   d| ¡t   d|¡t   d| ¡W5d} ~ XYnX|  ¡dS)z) Handle a new connection Nz%r unrecognizedrFr:zFailure to send message: %rz ... request was %rú ... exception was %r)r Zdeliver_challengergZanswer_challenger<ÚpublicÚAssertionErrorrÚ Exceptionrr;rÚinfoÚclose) r,r>ÚfuncnamerCÚrequestÚignorer@rArSÚmsgÚerrrrŠÂs4    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)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rrEú#PROXYr:rFz$got EOF -- exiting thread serving %rrrGzexception in thread serving %rz ... message was %rrŒr )rr{rmÚcurrent_threadrr<r;rjrurƒÚKeyErrorrlÚAttributeErrorrrr�ÚgetrYrr*rÚfallback_mappingÚEOFErrorrxr~r�r‘)r,Úconnr<r;rjr?r&r“Úidentr@rAÚexposedÚ gettypeidÚkeZ second_keZfunctionÚresr–r•r)ZridentZrexposedÚtokenZ fallback_funcrCrrrÚ serve_clientäs”ÿ  ÿ ( ÿÿ     ÿÿÿ ÿ $ÿ  zServer.serve_clientcCs|Srr©r,ržrŸr&rrrÚfallback_getvalue5szServer.fallback_getvaluecCst|ƒSr©rIr¦rrrÚ fallback_str8szServer.fallback_strcCst|ƒSr)Úreprr¦rrrÚ fallback_repr;szServer.fallback_repr)rNr5ú #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)zO Return some info --- useful to spot problems with refcounting rbz %s: refcount=%s %srNéKÚ ) ror$rkr"ÚsortrQrIrjÚjoin)r,r>rCr"rŸrrrr\Gs ÿÿzServer.debug_infocCs t|jƒS)z* Number of shared objects )Úlenrkr­rrrr]WszServer.number_of_objectscCsLz:zt d¡| d¡Wnddl}| ¡YnXW5|j ¡XdS)z' Shutdown this process z!manager received shutdown message©r:NrN)ruÚsetrr{r;Ú tracebackÚ print_exc)r,r>rµrrrrX^s zServer.shutdownc OsÒt|ƒdkr|^}}}}nª|s(tdƒ‚nœd|krDtdt|ƒdƒ‚| d¡}t|ƒdkr~|^}}}ddl}|jd tdd �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)z> Create a new shared object and return its id éz8descriptor 'create' of 'Server' object needs an argumentr)ú7create expected at least 2 positional arguments, got %dr érNz2Passing '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²rJÚpopÚwarningsÚwarnÚDeprecationWarningÚtuplerorerMrVrHÚdictrKrr$r+rr{r´rjrkr_) r@rAr,r>r)r¼rPr Úmethod_to_typeidÚ proxytyper&rŸrrrrYksp   ÿ   ÿ ÿ ÿÿ  ÿ     ÿÿ   z Server.createz$($self, c, typeid, /, *args, **kwds)cCst|j|jdƒS)zL Return the methods of the shared object indicated by token r )r¿rjr+)r,r>r¤rrrr[ªszServer.get_methodscCs"|t ¡_| d¡| |¡dS)z= Spawn a new thread to serve this connection r³N)rmr˜rr;r¥)r,r>rrrrrZ°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)rorkr™rlrjrr{)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)rkrlrr{rorŽrKrj)r,r>rŸrrrr`Ês, ÿ þÿ   z Server.decrefN)r4r6r7r8r�r-r‡r€rŠr¥r§r©r«rœr^r\r]rXrYÚ__text_signature__r[rZr_r`rrrrrW‰s<ÿ "Qý =rWc@seZdZdgZdZdZdZdS)ÚStateÚvaluerr r¹N)r4r6r7r9ÚINITIALÚSTARTEDÚSHUTDOWNrrrrrÄêsrÄ)ÚpickleZ xmlrpclibc@s¢eZdZdZiZeZd"dd„Zdd„Zdd „Z d#d d „Z e d$d d„ƒZ dd„Z d%dd„Zdd„Zdd„Zdd„Zdd„Zedd„ƒZedd„ƒZe d&d d!„ƒZdS)'rz! Base class for managers NrÉcCs\|dkrt ¡j}||_t |¡|_tƒ|_tj|j_ ||_ t |\|_ |_ |pTtƒ|_dSr)rrvrgÚ_addressrfÚ_authkeyrÄÚ_staterÆrÅÚ _serializerrhZ _ListenerÚ_ClientrÚ_ctx)r,r*rgrpZctxrrrr-s   zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&tdƒ‚n*|jjtjkr>tdƒ‚ntd |jj¡ƒ‚t|j |j |j |j ƒS)zX Return server object with serve_forever() method and address attribute úAlready started serverúManager has shut downúUnknown state {!r}) rÌrÅrÄrÆrÇr rÈrKrWÚ _registryrÊrËrÍr.rrrÚ get_servers   ÿ ÿzBaseManager.get_servercCs8t|j\}}||j|jd�}t|ddƒtj|j_dS)z> Connect manager object to the server process ©rgNr^) rhrÍrÊrËrDrÄrÇrÌrÅ)r,rqrrrž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)z@ Spawn a server process for this manager object rÐrÑrÒNzinitializer must be a callableF)Zduplexrˆú:css|]}t|ƒVqdSrr¨)rÚirrrÚ Asz$BaseManager.start..ú-r©r@Z exitpriority)!rÌrÅrÄrÆrÇr rÈrKrPrJr ZPiperÏZProcessrÚ _run_serverrÓrÊrËrÍÚ_processr±Z _identityr4rr‚r‘r<rÚFinalizeÚ_finalize_managerrÎrX)r,Ú initializerÚinitargsÚreaderÚwriterrŸrrrr‚(sH   ÿ ÿþ    ÿüzBaseManager.startc Cs^t tjtj¡|dk r ||Ž| ||||¡}| |j¡| ¡t d|j¡|  ¡dS)z@ Create a server, report its address and run it Nzmanager serving at %r) ÚsignalÚSIGINTÚSIG_IGNÚ_Serverr;r*r‘rr�r‡) Úclsrer*rgrprãràráÚserverrrrrÜSs zBaseManager._run_servercOsd|jjtjkstdƒ‚|j|j|jd�}zt |dd|f||ƒ\}}W5| ¡Xt ||j|ƒ|fS)zP Create a new shared object; return the token and exposed tuple zserver not yet startedrÕNrY) rÌrÅrÄrÇrŽrÎrÊrËr‘rDr)r,r)r@rAržr+r rrrÚ_createjs  zBaseManager._createcCs*|jdk r&|j |¡|j ¡s&d|_dS)zC Join the manager process (if it has been spawned) N)rÝr±Úis_alive©r,Útimeoutrrrr±vs   zBaseManager.joincCs2|j|j|jd�}zt|ddƒW¢S| ¡XdS)zS Return some info about the servers shared objects and connections rÕNr\©rÎrÊrËr‘rD©r,ržrrrÚ _debug_infoszBaseManager._debug_infocCs2|j|j|jd�}zt|ddƒW¢S| ¡XdS)z5 Return the number of shared objects rÕNr]rîrïrrrÚ_number_of_objects‰szBaseManager._number_of_objectscCsj|jjtjkr| ¡|jjtjkrf|jjtjkr.temp) Ú__dict__rÓÚcopyÚ AutoProxyrr$r!rrIrŽr4Úsetattr) rèr)rPrÂr rÁÚ create_methodÚkeyrÅrRrrþrÚregisterÇs*   ÿÿ  zBaseManager.register)NNrÉN)Nr)Nr)N)NNNNT)r4r6r7r8rÓrWrçr-rÔrÖr‚Ú classmethodrÜrêr±rðrñròrõÚ staticmethodrßÚpropertyr*rrrrrrýs8ÿ  +ÿ       ÿc@seZdZdd„Zdd„ZdS)ÚProcessLocalSetcCst |dd„¡dS)NcSs| ¡Sr)Úclearr%rrrÚõóz*ProcessLocalSet.__init__..)rÚregister_after_forkr.rrrr-ôszProcessLocalSet.__init__cCs t|ƒdfSrc)rr.rrrÚ __reduce__öszProcessLocalSet.__reduce__N)r4r6r7r-rrrrrr ósr c@s€eZdZdZiZe ¡Zddd„Zdd„Z d ifd d „Z d d „Z dd„Z e dd„ƒZdd„Zdd„Zdd„Zdd„Zdd„ZdS)rz. A base for proxies of shared objects NTFc 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ÍrhrÎÚ_owned_by_managerrrfrËrvrgÚ_increfr Ú _after_fork) r,r¤rprürgr 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ÕrZ)rr{rrvrrmr˜rÎrr*rËrDrr )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) zV Try to call a method of the referent and return a copy of the result z#thread %r does not own a connectionr:r—éÿÿÿÿrûrÕNr`)rr ršrr{rmr˜rrr;rr<rrÓr)rr*rÍrËrÎrDr+r=) r,r?r@rAržrBrCr r¤rÂrýrrrÚ _callmethod6s6 ÿ  þzBaseProxy._callmethodcCs | d¡S)z9 Get a copy of the value of the referent r¬©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Û)rrr{rr+rÎr*rËrDrrÚ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Çrr{r*rDr�r÷rmr˜rr r‘)r¤rgr1ZtlsZidsetrÎ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)NrgÚ_isautoFr ) r rËrrùÚ RebuildProxyrrrÍr©r,rArrrr�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)zV Return representation of the referent (or a fall-back if that fails) r5Nrz; '__str__()' failed>)rr�rªr.rrrrN£s zBaseProxy.__str__)NNNTF)r4r6r7r8rørZForkAwareThreadLockrr-rrrrrr!rrr&r5rNrrrrrýs(ÿ )   cCsˆtt ¡ddƒ}|rT|j|jkrTt d|¡d|d<|j|jkrT|j|j|j|j<|  dd¡optt ¡ddƒ }|||fd|i|—ŽS) z5 Function used for unpickling proxy objects. rwNz*Rebuild a proxy owned by manager, token=%rTrr_Z _inheritingF) rrrvr*rr{r+rlrjr»)rSr¤rprArér_rrrr$°s   ÿ  þr$cCspt|ƒ}z|||fWStk r*YnXi}|D]}td||f|ƒq4t|tf|ƒ}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zOdef %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)z* Return an auto-proxy for `token` r NrÕr[z AutoProxy[%s])rürgr_T) rhr*r‘rDrËrrvrgr*r)r#) r¤rprürgr 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)NrUz%s=%rz%s(%s)z, ) r$rÿr!Ú startswithrQr°r3r4r±)r,r!rRrrÅ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©r0r.rrrr›sz Value.getcCs ||_dSrr2©r,rÅrrrr´ sz Value.setcCsdt|ƒj|j|jfS)Nz %s(%r, %r))rr4r/r0r.rrrr5 szValue.__repr__N)T) r4r6r7r-r›r´r5rrÅrrrrr.s  r.cCs t ||¡Sr)r)rÚsequencer1rrrÚArraysr5c@s8eZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd S) Ú IteratorProxy)Ú__next__r;Úthrowr‘cCs|Srrr.rrrÚ__iter__szIteratorProxy.__iter__cGs | d|¡S)Nr7r©r,r@rrrr7szIteratorProxy.__next__cGs | d|¡S)Nr;rr:rrrr;szIteratorProxy.sendcGs | d|¡S)Nr8rr:rrrr8szIteratorProxy.throwcGs | d|¡S)Nr‘rr:rrrr‘!szIteratorProxy.closeN) r4r6r7rùr9r7r;r8r‘rrrrr6s r6c@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)NrAr)r,ÚnrrrrA6szConditionProxy.notifycCs | d¡S)NrBrr.rrrrB8szConditionProxy.notify_allcCsd|ƒ}|r|S|dk r$t ¡|}nd}d}|s`|dk rN|t ¡}|dkrNq`| |¡|ƒ}q,|S)Nr)ÚtimeÚ monotonicr„)r,Z predicaterírCZendtimeZwaittimerrrÚwait_for:s  zConditionProxy.wait_for)N)r )N)r4r6r7rùr„rArBrGrrrrr@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¡SrCrrìrrrr„UszEventProxy.wait)N)r4r6r7rùrƒr´r r„rrrrrHMs rHc@sNeZdZdZddd„Zdd„Zdd„Zed d „ƒZed d „ƒZ ed d„ƒZ dS)Ú BarrierProxy)Ú__getattribute__r„ÚabortÚresetNcCs| d|f¡SrCrrìrrrr„[szBarrierProxy.waitcCs | d¡S)NrLrr.rrrrL]szBarrierProxy.abortcCs | d¡S)NrMrr.rrrrM_szBarrierProxy.resetcCs | dd¡S)NrK)Úpartiesrr.rrrrNaszBarrierProxy.partiescCs | dd¡S)NrK)Ú n_waitingrr.rrrrOdszBarrierProxy.n_waitingcCs | dd¡S)NrK)Úbrokenrr.rrrrPgszBarrierProxy.broken)N) r4r6r7rùr„rLrMrrNrOrPrrrrrJYs   rJc@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚNamespaceProxy)rKÚ __setattr__Ú __delattr__cCs0|ddkrt ||¡St |d¡}|d|fƒS)NrrUrrK)ÚobjectrK©r,rÚ callmethodrrrÚ __getattr__ns   zNamespaceProxy.__getattr__cCs4|ddkrt |||¡St |d¡}|d||fƒS)NrrUrrR)rTrRrK)r,rrÅrVrrrrRss  zNamespaceProxy.__setattr__cCs0|ddkrt ||¡St |d¡}|d|fƒS)NrrUrrS)rTrSrKrUrrrrSxs   zNamespaceProxy.__delattr__N)r4r6r7rùrWrRrSrrrrrQlsrQc@s*eZdZdZdd„Zdd„ZeeeƒZdS)Ú ValueProxy)r›r´cCs | d¡S)Nr›rr.rrrr›�szValueProxy.getcCs| d|f¡SrIrr3rrrr´ƒszValueProxy.setN)r4r6r7rùr›r´rrÅrrrrrXsrXÚ BaseListProxy)Ú__add__Ú __contains__Ú __delitem__Ú __getitem__Ú__len__Ú__mul__Ú __reversed__Ú__rmul__Ú __setitem__rQÚcountÚextendÚindexÚinsertr»ÚremoveÚreverser°Ú__imul__c@seZdZdd„Zdd„ZdS)Ú ListProxycCs| d|f¡|S)Nrdrr3rrrÚ__iadd__�szListProxy.__iadd__cCs| d|f¡|S)Nrirr3rrrri’szListProxy.__imul__N)r4r6r7rkrirrrrrjŽsrjÚ DictProxy)r[r\r]r9r^rbr rr›r!r"r»ÚpopitemÚ setdefaultr,r#r9ÚIteratorÚ ArrayProxy)r^r]rbÚ PoolProxy) ZapplyÚ apply_asyncr‘ÚimapÚimap_unorderedr±ÚmapÚ map_asyncÚstarmapÚ starmap_asyncröZ AsyncResult)rrrvrxrsrtc@seZdZdd„Zdd„ZdS)rqcCs|Srrr.rrrrò²szPoolProxy.__enter__cCs | ¡dSr)rörórrrrõ´szPoolProxy.__exit__N)r4r6r7ròrõrrrrrq±sc@seZdZdZdS)ra( Subclass of `BaseManager` which supports a number of shared object types. The types registered are those intended for the synchronization of threads, plus `dict`, `list` and `Namespace`. The `multiprocessing.Manager()` function creates started instances of this class. N)r4r6r7r8rrrrr»sÚQueueZ JoinableQueuertrnÚRLockÚ SemaphoreÚBoundedSemaphoreÚ ConditionÚBarrierÚPoolr$rÀ)rÂr)rc@sLeZdZdZgfdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)Ú_SharedMemoryTrackerz+Manages one or more shared memory segments.cCs||_||_dSr©Zshared_memory_context_nameÚ segment_names)r,rr‚rrrr-ãsz_SharedMemoryTracker.__init__cCs(t d|›dtƒ›�¡|j |¡dS)z6Adds the supplied shared memory block name to tracker.zRegister segment ú in pid N)rr{rr‚rQ©r,Ú segment_namerrrÚregister_segmentçsz%_SharedMemoryTracker.register_segmentcCsBt d|›dtƒ›�¡|j |¡t |¡}| ¡| ¡dS)z‚Calls unlink() on the shared memory block with the supplied name and removes it from the list of blocks being tracked.zDestroy segment rƒN) rr{rr‚rgrÚ SharedMemoryr‘Úunlink)r,r…ZsegmentrrrÚdestroy_segmentìs   z$_SharedMemoryTracker.destroy_segmentcCs"|jdd…D]}| |¡qdS)zr…rrrrŒ.sz SharedMemoryServer.track_segmentcCs|j |¡dS)zˆCalls unlink() on the shared memory block with the supplied name and removes it from the tracker instance inside the Server.N)r‘r‰r“rrrr�2sz"SharedMemoryServer.release_segmentcCs|jjS)zbReturns a list of names of shared memory blocks that the Server is currently tracking.)r‘r‚r­rrrrŽ7sz SharedMemoryServer.list_segmentsN) r4r6r7rWr�r-rYrÃrXrŒr�rŽrrrrr‹sÿ r‹c@s<eZdZdZeZdd„Zdd„Zdd„Zdd „Z d d „Z d S) ra¡Like SyncManager but uses SharedMemoryServer instead of Server. It provides methods for creating and returning SharedMemory instances and for creating a list-like object (ShareableList) backed by shared memory. It also provides methods that create and return Proxy Objects that support synchronization across processes (i.e. multi-process-safe locks and semaphores). cOsNtjdkrddlm}| ¡tj|f|ž|Žt |j j ›dt ƒ›�¡dS)NÚposixr )Úresource_trackerz created by pid ) r�rÚr•Zensure_runningrr-rr{r3r4r)r,r@r’r•rrrr-Is   zSharedMemoryManager.__init__cCst |jj›dtƒ›�¡dS)Nz.__del__ by pid )rr{r3r4rr.rrrrŠUszSharedMemoryManager.__del__cCsh|jjtjkrP|jjtjkr&tdƒ‚n*|jjtjkr>tdƒ‚ntd |jj¡ƒ‚| |j |j |j |j ¡S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downrÒ) rÌrÅrÄrÆrÇr rÈrKrç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)zoReturns a new SharedMemory instance with the specified size in bytes, to be tracked by the manager.rÕNT)rYÚsizerŒ) rÎrÊrËrr‡rDrÚ 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)z�Returns a new ShareableList instance populated with the values from the input sequence, to be tracked by the manager.rÕNrŒ) rÎrÊrËrÚ ShareableListrDZshmrr˜rˆ)r,r4ržZslr–rrrr™rs   z!SharedMemoryManager.ShareableListN) r4r6r7r8r‹rçr-rŠrÔr‡r™rrrrr=s    )NNNT)T)SÚ__all__rxrmrärZqueuerEr�rrµrr–r Úcontextr r r rrrrrZ HAS_SHMEMÚ ImportErrorrrZ view_typesr$r'Z view_typerTrrDr=r�rLrTrVrWrÄrqrrZ XmlListenerZ XmlClientrhrr´r rr$r*rr+r.r5r6r;r@rHrJrQrXrYrjrlrúrpZ BasePoolProxyrqrryrtrnrzr{r|r}r~rrÀr€r‹rrrrrÚ sÌÿ            c  þ w 4 ÿ       ÿ  û   ÿ%8