\dCtgdZddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddlmZmZmZddl mZdd l mZdd l mZdd l mZ dd l mZd Zedn #e$rdZYnwxYwdZejejeddDZdZeD]Zejee[[GddeZ difdZ!dZ"Gdde#Z$dZ%dZ&GddeZ'Gdd eZ(e j)e j*fe j+e j,fd!Z-Gd"d#eZ.Gd$d%e/Z0Gd&d'eZ1d(Z2ifd)Z3 dcd*Z4Gd+d,eZ5Gd-d.eZ6ddd/Z7Gd0d1e1Z8Gd2d3e1Z9Gd4d5e9Z:Gd6d7e1Z;Gd8d9e1Z<Gd:d;e1Z=Gd<d=e1Z>e3d>d?Z?Gd@dAe?Z@e3dBdCZAdDdEieA_Be3dFdGZCe3dHdIZDdJdJdJdEdEdKeD_BGdLdHeDZEGdMdNe.ZFeFdOejGeFdPejGeFdQejHe;eFdRejIe9eFdSejJe9eFdTejKe9eFdUejLe9eFdVejMe:eFdWejNe<eFdXejOeEeFdYePe@eFdZeQeAeFd.e6e>eFd[e7eCeFd,e5e=eFdEe8d\eFdJd]er+Gd^d_ZRGd`dae'ZSGdbde.ZTdSdS)e) BaseManager SyncManager BaseProxyTokenN)getpid) format_exc) connection) reductionget_spawning_popen ProcessError)pool)process)util) get_context) shared_memoryTSharedMemoryManagerFcPtj|j|ffSN)arraytypecodetobytes)as )..\python\lib\multiprocessing\managers.py reduce_arrayr/s ;QYY[[1 11c Xg|]'}tti|(S)typegetattr.0names r r$3s3 N N NDd$72t$$&&'' N N Nr)itemskeysvaluesc0tt|ffSr)listobjs rrebuild_as_listr,4s $s)) rc.eZdZdZdZdZdZdZdZdS)rz3 Type to uniquely identify a shared object typeidaddressidc2|||c|_|_|_dSrr.)selfr/r0r1s r__init__zToken.__init__Ds06,dlDGGGrc*|j|j|jfSrr.r3s r __getstate__zToken.__getstate__Gs T\4733rc0|\|_|_|_dSrr.r3states r __setstate__zToken.__setstate__Js/4,dlDGGGrcP|jjd|jd|jd|jdS)Nz(typeid=z , address=z, id=)) __class____name__r/r0r1r6s r__repr__zToken.__repr__Ms4'''dlllDGGGM MrN) r? __module__ __qualname____doc__ __slots__r4r7r;r@rrrrr>si,IEEE444555MMMMMrrrc|||||f|\}}|dkr|St||)zL Send a message to manager using connection `c` and return response #RETURN)sendrecvconvert_to_error)cr1 methodnameargskwdskindresults rdispatchrPUsPFFB D$ '(((6688LD& y 4 ( ((rc 8|dkr|S|dvrmt|ts1td||t ||dkrt d|zSt |St d|S)N#ERROR) #TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrTzUnserializable message: %s zUnrecognized message type {!r}) isinstancestr TypeErrorformatr RemoteError ValueError)rNrOs rrIrI_s x 2 2 2&#&& 1@GGD$v,,0011 1 $ $ $=FGG Gv&& &:AA$GGHHHrceZdZdZdS)rYcBdt|jdzdzS)NzM --------------------------------------------------------------------------- rzK---------------------------------------------------------------------------)rVrLr6s r__str__zRemoteError.__str__os $s49Q<'8'886ABrN)r?rArBr]rrrrYrYns(CCCCCrrYcg}t|D]6}t||}t|r||7|S)z4 Return a list of names of methods of `obj` )dirr callableappend)r+tempr#funcs r all_methodsrdvsS DCsD!! D>>  KK    Krc4dt|DS)zP Return a list of names of methods of `obj` which do not start with '_' c*g|]}|ddk|S)r_rr!s rr$z"public_methods..s! @ @ @TaCDr)rdr*s rpublic_methodsrhs! A @[-- @ @ @@rceZdZdZgdZdZdZdZdZdZ dZ d Z d Z d Z e e e d Zd ZdZdZdZdZdZdZdZdZdS)ServerzM Server class which runs in a process controlled by a manager object ) shutdowncreateaccept_connection get_methods debug_infonumber_of_objectsdummyincrefdecrefct|ts0td|t |||_t j||_t|\}}||d|_ |j j |_ ddi|_ i|_ i|_tj|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes)r0backlog0Nr)rUbytesrWrXrregistryrAuthenticationStringauthkeylistener_clientlistenerr0 id_to_objid_to_refcountid_to_local_proxy_obj threadingLockmutex)r3rzr0r| serializerListenerClients rr4zServer.__init__s'5)) -8??T']],,-- -! 3G<< *:6&!"=== }, z* %'"^%% rc^tj|_|tj_ tj|j}d|_|  |j s3|j d|j 3n#ttf$rYnwxYwtjtjkr@t#jdtjt_tjt_tjddS#tjtjkr@t#jdtjt_tjt_tjdwxYw)z( Run the server forever )targetTr zresetting stdout, stderrrN)rEvent stop_eventrcurrent_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt SystemExitsysstdout __stdout__rdebug __stderr__stderrexit)r3rs r serve_foreverzServer.serve_foreversP$/++48!!1  't}===H"HO NN    /0022,O((+++/0022,%z2    zS^++ 5666 ^  ^ HQKKKKK zS^++ 5666 ^  ^ HQKKKKs15D<(A B54D<5C D<C  D< %>%>AcBtjdtjj|j}|j}|j}|j s dx}}|}|\}}} } ||\}} } n:#t$r-} |j |\}} } n#t$r| wxYwYd} ~ nd} ~ wwxYw|| vr%td|dt|d| t||} || i| }| o| |d}|r7||||\}}t#||j|}d||ff}n d|f}n#t&$r}d|f}Yd}~nd}~wwxYwn#t$rX|d t)f}nB |j|}|||||g| Ri| }d|f}n #t&$rd t)f}YnwxYwYnit,$rBtjd tjjt/jd Ynt&$rd t)f}YnwxYw ||n)#t&$r|d t)fYnwxYwn#t&$r}tjd tjjtjd|tjd||t/jdYd}~nd}~wwxYw|j dSdS)zQ Handle requests from the proxies in a particular process/thread z$starting server thread to service %rNzmethod z of z object is not in exposed=#PROXYrFrRrSz$got EOF -- exiting thread serving %rrrTzexception in thread serving %rz ... message was %rrr )rrrcurrent_threadr#rHrGrrrKeyErrorrAttributeErrorrr getrlrr0rrfallback_mappingEOFErrorrrrr)r3rrHrGrrKr+ridentrLrMexposed gettypeidkefunctionresr/ridentrexposedtokenrr fallback_funcrOs r serve_clientzServer.serve_clientsD 9+--2 4 4 4yyN /((**D 5 3#'' S$&&07-z4!.7.>+C))!!!! 6u=0Wii#!!! !'0iiii!W,,(.#T#YYYY9 #3 33 /"(D1D11C'J9==T+J+JF/+/;;tVS+I+I( %fdlF C C'(E):;(#.!(((#Q-CCCCCC(" ; ; ;%'6CC;(,(=j(I !. $s"59"""=A"" )&1$;;;+Z\\:;    A$355:<<<  3 3 3#Z\\2 3 <DIIII <<<D+Z\\:;;;;;<    :!0227999 /555 11555   }/((**D D D D D sE-2 A?>E-? B6 BB1 B))B1,E-1B66 Create a new shared object and return its id Nr z4Without 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)rrzrrZrhrUdictrWrXrr)r1rrrrrrrtuple) r3rJr/rLrMr`rmethod_to_typeid proxytyper+rs rrlz Server.createusZ / /mF+ ;Hg/PCIINN$NPPP1gh---(--+!"2D99G#FMM,d3C.D.DFFGGGw--$/?*@*@@2c77NE J? O O O%(#g,,8H$IDN5 !D///-.#E*7 / / / / / / / / / / / / / / /: AueGnn$$sDD**D.1D.cLt|j|jdS)zL Return the methods of the shared object indicated by token r )rrr1)r3rJrs rrnzServer.get_methodss T^EH-a0111rc|tj_|d||dS)z= Spawn a new thread to serve this connection rN)rrr#rGr)r3rJr#s rrmzServer.accept_connectionsB+/  ""'  !!! !rcD|j5 |j|xxdz cc<nh#t$r[}||jvrFd|j|<|j||j|<|j|\}}}t jd|n|Yd}~nd}~wwxYwddddS#1swxYwYdS)Nr z&Server re-enabled tracking & INCREF %r)rrrrrrr)r3rJrrr+rrs rrrz Server.increfs( Z   #E***a/****    D66612D'.259N5).2nU.C+C)JGOOOOHPOOOO                   s7B B BAB;BBBBBc ,||jvr ||jvrtjd|dS|j5|j|dkr:t d||j||j||j|xxdzcc<|j|dkr|j|=dddn #1swxYwY||jvrId|j|<tjd||j5|j|=ddddS#1swxYwYdSdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r )NrNzdisposing of obj with id %r)rrrrrAssertionErrorrXr)r3rJrs rrsz Server.decrefs + + + T/ / / J2E : : : F Z / /"5)Q..$AHHt~e4+E244555   & & &! + & & &"5)Q..'. / / / / / / / / / / / / / / / + + + %5DN5 ! J4e < < < * *N5) * * * * * * * * * * * * * * * * * * , +s$A:B77B;>B;1 DD D N)r?rArBrCrr4rrrrrrrrrrqrorprkrlrnrmrrrsrrrrjrjs]NNNF&&&$,222<   OOOb %      %%% ((( " " ""%"%"%H222 $*****rrjc eZdZdgZdZdZdZdS)Statevaluerr N)r?rArBrDINITIALSTARTEDSHUTDOWNrrrrrs$ IGGHHHrr)pickle xmlrpclibceZdZdZiZeZ ddddZdZdZ dd Z e dd Z d Z dd ZdZdZdZdZedZedZe ddZdS)rz! Base class for managers Nrg?)shutdown_timeoutcF|tjj}||_tj||_t |_t j|j_ ||_ t|\|_ |_ |p t|_||_dSr)rrr|_addressr{_authkeyr_staterr _serializerr} _Listener_Clientr_ctx_shutdown_timeout)r3r0r|rctxrs rr4zBaseManager.__init__s ?-//7G 4W== gg !M %'6z'B$ (;== !1rc~|jjtjkr~|jjtjkrt d|jjtjkrt dt d|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 rrXrj _registryrrrr6s r get_serverzBaseManager.get_servers ;  - -{ EM11"#;<<<"en44"#:;;;"(// 0ABBDDDdndmmT%577 7rct|j\}}||j|j}t |ddt j|j_dS)z> Connect manager object to the server process r|Nrq) r}rrrrPrrrr)r3rrrs rconnectzBaseManager.connectsR+4+;<&vdmT];;;tW%%%!M rrc b|jjtjkr~|jjtjkrt d|jjtjkrt dt d|jj|t|stdtj d\}}|j t|j|j|j|j|j|||f|_d d |jjD}t|jd z|z|j_|j|||_|tj|j_t9j|t|j|j|j|j|j|j|j fd |_!dS)z@ Spawn a server process for this manager object rrrNzinitializer must be a callableF)duplexr:c34K|]}t|VdSrr)r"is r z$BaseManager.start..1s(AAAQAAAAAAr-rrL exitpriority)"rrrrrr rrXr`rWr PiperProcessr _run_serverrrrr_processr _identityr?r#rrrHrFinalize_finalize_managerrrrk)r3 initializerinitargsreaderwriterrs rrzBaseManager.starts ;  - -{ EM11"#;<<<"en44"#:;;;"(// 0ABBDDD  "8K+@+@ "<== =$666 ))::).$-"FKC* AA)@AAAAA!$ZZ0C7%?       "M  $t**.- t{, 68  rcNtjtjtj||||||||}||j|tjd|j| dS)z@ Create a server, report its address and run it Nzmanager serving at %r) signalSIGINTSIG_IGN_ServerrGr0rrrr) clsrzr0r|rrrrservers rrzBaseManager._run_serverCs  fmV^444  " K " "XwDD  FN###  )6>:::rcN|jjtjks Jd||j|j} t|dd|f|z|\}}|n#|wxYwt||j||fS)zP Create a new shared object; return the token and exposed tuple zserver not yet startedrNrl) rrrrrrrrPrr)r3r/rLrMrr1rs r_createzBaseManager._createZs{ EM1113K111||DM4=|AA "4x&4NNKB JJLLLLDJJLLLLVT]B//88s A66B c|j<|j||js d|_dSdSdS)zC Join the manager process (if it has been spawned) N)rris_aliver3timeouts rrzBaseManager.joinfsU = $ M  w ' ' '=))++ % $  % $ % %rc||j|j} t|dd|S#|wxYw)zS Return some info about the servers shared objects and connections rNrorrrrPrrs r _debug_infozBaseManager._debug_infoosR||DM4=|AA D$ 55 JJLLLLDJJLLLL AAc||j|j} t|dd|S#|wxYw)z5 Return the number of shared objects rNrpr*rs r_number_of_objectszBaseManager._number_of_objectsysS||DM4=|AA D$(;<< JJLLLLDJJLLLLr,c|jjtjkr||jjtjkr~|jjtjkrt d|jjtjkrt dt d|jj|S)NzUnable to start serverrr) rrrrrrr rrXr6s r __enter__zBaseManager.__enter__s ;  - - JJLLL ;  - -{ EM11"#;<<<"en44"#:;;;"(// 0ABBDDD rc.|dSr)rkr3exc_typeexc_valexc_tbs r__exit__zBaseManager.__exit__s rc|jr,tjd |||} t|dd|n#|wxYwn#t $rYnwxYw|j||jrtjdt|drutjd|j|j||jr2tjd |j |jtj |_ tj|=dS#t$rYdSwxYw) zQ Shutdown the manager process; will be registered as a finalizer z#sending shutdown message to managerrNrk)r(zmanager still alive terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r&rrrPrrrhasattrr8killrrrr_address_to_localr)rr0r|r:rrrs rrzBaseManager._finalize_managers 7    ' I; < < < ww888!T4444JJLLLLDJJLLLLL     GL!1 2 2 2 2w!! ' /0007K00'IGHHH%G%''' GL)9::::'w'))' "GHHH$ $ n  +G444    DD s: A4AA4A00A44 BB E E,+E,c|jSr)rr6s rr0zBaseManager.addresss }rTcd|jvr|j|_t|pt dd}|pt dd}|rmt |D]K\}}t|tus Jd|zt|tus Jd|zL|||f|j<|r fd} | _ t|| dSdS)z9 Register a typeid with the manager type rN _exposed__method_to_typeid_z%r is not a stringctjd|jg|Ri|\}}||j||j|}||j|j}t|dd|jf|S)Nz)requesting creation of a shared %r objectmanagerr|rrrs) rrr$rrrr0rPr1) r3rLrMrexpproxyrrr/s rrbz"BaseManager.register..temps FOOO)T\&@4@@@4@@ s! 4+T M3||EM4=|IItX{;;; r) __dict__rcopy AutoProxyr r)r%rrVr?setattr) r!r/r`rrr create_methodkeyrrbs ` ` rregisterzBaseManager.registersV cl * *M..00CM  !IBWY TBB+J"9.BDII   H"#3#9#9#;#;<< H H UCyyC''')=)C'''E{{c)))+?%+G)))) g/! f  '      #DM C & & & & & ' 'r)NNrNrxr)NNNNT)r?rArBrCrrjr r4rrr classmethodrr$rr+r.r0r6 staticmethodrpropertyr0rKrrrrrscIG>F 2/2 2 2 2 2 2 7 7 7***))))V/1[, 9 9 9%%%%     \ DXEI6:%'%'%'[%'%'%'rrceZdZdZdZdS)ProcessLocalSetc2tj|ddS)Nc*|Sr)clearr*s rz*ProcessLocalSet.__init__..s399;;r)rregister_after_forkr6s rr4zProcessLocalSet.__init__s  '>'>?????rc$t|dfSrx)rr6s r __reduce__zProcessLocalSet.__reduce__sDzz2~rN)r?rArBr4rWrrrrPrPs5@@@rrPceZdZdZiZejZ ddZdZ difdZ d Z d Z e d Zd Zd ZdZdZdZdS)rz. A base for proxies of shared objects NTFctj5tj|jd}|5t jtf}|tj|j<dddn #1swxYwY|d|_|d|_ ||_ |j j |_ ||_ ||_t|d|_||_|t%j||_n6|j |j j|_nt%jj|_|r|t j|tjdS)Nrr )r_mutexr;rr0rForkAwareLocalrP_tls_idset_tokenr1_id_managerrr}r_owned_by_managerrr{rrr|_increfrU _after_fork) r3rrrBr|rrr manager_owned tls_idsets rr4zBaseProxy.__init__s   G G!377 tLLI  /11?3D3DD =F +EM:  G G G G G G G G G G G G G G GaL  l  ;> %&z215 "/  #8AADMM ] & M2DMM#355=DM   LLNNN  y'<=====sAA66A:=A:c\tjdtjj}t jjdkr|dt jjzz }||jj |j }t|dd|f||j _ dS)Nzmaking connection to manager MainThread|rrm)rrrrr#rrrr^r0rrPr\r )r3r#rs r_connectzBaseProxy._connect s 1222&((-  # % % *l : : C)24499 9D||DK/|GGt04':::# rrc |jj}n[#t$rNtjdt jj||jj}YnwxYw| |j |||f| \}}|dkr|S|dkr|\}}|j j |jd} |jj|_| ||j|j |j|} ||j|j}t)|dd|jf| St-||) zV Try to call a method of the referent and return a copy of the result z#thread %r does not own a connectionrFrrArNrs)r\r rrrrrr#rirGr_rHr`rr/r^r0rrrrPr1rI) r3rKrLrMrrNrOrrrrDs r _callmethodzBaseProxy._callmethod)sV (9'DD ( ( ( J< /116 8 8 8 MMOOO9'DDD  ( 48Zt4555yy{{ f 9  M X  #NGU / =bAI K/EMIt' wE<< t}<EED T4EH; 7 7 7LtV,,,s AA'&A'c,|dS)z9 Get a copy of the value of the referent rrlr6s r _getvaluezBaseProxy._getvalueGs ,,,rc |jr!tjd|jjdS||jj|j}t|dd|j ftjd|jj|j |j |j o |j j }tj|tj|j|j||j|j |jfd|_dS)Nz%owned_by_manager skipped INCREF of %rrrrz INCREF %r r)rarrr^r1rr0rrPr_r]addr`rrr_decrefr\_close)r3rr:s rrbzBaseProxy._increfMs  !  J>  O O O F||DK/|GGtX{333 ; /// !!! 6$-"6m )#+t}e)T[$,8  rc8||j||jtjkrr t jd|j||j|}t|dd|jfnF#t$r}t jd|Yd}~n"d}~wwxYwt jd|j|sXt|drJt jdtj j |j|`dSdSdS)Nz DECREF %rrrsz... decref failed %sz%DECREF %r -- manager already shutdownr z-thread %r has no more proxies so closing conn)discardr1rrrrrr0rPrr9rrr#r r)rr|r:tlsidsetrrrs rrszBaseProxy._decrefas? eh =EK5=88 6 ;111wu}g>>>tX{;;;; 6 6 6 1155555555 6 J> I I I l33  JF /116 8 8 8 N " " "     sAA88 B!BB!cd|_ |dS#t$r"}tjd|zYd}~dSd}~wwxYw)Nzincref failed: %s)r`rbrrr)r3rs rrczBaseProxy._after_forkzsf  / LLNNNNN / / / I)A- . . . . . . . . . /s A AA ci}t |j|d<t|ddr&|j|d<tt |j|j|ffStt||j|j|ffS)Nr|_isautoFr) r rr r> RebuildProxyrGr^rrr3rMs rrWzBaseProxy.__reduce__s    +"mDO 4E * * G"nDO  T-=tDF F!$ZZd.>EG Grc*|Sr)ro)r3memos r __deepcopy__zBaseProxy.__deepcopy__s~~rcddt|j|jjt |fzS)Nz<%s object, typeid %r at %#x>)rr?r^r/r1r6s rr@zBaseProxy.__repr__s/.T #T[%7DBC Crc |dS#t$rt|dddzcYSwxYw)zV Return representation of the referent (or a fall-back if that fails) r@Nrkz; '__str__()' failed>)rlrrr6s rr]zBaseProxy.__str__sV =##J// / = = =::crc?%<< < < < =s $>>NNNTF)r?rArBrCr;rForkAwareThreadLockrZr4rirlrorbrMrsrcrWrr@r]rrrrrs %T % ' 'F26HM'>'>'>'>R$$$,.B----<--- (\0/// G G G   CCC=====rrcttjdd}|rW|j|jkrGt jd|d|d<|j|jvr|j|j|j|j<| ddo"ttjdd }|||fd|i|S) z5 Function used for unpickling proxy objects. rNz*Rebuild a proxy owned by manager, token=%rTrdrr _inheritingF) r rrr0rrr1rrpop)rcrrrMr"rrs rr|r|sW,..0A4 H HF +&.EM11 ?GGG $_ 867 7 7 *  ( 2 4   E G+--}e D DD  4z 9 9& 9D 9 99rct|} |||fS#t$rYnwxYwi}|D]}td|d|d|t|tf|}||_||||f<|S)zB Return a proxy type whose methods are given by `exposed` zdef z:(self, /, *args, **kwds): return self._callmethod(z , args, kwds))rrexecrrr>)r#r_cachedicmeth ProxyTypes r MakeProxyTypersGnnG tWo&&       CHH 6:ddDDDBCF H H H HTI<--I!I'FD'? s  ((ct|d}|T||j|} t|dd|f}|n#|wxYw| ||j}|t jj}td|j z|} | ||||||} d| _ | S)z* Return an auto-proxy for `token` r Nrrnz AutoProxy[%s])rBr|rrrdT) r}r0rPrrrrr|rr/r{) rrrBr|rrrrdrrrrDs rrGrGs j)!,Gwu}g666 tT=5(CCG JJLLLLDJJLLLL7.")++3o r?r)r3r%rbr#rs rr@zNamespace.__repr__sT]((**++  5 5KD%??3'' 5 tttUU3444 >222DIIdOOOODDrN)r?rArBr4r@rrrrrs7###EEEEErrc@eZdZddZdZdZdZeeeZdS)ValueTc"||_||_dSr) _typecode_value)r3rrlocks rr4zValue.__init__s! rc|jSrrr6s rrz Value.gets {rc||_dSrrr3rs rrz Value.sets  rcPt|jd|jd|jdS)Nrrr=)rr?rrr6s rr@zValue.__repr__s*!$ZZ000$...$+++NNrNT) r?rArBr4rrr@rNrrrrrrscOOO HS#  EEErrc,tj||Sr)r)rsequencers rArrayrs ;x * **rc0eZdZdZdZdZdZdZdZdS) IteratorProxy)__next__rGthrowrc|Srrr6s r__iter__zIteratorProxy.__iter__  rc.|d|S)Nrrnr3rLs rrzIteratorProxy.__next__s D111rc.|d|S)NrGrnrs rrGzIteratorProxy.sends---rc.|d|S)Nrrnrs rrzIteratorProxy.throw...rc.|d|S)Nrrnrs rrzIteratorProxy.closerrN) r?rArBr>rrrGrrrrrrr sd6I222...////////rrc,eZdZdZddZdZdZdZdS) AcquirerProxy)acquirereleaseTNc@||fn||f}|d|SNrrn)r3blockingr(rLs rrzAcquirerProxy.acquires,%o{{Hg3F 4000rc,|dSNrrnr6s rrzAcquirerProxy.release ***rc,|dSrrnr6s rr0zAcquirerProxy.__enter__rrc,|dSrrnr2s rr6zAcquirerProxy.__exit__!rr)TN)r?rArBr>rrr0r6rrrrrsZ&I1111+++++++++++rrc0eZdZdZddZd dZdZddZdS) ConditionProxy)rrrnotify notify_allNc0|d|fSNrrnr's rrzConditionProxy.wait' 333rr c0|d|fS)Nrrn)r3ns rrzConditionProxy.notify)s1$///rc,|dS)Nrrnr6s rrzConditionProxy.notify_all+s ---rc|}|r|S|tj|z}nd}d}|s@||tjz }|dkrn!|||}|@|S)Nr)time monotonicr)r3 predicater(rOendtimewaittimes rwait_forzConditionProxy.wait_for-s  M  n&&0GGGH !""T^%5%55q== IIh   Y[[F  ! rr)r )r?rArBr>rrrrrrrrr%sdFI44440000...rrc,eZdZdZdZdZdZddZdS) EventProxy)rrrSrc,|dS)Nrrnr6s rrzEventProxy.is_setBs)))rc,|dSNrrnr6s rrzEventProxy.setD&&&rc,|dS)NrSrnr6s rrSzEventProxy.clearF(((rNc0|d|fSrrnr's rrzEventProxy.waitHrrr)r?rArBr>rrrSrrrrrr@sZ2I***''')))444444rrcheZdZdZd dZdZdZedZedZ edZ dS) BarrierProxy)__getattribute__rabortresetNc0|d|fSrrnr's rrzBarrierProxy.waitNrrc,|dS)Nrrnr6s rrzBarrierProxy.abortPrrc,|dS)Nrrnr6s rrzBarrierProxy.resetRrrc.|ddS)Nr)partiesrnr6s rrzBarrierProxy.partiesTs 2LAAArc.|ddS)Nr) n_waitingrnr6s rrzBarrierProxy.n_waitingWs 2NCCCrc.|ddS)Nr)brokenrnr6s rrzBarrierProxy.brokenZs 2K@@@rr) r?rArBr>rrrrNrrrrrrrrLs>I4444)))))) BBXB DDXD AAXAAArrc$eZdZdZdZdZdZdS)NamespaceProxy)r __setattr__ __delattr__c|ddkrt||St|d}|d|fS)Nrrgrlr)objectrr3rJ callmethods r __getattr__zNamespaceProxy.__getattr__asO q6S==**455 5,,T=AA z,sf555rc|ddkrt|||St|d}|d||fS)Nrrgrlr)rrr)r3rJrrs rrzNamespaceProxy.__setattr__fsR q6S==%%dC77 7,,T=AA z-#u666rc|ddkrt||St|d}|d|fS)Nrrgrlr)rrrrs rrzNamespaceProxy.__delattr__ksN q6S==%%dC00 0,,T=AA z-#000rN)r?rArBr>rrrrrrrr_sFBI666 777 11111rrcVeZdZdZdZdZeeeZee j Z dS) ValueProxy)rrc,|dS)Nrrnr6s rrzValueProxy.gettrrc0|d|fSrrnrs rrzValueProxy.setvsx000rN) r?rArBr>rrrNrrLtypes GenericAlias__class_getitem__rrrrrrsWI'''111 HS#  E# E$677rr BaseListProxy)__add__ __contains__ __delitem__ __getitem____len____mul__ __reversed____rmul__ __setitem__racountextendindexinsertrremovereverser__imul__ceZdZdZdZdS) ListProxyc4|d|f|S)Nrrnrs r__iadd__zListProxy.__iadd__s E8,,, rc4|d|f|S)Nr rnrs rr zListProxy.__imul__s eX... rN)r?rArBrr rrrr r s2rr  DictProxy)rrrrrrrSrFrr%r&rpopitem setdefaultrr'rIterator ArrayProxy)rrr PoolProxy) apply apply_asyncrimapimap_unorderedrmap map_asyncstarmap starmap_asyncr8 AsyncResult)rrrrrceZdZdZdZdS)rc|Srrr6s rr0zPoolProxy.__enter__rrc.|dSr)r8r2s rr6zPoolProxy.__exit__s rN)r?rArBr0r6rrrrrs2rceZdZdZdS)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?rArBrCrrrrrsrrQueue JoinableQueuerrRLock SemaphoreBoundedSemaphore ConditionBarrierPoolr)rr)rrI)rIc@eZdZdZgfdZdZdZdZdZdZ dZ d S) _SharedMemoryTrackerz+Manages one or more shared memory segments.c"||_||_dSrshared_memory_context_name segment_names)r3r#r1s rr4z_SharedMemoryTracker.__init__s.2D +!.D   rctjd|dt|j|dS)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)rrrr1rar3 segment_names rregister_segmentz%_SharedMemoryTracker.register_segmentsD JM<MM688MM N N N   % %l 3 3 3 3 3rctjd|dt|j|t j|}||dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the list of blocks being tracked.zDestroy segment r3N) rrrr1r r SharedMemoryrunlink)r3r5segments rdestroy_segmentz$_SharedMemoryTracker.destroy_segmentss JL,LL&((LL M M M   % %l 3 3 3#0>>G MMOOO NN     rcT|jddD]}||dS)z $ 2111 5 3 3 $$\2222 3 3rctjd|jjdt |dS)NzCall z .__del__ in )rrr>r?rr9r6s r__del__z_SharedMemoryTracker.__del__s= JNt~6NNFHHNN O O O KKMMMMMrc|j|jfSrr/r6s rr7z!_SharedMemoryTracker.__getstate__s3T5GH Hrc|j|dSr)r4r9s rr;z!_SharedMemoryTracker.__setstate__s DM5 ! ! ! !rN) r?rArBrCr4r6r;r9r>r7r;rrrr-r-s55/1 / / / / 4 4 4     3 3 3     I I I " " " " "rr-cJeZdZejgdzZdZdZdZdZdZ dZ dS) SharedMemoryServer) track_segmentrelease_segment list_segmentsc"tj|g|Ri||j}t|trt j|}td|dt|_ tj dtdS)Nshm_rgz"SharedMemoryServer started by pid ) rjr4r0rUryosfsdecoder-rshared_memory_contextrr)r3rLkwargsr0s rr4zSharedMemoryServer.__init__s OD 24 2 2 26 2 2 2lG'5)) /+g..$%@G%@%@fhh%@%@AA  & JFFHHFF G G G G Grct|j|ddr |j|d<tj|||g|Ri|S)zCreate a new distributed-shared object (not backed by a shared memory block) and return its id to be used in a Proxy Object.rk_shared_memory_proxyrJ)r9rzrJrjrl)r3rJr/rLrKs rrlzSharedMemoryServer.create sV t}V,R02HII M262L./=q&B4BBB6BB Brcj|jt||S)zACall unlink() on all tracked shared memory, terminate the Server.)rJr9rjrkrs rrkzSharedMemoryServer.shutdowns+  & - - / / /??4++ +rc:|j|dS)z?Adds the supplied shared memory block name to Server's tracker.N)rJr6r3rJr5s rrCz SharedMemoryServer.track_segments  & 7 7 E E E E Erc:|j|dS)zCalls unlink() on the shared memory block with the supplied name and removes it from the tracker instance inside the Server.N)rJr;rPs rrDz"SharedMemoryServer.release_segments!  & 6 6| D D D D Drc|jjS)zbReturns a list of names of shared memory blocks that the Server is currently tracking.)rJr1rs rrEz SharedMemoryServer.list_segments!s-; ;rN) r?rArBrjrr4rlrkrCrDrErrrrBrBsFFFG H H H C C C , , ,  F F F E E E  < < < < r?r)r3rLrKrVs rr4zSharedMemoryManager.__init__3sw'!! /..... //111   7 7 7 7 7 7 7 J$.1MM688MM N N N N Nrcdtj|jjdt dS)Nz.__del__ by pid )rrr>r?rr6s rr>zSharedMemoryManager.__del__?s/ J$.1MM688MM N N N N Nrc|jjtjkr~|jjtjkrt d|jjtjkrt dt d|jj||j |j |j |j S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr) rrrrrr rrXr rrrrr6s rrzSharedMemoryManager.get_serverBs{ EM11;$ 55&'KLLL[&%.88&'JKKK&,33DK4EFFHHH<< $ t/?AA Arc,||j|j5}tjdd|} t |dd|jfn(#t$r}||d}~wwxYw dddn #1swxYwY|S)zoReturns a new SharedMemory instance with the specified size in bytes, to be tracked by the manager.rNT)rlsizerC) rrrrr8rPr# BaseExceptionr9)r3r\rsmsrs rr8z SharedMemoryManager.SharedMemoryOsdmT]CC t#0dNNNT438+FFFF$JJLLLGG               Js4B AB  A9A44A99B  B B c:||j|j5}tj|} t |dd|jjfn-#t$r }|j |d}~wwxYw dddn #1swxYwY|S)zReturns a new ShareableList instance populated with the values from the input sequence, to be tracked by the manager.rNrC) rrrr ShareableListrPshmr#r]r9)r3rrslrs rr`z!SharedMemoryManager.ShareableList[sdmT]CC t"0::T426;.IIII$FMMOOOGJ               Is4BAB B A;;BBBBN) r?rArBrCrBr r4r>rr8r`rrrrr'sy  % O O O O O O A A A        rrr)U__all__rrrrqueuerrrHrrrrWr contextr r r rrrrr HAS_SHMEMra ImportErrorrrK view_typesr, view_typerrrPrIrrYrdrhrjrrr XmlListener XmlClientr}rrrPrr|rrGrrrrrrrrrrrr rr?r BasePoolProxyrrr$rrr&r'r(r)r*r+r)rr-rBrrrrrms A @ @    @@@@@@@@@@*I NN()))) III222 5; --- N N4M N N N 33IIy/2222 z MMMMMFMMM.&(b)))) I I ICCCCC)CCC   AAAG*G*G*G*G*VG*G*G*\ F#Z%67):+?@t't't't't'&t't't'tcm=m=m=m=m=m=m=m=f:::*)+,8<7<: E E E E E E E E     F   ++++ / / / / /I / / / + + + + +I + + +]6 4 4 4 4 4 4 4 4AAAAA9AAA&11111Y111&88888888 o0   M+(       ]<*  k, !"  $$       +    Wek*** _ek222 Wioz::: VY^];;; Wio}=== [)"5}EEE ')C"$$$ [)"5~FFF Y 1<@@@ VTY 222 VT9--- VT9--- WeZ000 WeZ000 [)^<<< Z=NNN ]%888  Q""""""""""""""""J*<*<*<*<*>>>>k>>>>>gQQsA88BB