a DOgǸ@sLgdZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZmZmZddl mZdd l mZdd l mZdd l mZzdd l mZWneyd ZYn0dZedddZeejedddDZedeur8ddZeD]Zeeeq$Gddde Z!difddZ"ddZ#Gddde$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*d*e Z/Gd+d,d,e0Z1Gd-d.d.e Z2d/d0Z3ifd1d2Z4dmd3d4Z5Gd5d6d6e Z6Gd7d8d8e Z7dnd9d:Z8Gd;d<dd>e2Z:Gd?d@d@e:Z;GdAdBdBe2ZGdGdHdHe2Z?e4dIdJZ@GdKdLdLe@ZAe4dMdNZBdOdPieB_Ce4dQdRZDe4dSdTZEdUdUdUdPdPdVeE_CGdWdSdSeEZFGdXdYdYe/ZGeGdZejHeGd[ejHeGd\ejIe<eGd]ejJe:eGd^ejKe:eGd_ejLe:eGd`ejMe:eGdaejNe;eGdbejOe=eGdcejPeFeGddeeAeGdeeQeBeGd8e7e?eGd:e8eDeGd6e6e>eGjdPe9d dfeGjdUd dgerHGdhdidiZRGdjdkdke(ZSGdldde/ZTdS)o) BaseManager SyncManager BaseProxyTokenN)getpid) format_exc) connection) reductionget_spawning_popen ProcessError)pool)process)util) get_context) shared_memoryFTSharedMemoryManagercCstj|j|ffSN)arraytypecodetobytes)ar=/opt/alt/python39/lib64/python3.9/multiprocessing/managers.py reduce_array/srcCsg|]}tti|qSr)typegetattr.0namerrr 3r )itemskeysvaluescCstt|ffSr)listobjrrrrebuild_as_list5sr(c@s4eZdZdZdZddZddZddZd d Zd S) rz3 Type to uniquely identify a shared object typeidaddressidcCs||||_|_|_dSrr))selfr*r+r,rrr__init__DszToken.__init__cCs|j|j|jfSrr)r-rrr __getstate__GszToken.__getstate__cCs|\|_|_|_dSrr)r-staterrr __setstate__JszToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r)) __class____name__r*r+r,r/rrr__repr__MszToken.__repr__N) r5 __module__ __qualname____doc__ __slots__r.r0r3r6rrrrr>s rrcCs8|||||f|\}}|dkr*|St||dS)zL Send a message to manager using connection `c` and return response #RETURNN)sendrecvconvert_to_error)cr, methodnameargskwdskindresultrrrdispatchUs  rEcCsd|dkr |S|dvrRt|ts4td||t||dkrHtd|St|Sntd|SdS)N#ERROR) #TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrHzUnserializable message: %s zUnrecognized message type {!r}) isinstancestr TypeErrorformatr RemoteError ValueError)rCrDrrrr>_s    r>c@seZdZddZdS)rMcCsdt|jddS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rJrAr/rrr__str__oszRemoteError.__str__N)r5r7r8rOrrrrrMnsrMcCs2g}t|D] }t||}t|r ||q |S)z4 Return a list of names of methods of `obj` )dirrcallableappend)r'temprfuncrrr all_methodsvs    rUcCsddt|DS)zP Return a list of names of methods of `obj` which do not start with '_' cSsg|]}|ddkr|qS)r_rrrrrr r!z"public_methods..)rUr&rrrpublic_methodssrWc@seZdZdZgdZddZddZddZd d Zd d Z d dZ ddZ ddZ e e e dZ ddZddZddZddZddZddZd 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+Zbacklog0Nr)rIbytesrKrLrregistryrAuthenticationStringauthkeylistener_clientlistenerr+ id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r-rfr+rh serializerListenerClientrrrr.s     zServer.__init__c Cst|_|t_ztj|jd}d|_| z|j sL|j dq4Wnt t fydYn0Wtjtjkrtdtjt_tjt_tdn2tjtjkrtdtjt_tjt_td0dS)z( Run the server forever )targetTrzresetting stdout, stderrrN)rnEvent stop_eventrcurrent_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__rdebug __stderr__stderrexit)r-rzrrr serve_forevers*       zServer.serve_forevercCsLz|j}Wnty$YqYn0tj|j|fd}d|_|qdS)NrtrAT)rjZacceptOSErrorrnryhandle_requestr{r|)r-r?trrrrzs  zServer.accepterc CsNd}}}zTt||jt||j|}|\}}}}||jvsTJd|t||}Wnty|dtf} YnB0z||g|Ri|}Wntydtf} Yn 0d|f} z| | Wntty@} zZz| dtfWntyYn0t d| t d|t d| WYd} ~ n d} ~ 00| dS)z) Handle a new connection Nz%r unrecognizedrGr;zFailure to send message: %rz ... request was %r ... exception was %r) r Zdeliver_challengerhZanswer_challenger=publicr Exceptionrr<rinfoclose) r-r?funcnamerDrequestignorerArBrTmsgerrrrs4      "zServer.handle_requestc Cstdtj|j}|j}|j}|j sΐz:d}}|}|\}}} } z||\}} } WnPt y} z8z|j |\}} } Wnt y| Yn0WYd} ~ n d} ~ 00|| vrt d|t || ft||}z|| i| }Wn.ty}zd|f}WYd}~nXd}~00| o,| |d}|rb||||\}}t||j|}d||ff}nd|f}Wnt y|durdtf}nRz2|j|}|||||g| Ri| }d|f}Wntydtf}Yn0YnLtytdtjtd Ynty2dtf}Yn0z4z ||Wn"tyd|d tfYn0Wq$ty}zHtd tjtd |td ||tdWYd}~q$d}~00q$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=%rrF#PROXYr;rGz$got EOF -- exiting thread serving %rrrHzexception in thread serving %rz ... message was %rrr)rrrncurrent_threadrr=r<rkrvr}KeyErrorrmAttributeErrorrrrgetrZrr+rfallback_mappingEOFErrorrrrr)r-connr=r<rkr@r'ridentrArBexposed gettypeidkeZfunctionresrrr*ZridentZrexposedtokenZ fallback_funcrDrrr serve_clients               zServer.serve_clientcCs|Srrr-rrr'rrrfallback_getvalue7szServer.fallback_getvaluecCst|SrrJrrrr fallback_str:szServer.fallback_strcCst|Sr)reprrrrr fallback_repr=szServer.fallback_repr)rOr6 #GETVALUEcCsdSrrr-r?rrrr_Fsz Server.dummyc Cs|jvg}t|j}||D]<}|dkr&|d||j|t|j|dddfq&d|WdS1s0YdS)zO Return some info --- useful to spot problems with refcounting rcz %s: refcount=%s %srNK ) rpr%rlr#sortrRrJrkjoin)r-r?rDr#rrrrr]Is zServer.debug_infocCs t|jS)z* Number of shared objects )lenrlrrrrr^YszServer.number_of_objectscCsVzDztd|dWnddl}|Yn0W|jn |j0dS)z' Shutdown this process z!manager received shutdown messager;NrN)rrr< traceback print_excrvset)r-r?rrrrrY`s zServer.shutdownc Os|j|j|\}}}}|durD|s2t|dkr:td|d} n||i|} |durbt| }|durt|tstd|t |t |t |}dt | } t d|| | t||f|j| <| |jvrd|j| <Wdn1s0Y||| | 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)rprfrrNrWrIdictrKrLrr%r,rrrrkrlr`tuple) r-r?r*rArBrQrmethod_to_typeid proxytyper'rrrrrZms6     ( z Server.createcCst|j|jdS)zL Return the methods of the shared object indicated by token r)rrkr,)r-r?rrrrr\szServer.get_methodscCs"|t_|d||dS)z= Spawn a new thread to serve this connection rN)rnrrr<r)r-r?rrrrr[s  zServer.accept_connectionc Cs|jz|j|d7<Wnjty}zR||jvrpd|j|<|j||j|<|j|\}}}td|n|WYd}~n d}~00Wdn1s0YdS)Nrz&Server re-enabled tracking & INCREF %r)rprlrrmrkrr)r-r?rrr'rrrrrr`s  z Server.increfcCs||jvr$||jvr$td|dS|jd|j|dkrXtd||j||j||j|d8<|j|dkr|j|=Wdn1s0Y||jvrd|j|<td||j|j|=Wdn1s0YdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r)NrNzdisposing of obj with id %r)rlrmrrrpAssertionErrorrLrk)r-r?rrrrras*   &   z Server.decrefN)r5r7r8r9rr.rrzrrrrrrr_r]r^rYrZr\r[r`rarrrrrXs. "Q $rXc@seZdZdgZdZdZdZdS)StatevaluerrN)r5r7r8r:INITIALSTARTEDSHUTDOWNrrrrrsr)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\|durtj}||_t||_t|_tj|j_ ||_ t |\|_ |_ |pTt|_dSr)rrwrh_addressrg_authkeyr_staterr _serializerriZ _Listener_Clientr_ctx)r-r+rhrqctxrrrr.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 Already started serverManager has shut downUnknown state {!r}) rrrrrr rrLrX _registryrrrr/rrr get_servers    zBaseManager.get_servercCs8t|j\}}||j|jd}t|ddtj|j_dS)z> Connect manager object to the server process rhNr_) rirrrrErrrr)r-rrrsrrrrconnects zBaseManager.connectrc Cs4|jjtjkrP|jjtjkr&tdn*|jjtjkr>tdntd|jj|durht|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 rrrNzinitializer must be a callableF)Zduplexr:css|]}t|VqdSrr)rirrr (r!z$BaseManager.start..-rrAZ exitpriority)!rrrrrr rrLrQrKr ZPiperZProcessr _run_serverrrrr_processrZ _identityr5rr|rr=rFinalize_finalize_managerrrY)r- initializerinitargsreaderwriterrrrrr|s>          zBaseManager.startc Cs^ttjtj|dur |||||||}||j|td|j| dS)z@ Create a server, report its address and run it Nzmanager serving at %r) signalSIGINTSIG_IGN_Serverr<r+rrrr) clsrfr+rhrqrrrserverrrrr:s zBaseManager._run_servercOsl|jjtjksJd|j|j|jd}z&t|dd|f||\}}W|n |0t ||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet startedrNrZ) rrrrrrrrErr)r-r*rArBrr,rrrr_createQs zBaseManager._createcCs*|jdur&|j||js&d|_dS)zC Join the manager process (if it has been spawned) N)rris_aliver-timeoutrrrr]s   zBaseManager.joincCs8|j|j|jd}zt|ddW|S|0dS)zS Return some info about the servers shared objects and connections rNr]rrrrErr-rrrr _debug_infofs  zBaseManager._debug_infocCs8|j|j|jd}zt|ddW|S|0dS)z5 Return the number of shared objects rNr^rrrrr_number_of_objectsps  zBaseManager._number_of_objectscCsj|jjtjkr||jjtjkrf|jjtjkr.temp) __dict__rcopy AutoProxyrr%r"rrJr5setattr) rr*rQrrr create_methodkeyrrSrrrregisters$     zBaseManager.register)NNrN)Nr)Nr)N)NNNNT)r5r7r8r9rrXrr.rrr| classmethodrrrrrrr staticmethodrpropertyr+rrrrrrs4  +       rc@seZdZddZddZdS)ProcessLocalSetcCst|dddS)NcSs|Sr)clearr&rrrr!z*ProcessLocalSet.__init__..)rregister_after_forkr/rrrr.szProcessLocalSet.__init__cCs t|dfSrd)rr/rrr __reduce__szProcessLocalSet.__reduce__N)r5r7r8r.rrrrrrsrc@seZdZdZiZeZdddZddZ d ifd d Z d d Z ddZ e ddZddZddZddZddZddZdS)rz. A base for proxies of shared objects NTFc CstjBtj|jd}|dur:ttf}|tj|j<Wdn1sN0Y|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|durt||_n"|j dur|j j|_n tj|_|r|t|tjdS)Nrr)r_mutexrrr+rZForkAwareLocalr_tls_idset_tokenr,_id_managerrrir_owned_by_managerrrgrrwrh_increfr _after_fork) r-rrqrrhrr` manager_ownedZ tls_idsetrrrr.s**      zBaseProxy.__init__cCsdtdtj}tjdkr4|dtj7}|j|jj |j d}t |dd|f||j _ dS)Nzmaking connection to managerZ MainThread|rr[)rrrrwrrnrrr r+rrEr r )r-rrrrr_connects  zBaseProxy._connectrc Csz |jj}Wn4ty@tdtj||jj}Yn0| |j |||f| \}}|dkrn|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;rrrNra)r r rrrrnrrrr<r r=r rr*r r+rrrrEr,r>) r-r@rArBrrCrDrrrrrrr _callmethods0     zBaseProxy._callmethodcCs |dS)z9 Get a copy of the value of the referent rrr/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 %rrr`z INCREF %r r)rrrr r,rr+rrEr r addr rrr_decrefr Z_close)r-rr2rrrrAs  zBaseProxy._increfc Cs||j|dus |jtjkrz2td|j||j|d}t|dd|jfWqt y}ztd|WYd}~qd}~00ntd|j|st |drtdt j |j|`dS)Nz DECREF %rrraz... decref failed %sz%DECREF %r -- manager already shutdownr z-thread %r has no more proxies so closing conn)discardr,rrrrrr+rErrrnrrr r)rrhr2ZtlsZidsetrrrrrrrUs $ zBaseProxy._decrefc CsJd|_z |Wn2tyD}ztd|WYd}~n d}~00dS)Nzincref failed: %s)r rrrr)r-rrrrrns  zBaseProxy._after_forkcCs^i}tdur|j|d<t|ddrB|j|d<tt|j|j|ffStt||j|j|ffSdS)Nrh_isautoFr) r rrr RebuildProxyrr rrr-rBrrrrvs    zBaseProxy.__reduce__cCs|Sr)r)r-memorrr __deepcopy__szBaseProxy.__deepcopy__cCsdt|j|jjt|fS)Nz<%s object, typeid %r at %#x>)rr5r r*r,r/rrrr6szBaseProxy.__repr__cCs8z |dWSty2t|dddYS0dS)zV Return representation of the referent (or a fall-back if that fails) r6Nrz; '__str__()' failed>)rrrr/rrrrOs  zBaseProxy.__str__)NNNTF)r5r7r8r9rrZForkAwareThreadLockrr.rrrrrrrrr r6rOrrrrrs" )   rcCsttdd}|rT|j|jkrTtd|d|d<|j|jvrT|j|j|j|j<| ddopttdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rxNz*Rebuild a proxy owned by manager, token=%rTrr`Z _inheritingF) rrrwr+rrr,rmrkpop)rTrrqrBrr`rrrrs    rcCsnt|}z|||fWSty(Yn0i}|D]}td||f|q2t|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))rrexecrrr)rr_cacheZdicZmeth ProxyTyperrr MakeProxyTypes   r%c Cst|d}|durJ||j|d}zt|dd|f}W|n |0|dur`|dur`|j}|durrtj}td|j |} | ||||||d} d| _ | S)z* Return an auto-proxy for `token` rNrr\z AutoProxy[%s])rrhr`rT) rir+rErrrrwrhr%r*r) rrqrrhrr`rrrr$rrrrrs    rc@seZdZddZddZdS) NamespacecKs|j|dSr)rupdaterrrrr.szNamespace.__init__cCsZt|j}g}|D]$\}}|ds|d||fq|d|jjd|fS)NrVz%s=%rz%s(%s)z, ) r%rr" startswithrRrr4r5r)r-r"rSrrrrrr6s  zNamespace.__repr__N)r5r7r8r.r6rrrrr&sr&c@s8eZdZd ddZddZddZdd ZeeeZd S) ValueTcCs||_||_dSr) _typecode_value)r-rrlockrrrr.szValue.__init__cCs|jSrr+r/rrrrsz Value.getcCs ||_dSrr-r-rrrrrsz Value.setcCsdt|j|j|jfS)Nz %s(%r, %r))rr5r*r+r/rrrr6szValue.__repr__N)T) r5r7r8r.rrr6rrrrrrr)s  r)cCs t||Sr)r)rsequencer,rrrArraysr0c@s8eZdZdZddZddZddZdd Zd d Zd S) IteratorProxy)__next__r<throwrcCs|Srrr/rrr__iter__szIteratorProxy.__iter__cGs |d|S)Nr2rr-rArrrr2szIteratorProxy.__next__cGs |d|S)Nr<rr5rrrr<szIteratorProxy.sendcGs |d|S)Nr3rr5rrrr3szIteratorProxy.throwcGs |d|S)Nrrr5rrrrszIteratorProxy.closeN) r5r7r8rr4r2r<r3rrrrrr1s r1c@s2eZdZdZd ddZddZdd Zd d ZdS) AcquirerProxy)acquirereleaseTNcCs"|dur|fn||f}|d|SNr7r)r-ZblockingrrArrrr7szAcquirerProxy.acquirecCs |dSNr8rr/rrrr8szAcquirerProxy.releasecCs |dSr9rr/rrrrszAcquirerProxy.__enter__cCs |dSr:rrrrrrszAcquirerProxy.__exit__)TN)r5r7r8rr7r8rrrrrrr6 s  r6c@s6eZdZdZd ddZd ddZdd Zdd d ZdS)ConditionProxy)r7r8r~notify notify_allNcCs|d|fSNr~rrrrrr~szConditionProxy.waitrcCs|d|fS)Nr<r)r-nrrrr<szConditionProxy.notifycCs |dS)Nr=rr/rrrr=szConditionProxy.notify_allcCsd|}|r|S|dur$t|}nd}d}|s`|durN|t}|dkrNq`|||}q,|S)Nr)time monotonicr~)r-Z predicaterrDZendtimeZwaittimerrrwait_for!s  zConditionProxy.wait_for)N)r)N)r5r7r8rr~r<r=rBrrrrr;s   r;c@s2eZdZdZddZddZddZd d d ZdS) EventProxy)r}rrr~cCs |dS)Nr}rr/rrrr}6szEventProxy.is_setcCs |dSNrrr/rrrr8szEventProxy.setcCs |dS)Nrrr/rrrr:szEventProxy.clearNcCs|d|fSr>rrrrrr~<szEventProxy.wait)N)r5r7r8rr}rrr~rrrrrC4s rCc@sNeZdZdZdddZddZddZed d Zed d Z ed dZ dS) BarrierProxy)__getattribute__r~abortresetNcCs|d|fSr>rrrrrr~BszBarrierProxy.waitcCs |dS)NrGrr/rrrrGDszBarrierProxy.abortcCs |dS)NrHrr/rrrrHFszBarrierProxy.resetcCs |ddS)NrF)partiesrr/rrrrIHszBarrierProxy.partiescCs |ddS)NrF) n_waitingrr/rrrrJKszBarrierProxy.n_waitingcCs |ddS)NrF)brokenrr/rrrrKNszBarrierProxy.broken)N) r5r7r8rr~rGrHrrIrJrKrrrrrE@s   rEc@s(eZdZdZddZddZddZdS) NamespaceProxy)rF __setattr__ __delattr__cCs0|ddkrt||St|d}|d|fS)NrrVrrF)objectrFr-r callmethodrrr __getattr__Us   zNamespaceProxy.__getattr__cCs4|ddkrt|||St|d}|d||fS)NrrVrrM)rOrMrF)r-rrrQrrrrMZs  zNamespaceProxy.__setattr__cCs0|ddkrt||St|d}|d|fS)NrrVrrN)rOrNrFrPrrrrN_s   zNamespaceProxy.__delattr__N)r5r7r8rrRrMrNrrrrrLSsrLc@s4eZdZdZddZddZeeeZee j Z dS) ValueProxy)rrcCs |dS)Nrrr/rrrrhszValueProxy.getcCs|d|fSrDrr.rrrrjszValueProxy.setN) r5r7r8rrrrrrtypes GenericAlias__class_getitem__rrrrrSfs  rS BaseListProxy)__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__rRcountextendindexinsertr!removereverser__imul__c@seZdZddZddZdS) ListProxycCs|d|f|S)Nrbrr.rrr__iadd__xszListProxy.__iadd__cCs|d|f|S)Nrgrr.rrrrg{szListProxy.__imul__N)r5r7r8rirgrrrrrhwsrh DictProxy)rYrZr[r4r\r`rrrr"r#r!popitem setdefaultr'r$r4Iterator ArrayProxy)r\r[r` PoolProxy) Zapply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncrZ AsyncResult)rprtrvrqrrc@seZdZddZddZdS)rocCs|Srrr/rrrrszPoolProxy.__enter__cCs |dSr)rrrrrrszPoolProxy.__exit__N)r5r7r8rrrrrrrosc@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)r5r7r8r9rrrrrsrQueueZ JoinableQueueruroRLock SemaphoreBoundedSemaphore ConditionBarrierPoolr%r)rr)rc@sLeZdZdZgfddZddZddZdd Zd d Zd d Z ddZ dS)_SharedMemoryTrackerz+Manages one or more shared memory segments.cCs||_||_dSrZshared_memory_context_name segment_names)r-rrrrrr.sz_SharedMemoryTracker.__init__cCs(td|dt|j|dS)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)rrrrrRr- segment_namerrrregister_segmentsz%_SharedMemoryTracker.register_segmentcCsBtd|dt|j|t|}||dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the list of blocks being tracked.zDestroy segment rN) rrrrrer SharedMemoryrunlink)r-rZsegmentrrrdestroy_segments   z$_SharedMemoryTracker.destroy_segmentcCs"|jddD]}||qdS)ztdntd|jj||j |j |j |j S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr) rrrrrr rrLrrrrrr/rrrr7s    zSharedMemoryManager.get_serverc Cs|j|j|jdh}tjdd|d}zt|dd|jfWn0tyj}z||WYd}~n d}~00Wdn1s0Y|S)zoReturns a new SharedMemory instance with the specified size in bytes, to be tracked by the manager.rNT)rZsizer) rrrrrrEr BaseExceptionr)r-rrZsmsrrrrrDs8z SharedMemoryManager.SharedMemoryc Cs|j|j|jdf}t|}zt|dd|jjfWn2tyh}z|j |WYd}~n d}~00Wdn1s~0Y|S)zReturns a new ShareableList instance populated with the values from the input sequence, to be tracked by the manager.rNr) rrrr ShareableListrEZshmrrr)r-r/rZslrrrrrPs  8z!SharedMemoryManager.ShareableListN) r5r7r8r9rrr.rrrrrrrrrs    )NNNTF)T)U__all__rrnrrZqueuer@rTrrrrrr contextr r r r rrrr ImportErrorZ HAS_SHMEMrRrrZ view_typesr%r(Z view_typerOrrEr>rrMrUrWrXrrrrsZ XmlListenerZ XmlClientrirrrrrr%rr&r)r0r1r6r;rCrErLrSrWrhrjrrnZ BasePoolProxyrorrwrurorxryrzr{r|r}rr~rrrrrr s             H   w 4             %-