B -_͜@sddddgZddlZddlZddlZddlZddlZddlmZddlm Z dd l m Z m Z m Z dd lmZdd lmZdd lmZdd lmZddZe ejedddDZedek rddZxeD]Ze eeqWGdddeZdifddZddZGdddeZddZdd ZGd!d"d"eZ Gd#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,ddd/d0Z-Gd1d2d2eZ.Gd3d4d4eZ/ded5d6Z0Gd7d8d8e*Z1Gd9d:d:e*Z2Gd;d<dd>e*Z4Gd?d@d@e*Z5GdAdBdBe*Z6GdCdDdDe*Z7e,dEdFZ8GdGdHdHe8Z9e,dIdJZ:dKdLie:_;e,dMdNZGdTdde'Z?e?dUej@e?dVej@e?dWejAe4e?dXejBe2e?dYejCe2e?dZejDe2e?d[ejEe2e?d\ejFe3e?d]ejGe5e?d^ejHe>e?d_ee9e?d`eIe:e?d4e/e7e?d6e0e<e?d2e.e6e?jdLe1dadbe?jdQdadcdS)f BaseManager SyncManager BaseProxyTokenN) format_exc) connection) reductionget_spawning_popen ProcessError)pool)process)util) get_contextcCstj|j|ffS)N)arraytypecodetobytes)ar./usr/lib/python3.7/multiprocessing/managers.py reduce_array$srcCsg|]}tti|qSr)typegetattr).0namerrr (sr)itemskeysvaluescCstt|ffS)N)list)objrrrrebuild_as_list*sr!c@s4eZdZdZdZddZddZddZd d Zd S) rz4 Type to uniquely indentify a shared object )typeidaddressidcCs||||_|_|_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+ __module__ __qualname____doc__ __slots__r&r'r)r,rrrrr3s rcCs8|||||f|\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response z#RETURNN)sendrecvconvert_to_error)cr$ methodnameargskwdskindresultrrrdispatchJs  r:cCsd|dkr |S|dkrRt|ts4td||t||dkrHtd|St|Sntd|SdS)Nz#ERROR)z #TRACEBACKz#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strz#UNSERIALIZABLEzUnserializable message: %s zUnrecognized message type {!r}) isinstancestr TypeErrorformatr RemoteError ValueError)r8r9rrrr3Ts   r3c@seZdZddZdS)r?cCsdt|jddS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)r<r6)r%rrr__str__dszRemoteError.__str__N)r+r-r.rArrrrr?csr?cCs6g}x,t|D] }t||}t|r||qW|S)z4 Return a list of names of methods of `obj` )dirrcallableappend)r temprfuncrrr all_methodsks  rGcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_r)rrrrrrzsz"public_methods..)rG)r rrrpublic_methodsvsrIc @seZdZdZdddddddd d g Zd d Zd dZddZddZddZ ddZ ddZ ddZ e e e dZ ddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.S)/ServerzM Server class which runs in a process controlled by a manager object shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefcCsxt|tstd|t|||_t||_t |\}}||dd|_ |j j |_ ddi|_ i|_ i|_t|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes)r#Zbacklog0)Nr)r;bytesr=r>rregistryr AuthenticationStringauthkeylistener_clientlistenerr# id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r%rWr#rY serializerListenerClientrrrr&s     zServer.__init__c Cst|_|t_zZtj|jd}d|_| y x|j sN|j dq6WWnt t fk rjYnXWdtjtjkrtdtjt_tjt_tdXdS)z( Run the server forever )targetTrNzresetting stdout, stderrr)r_Event stop_eventr current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__rdebug __stderr__stderrexit)r%rkrrr serve_forevers       zServer.serve_forevercCsPxJy|j}Wntk r&wYnXtj|j|fd}d|_|qWdS)N)rer6T)r[ZacceptOSErrorr_rjhandle_requestrlrm)r%r4trrrrkszServer.accepterc CsLd}}}yTt||jt||j|}|\}}}}||jksTtd|t||}Wntk r~dt f} Yn>Xy||f||}Wntk rdt f} Yn Xd|f} y| | Wnttk r>} zTy| dt fWntk rYnXt d| t d|t d| Wdd} ~ XYnX| dS)z) Handle a new connection Nz%r unrecognizedz #TRACEBACKz#RETURNzFailure to send message: %rz ... request was %rz ... exception was %r)rZdeliver_challengerYZanswer_challenger2publicAssertionErrorr Exceptionrr1rinfoclose) r%r4funcnamer9requestignorer6r7rFmsgerrrr{s4    zServer.handle_requestc Cstdtj|j}|j}|j}x|j syBd}}|}|\}}} } y||\}} } Wn^t k r} z@y|j |\}} } Wn&t k r}z| Wdd}~XYnXWdd} ~ XYnX|| krt d|t || ft||}y|| | }Wn,tk r&}z d|f}Wdd}~XYnPX| o8| |d}|rn||||\}}t||j|}d||ff}nd|f}Wnt k r|dkrdtf}nNy,|j|}|||||f| | }d|f}Wn tk rdtf}YnXYnPtk r"tdtjtd Yn tk r@dtf}YnXyDy ||Wn2tk r}z|d tfWdd}~XYnXWq(tk r}z@td tjtd |td ||tdWdd}~XYq(Xq(WdS)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=%rz#ERRORz#PROXYz#RETURNz #TRACEBACKz$got EOF -- exiting thread serving %rrz#UNSERIALIZABLEzexception in thread serving %rz ... message was %rz ... exception was %rr)rrur_current_threadrr2r1r\rgrnKeyErrorr^AttributeErrorrrrgetrLrr#rfallback_mappingEOFErrorrrrxrr)r%connr2r1r\r5r ridentr6r7exposed gettypeidkeZ second_keZfunctionZresrrr"ZridentZrexposedtokenZ fallback_funcr9rrr serve_clientsx  (        $   zServer.serve_clientcCs|S)Nr)r%rrr rrrfallback_getvalue,szServer.fallback_getvaluecCst|S)N)r<)r%rrr rrr fallback_str/szServer.fallback_strcCst|S)N)repr)r%rrr rrr fallback_repr2szServer.fallback_repr)rAr,z #GETVALUEcCsdS)Nr)r%r4rrrrQ;sz Server.dummyc Cs||jlg}t|j}|xD|D]<}|dkr(|d||j|t|j|dddfq(Wd|SQRXdS)zO Return some info --- useful to spot problems with refcounting rUz %s: refcount=%s %srNK ) rarr]rsortrDr<r\join)r%r4r9rrrrrrO>s  $zServer.debug_infocCs t|jS)z* Number of shared objects )lenr])r%r4rrrrPNszServer.number_of_objectscCsLz:ytd|dWnddl}|YnXWd|jXdS)z' Shutdown this process z!manager received shutdown message)z#RETURNNrN)rrur1 traceback print_excrgset)r%r4rrrrrKUs zServer.shutdownc Os|j|j|\}}}}|dkrD|s2t|dkr:td|d} n |||} |dkr^t| }|dk rt|tstd|t |t |t |}dt | } t d|| | t||f|j| <| |jkrd|j| <WdQRX||| | t|fS)z> Create a new shared object and return its id Nrz4Without callable, must have one non-keyword argumentrz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rarWrr@rIr;dictr=r>rrr$rrurr\r]rRtuple) r%r4r"r6r7rCrmethod_to_typeid proxytyper rrrrrLbs.      z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rr\r$)r%r4rrrrrNszServer.get_methodscCs"|t_|d||dS)z= Spawn a new thread to serve this connection )z#RETURNNN)r_rrr1r)r%r4rrrrrMs  zServer.accept_connectionc Cs|jy|j|d7<Wnhtk r}zJ||jkrrd|j|<|j||j|<|j|\}}}td|n|Wdd}~XYnXWdQRXdS)Nrz&Server re-enabled tracking & INCREF %r)rar]rr^r\rru)r%r4rrr rrrrrrRs  z Server.increfc Cs||jkr$||jkr$td|dS|jZ|j|dkrXtd||j||j||j|d8<|j|dkr|j|=WdQRX||jkrd|j|<td||j|j|=WdQRXdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r)NrNzdisposing of obj with id %r)r]r^rrurar~r>r\)r%r4rrrrrSs$       z Server.decrefN)r+r-r.r/r}r&ryrkr{rrrrrrQrOrPrKrLrNrMrRrSrrrrrJs. "Q $rJc@seZdZdgZdZdZdZdS)StatevaluerrN)r+r-r.r0INITIALSTARTEDSHUTDOWNrrrrrsr)pickleZ xmlrpclibc@seZdZdZiZeZd"ddZddZdd Z d#d d Z e d$d dZ ddZ d%ddZddZddZddZddZeddZeddZe d&d d!ZdS)'rz! Base class for managers NrcCs\|dkrtj}||_t||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dS)N)r rhrY_addressrX_authkeyr_staterr _serializerrZZ _Listener_Clientr_ctx)r%r#rYrbZctxrrrr&s   zBaseManager.__init__cCsf|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jjt|j |j |j |j S)zX Return server object with serve_forever() method and address attribute zAlready started serverzManager has shut downzUnknown state {!r}) rrrrrr rr>rJ _registryrrr)r%rrr get_servers   zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process )rYNrQ) rZrrrr:rrrr)r%rcrdrrrrconnects zBaseManager.connectrc Cs4|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj|dk rht|sht dt 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 zAlready started serverzManager has shut downzUnknown state {!r}Nzinitializer must be a callableF)Zduplex)rer6:css|]}t|VqdS)N)r<)rirrr sz$BaseManager.start..-r)r6 exitpriority)!rrrrrr rr>rCr=rZPiperZProcessr _run_serverrrrr_processrZ _identityr+rrmrr2rFinalize_finalize_managerrrK)r% initializerinitargsreaderwriterrrrrrms4         zBaseManager.startc CsN|dk r|||||||}||j|td|j|dS)z@ Create a server, report its address and run it Nzmanager serving at %r)_Serverr1r#rrrry) clsrWr#rYrbrrrserverrrrr/s zBaseManager._run_servercOsd|jjtjkstd|j|j|jd}zt|dd|f||\}}Wd| Xt ||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet started)rYNrL) rrrrr~rrrr:rr)r%r"r6r7rr$rrrr_createCs  zBaseManager._createcCs*|jdk r&|j||js&d|_dS)zC Join the manager process (if it has been spawned) N)rris_alive)r%timeoutrrrrOs   zBaseManager.joincCs.|j|j|jd}z t|ddS|XdS)zS Return some info about the servers shared objects and connections )rYNrO)rrrr:r)r%rrrr _debug_infoXs zBaseManager._debug_infocCs.|j|j|jd}z t|ddS|XdS)z5 Return the number of shared objects )rYNrP)rrrr:r)r%rrrr_number_of_objectsbs zBaseManager._number_of_objectscCsj|jjtjkr||jjtjkrf|jjtjkr)r%rrr __enter__ls  zBaseManager.__enter__cCs |dS)N)rK)r%exc_typeexc_valexc_tbrrr__exit__yszBaseManager.__exit__cCs|rtdy,|||d}zt|ddWd|XWntk rRYnX|jdd|rtdt|drtd ||jd d|rtd t j |_ y t j |=Wntk rYnXdS) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to manager)rYNrKg?)rzmanager still alive terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)rrrr:rrrhasattrrrrrr_address_to_localr)r r#rYr(rrrrrr|s.         zBaseManager._finalize_managercCs|jS)N)r)r%rrrr#szBaseManager.addressTc sd|jkr|j|_dkr"t|p0tdd}|p@tdd}|rxHt|D]8\}}t|tkstt d|t|tksTt d|qTW|||f|j<|rƇfdd} | _ t || dS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_z%r is not a stringcs`td|jf||\}}||j||j|d}|j|j|jd}t|dd|jf|S)Nz)requesting creation of a shared %r object)managerrYr)rYrS) rrurrrrr#r:r$)r%r6r7rZexpproxyr)rr"rrrEs  z"BaseManager.register..temp) __dict__rcopy AutoProxyrrrrr<r~r+setattr) rr"rCrrr create_methodkeyrrEr)rr"rregisters     zBaseManager.register)NNrN)Nr)Nr)N)NNNNT)r+r-r.r/rrJrr&rrrm classmethodrrrrrrr staticmethodrpropertyr#rrrrrrs*  +      c@seZdZddZddZdS)ProcessLocalSetcCst|dddS)NcSs|S)N)clear)r rrrz*ProcessLocalSet.__init__..)rregister_after_fork)r%rrrr&szProcessLocalSet.__init__cCs t|dfS)Nr)r)r%rrr __reduce__szProcessLocalSet.__reduce__N)r+r-r.r&rrrrrrsrc@seZdZdZiZeZdddZddZ d ifd d Z d d Z ddZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc Cstj8tj|jd}|dkr:ttf}|tj|j<WdQRX|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|dk rt||_n"|j dk r|j j|_n tj|_|r|t|tjdS)Nrr)r_mutexrrr#rZForkAwareLocalr_tls_idset_tokenr$_id_managerrrZr_owned_by_managerr rXrrhrY_increfr _after_fork) r%rrbrrYrrR manager_ownedZ tls_idsetrrrr&s*      zBaseProxy.__init__cCsdtdtj}tjdkr4|dtj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|)rYrM)rrur rhrr_rrrr#rr:rr)r%rrrrr_connects  zBaseProxy._connectrc Csy |jj}Wn6tk rBtdtj||jj}YnX| |j |||f| \}}|dkrp|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|d} |j|j|jd}t|dd|jf| St||dS) zW Try to call a method of the referrent and return a copy of the result z#thread %r does not own a connectionz#RETURNz#PROXY)rrYr)rYNrS)rrrrrur_rrrr1rr2rrr"rr#rrrr:r$r3) r%r5r6r7rr8r9rrrrrrr _callmethods,      zBaseProxy._callmethodcCs |dS)z9 Get a copy of the value of the referent z #GETVALUE)r)r%rrr _getvalue-szBaseProxy._getvaluec Cs|jrtd|jjdS|j|jj|jd}t|dd|j ftd|jj|j |j |j oj|j j }tj|tj|j|j||j|j |jfdd|_dS)Nz%owned_by_manager skipped INCREF of %r)rYrRz INCREF %r )r6r)rrrurr$rr#rr:rraddrrrr_decrefrZ_close)r%rr(rrrr3s zBaseProxy._increfc Cs||j|dks |jtjkry2td|j||j|d}t|dd|jfWqt k r}ztd|Wdd}~XYqXntd|j|st |drtdt j |j|`dS)Nz DECREF %r)rYrSz... decref failed %sz%DECREF %r -- manager already shutdownrz-thread %r has no more proxies so closing conn)discardr$rrrrrur#r:rrr_rrrr)rrYr(ZtlsZidsetrrrrrrrGs    zBaseProxy._decrefc CsHd|_y |Wn0tk rB}ztd|Wdd}~XYnXdS)Nzincref failed: %s)rrrrr)r%rrrrr`s  zBaseProxy._after_forkcCs^i}tdk r|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)NrY_isautoFr) r rrr RebuildProxyrrrr)r%r7rrrrhs    zBaseProxy.__reduce__cCs|S)N)r)r%Zmemorrr __deepcopy__uszBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr+rr"r$)r%rrrr,xszBaseProxy.__repr__cCs4y |dStk r.t|dddSXdS)zV Return representation of the referent (or a fall-back if that fails) r,Nrz; '__str__()' failed>)rrr)r%rrrrA|s zBaseProxy.__str__)NNNTF)r+r-r.r/rrZForkAwareThreadLockrr&rrrrrrrrrr,rArrrrrs (   cCsttdd}|rT|j|jkrTtd|d|d<|j|jkrT|j|j|j|j<| ddopttdd }|||fd|i|S) z5 Function used for unpickling proxy objects. riNz*Rebuild a proxy owned by manager, token=%rTrrRZ _inheritingF) rr rhr#rrur$r^r\pop)rFrrbr7rrRrrrrs   rcCsrt|}y |||fStk r(YnXi}x|D]}td||f|q4Wt|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zLdef %s(self, *args, **kwds): return self._callmethod(%r, args, kwds))rrexecrrr)rr_cacheZdicZmeth ProxyTyperrr MakeProxyTypes   rTc Cst|d}|dkrB||j|d}zt|dd|f}Wd|X|dkrX|dk rX|j}|dkrjtj}td|j |}||||||d} d| _ | S)z* Return an auto-proxy for `token` rN)rYrNz AutoProxy[%s])rrYrRT) rZr#r:rrr rhrYrr"r) rrbrrYrrRrrrrrrrrs    rc@seZdZddZddZdS) NamespacecKs|j|dS)N)rupdate)r%r7rrrr&szNamespace.__init__cCs^t|j}g}x,|D]$\}}|ds|d||fqW|d|jjd|fS)NrHz%s=%rz%s(%s)z, ) rrr startswithrDrr*r+r)r%rrErrrrrr,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 t||S)N)r)rZsequencerrrrArraysrc@s8eZdZdZddZddZddZdd Zd d Zd S) IteratorProxy)__next__r1throwrcCs|S)Nr)r%rrr__iter__szIteratorProxy.__iter__cGs |d|S)Nr )r)r%r6rrrr szIteratorProxy.__next__cGs |d|S)Nr1)r)r%r6rrrr1szIteratorProxy.sendcGs |d|S)Nr )r)r%r6rrrr szIteratorProxy.throwcGs |d|S)Nr)r)r%r6rrrrszIteratorProxy.closeN) r+r-r.rr r r1r rrrrrrs rc@s2eZdZdZd ddZddZdd Zd d ZdS) AcquirerProxy)acquirereleaseTNcCs"|dkr|fn||f}|d|S)Nr )r)r%Zblockingrr6rrrr szAcquirerProxy.acquirecCs |dS)Nr)r)r%rrrrszAcquirerProxy.releasecCs |dS)Nr )r)r%rrrrszAcquirerProxy.__enter__cCs |dS)Nr)r)r%rrrrrrrszAcquirerProxy.__exit__)TN)r+r-r.rr rrrrrrrr s  r c@s6eZdZdZd ddZd ddZdd Zdd d ZdS)ConditionProxy)r rronotify notify_allNcCs|d|fS)Nro)r)r%rrrrro szConditionProxy.waitrcCs|d|fS)Nr)r)r%nrrrrszConditionProxy.notifycCs |dS)Nr)r)r%rrrrszConditionProxy.notify_allcCsh|}|r|S|dk r$t|}nd}d}x6|sb|dk rP|t}|dkrPP|||}q.W|S)Nr)timeZ monotonicro)r%Z predicaterr9ZendtimeZwaittimerrrwait_fors   zConditionProxy.wait_for)N)r)N)r+r-r.rrorrrrrrrr s   rc@s2eZdZdZddZddZddZd d d ZdS) EventProxy)rnrrrocCs |dS)Nrn)r)r%rrrrn(szEventProxy.is_setcCs |dS)Nr)r)r%rrrr*szEventProxy.setcCs |dS)Nr)r)r%rrrr,szEventProxy.clearNcCs|d|fS)Nro)r)r%rrrrro.szEventProxy.wait)N)r+r-r.rrnrrrorrrrr&s rc@sNeZdZdZdddZddZddZed d Zed d Z ed dZ dS) BarrierProxy)__getattribute__roabortresetNcCs|d|fS)Nro)r)r%rrrrro4szBarrierProxy.waitcCs |dS)Nr)r)r%rrrr6szBarrierProxy.abortcCs |dS)Nr)r)r%rrrr8szBarrierProxy.resetcCs |ddS)Nr)parties)r)r%rrrr:szBarrierProxy.partiescCs |ddS)Nr) n_waiting)r)r%rrrr=szBarrierProxy.n_waitingcCs |ddS)Nr)broken)r)r%rrrr@szBarrierProxy.broken)N) r+r-r.rrorrrrrrrrrrr2s   rc@s(eZdZdZddZddZddZdS) NamespaceProxy)r __setattr__ __delattr__cCs0|ddkrt||St|d}|d|fS)NrrHrr)objectr)r%r callmethodrrr __getattr__Gs   zNamespaceProxy.__getattr__cCs4|ddkrt|||St|d}|d||fS)NrrHrr)r rr)r%rrr!rrrrLs  zNamespaceProxy.__setattr__cCs0|ddkrt||St|d}|d|fS)NrrHrr)r rr)r%rr!rrrrQs   zNamespaceProxy.__delattr__N)r+r-r.rr"rrrrrrrEsrc@s*eZdZdZddZddZeeeZdS) ValueProxy)rrcCs |dS)Nr)r)r%rrrrZszValueProxy.getcCs|d|fS)Nr)r)r%rrrrr\szValueProxy.setN)r+r-r.rrrrrrrrrr#Xsr# BaseListProxy)__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rDcountextendindexinsertrremovereverser__imul__c@seZdZddZddZdS) ListProxycCs|d|f|S)Nr/)r)r%rrrr__iadd__hszListProxy.__iadd__cCs|d|f|S)Nr4)r)r%rrrrr4kszListProxy.__imul__N)r+r-r.r6r4rrrrr5gsr5 DictProxy)r&r'r(r r)r-rrrrrrpopitem setdefaultrrr Iterator ArrayProxy)r)r(r- PoolProxy) Zapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)r=rArCr>r?c@seZdZddZddZdS)r<cCs|S)Nr)r%rrrrszPoolProxy.__enter__cCs |dS)N)r)r%rrrrrrrszPoolProxy.__exit__N)r+r-r.rrrrrrr<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)r+r-r.r/rrrrrs QueueZ JoinableQueuerfr`RLock SemaphoreBoundedSemaphore ConditionBarrierPoolrrF)rr)r)NNNT)T)J__all__rrr_rZqueuerrrrcontextr r r r r rrrrZ view_typesrr!Z view_typer rr:r3rr?rGrIrJrrcrdZ XmlListenerZ XmlClientrZrrrrrrrrrrrr rrrrr#r$r5r7rr;Z BasePoolProxyr<rrDrfr`rErFrGrHrIrJrrrrr s            H t 4