
    F\hJ              	       D   / S Qr SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SSKJr  SSKJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr   SSKJr  Sr\ R1                  S5        S r\R6                  " \R                  \5        S V s/ s H  n \" \" 0 U 5      " 5       5      PM     sn rS r\ H  r \R6                  " \ \5        M     C C " S S\!5      r"S0 4S jr#S r$ " S S\%5      r&S r'S r( " S S\!5      r) " S S\!5      r*\RV                  \RX                  4\RZ                  \R\                  4S .r/ " S! S"\!5      r0 " S# S$\15      r2 " S% S&\!5      r3S' r40 4S( jr5  ScS) jr6 " S* S+\!5      r7 " S, S-\!5      r8SdS. jr9 " S/ S0\35      r: " S1 S2\35      r; " S3 S4\;5      r< " S5 S6\35      r= " S7 S8\35      r> " S9 S:\35      r? " S; S<\35      r@\5" S=S>5      rA " S? S@\A5      rB\5" SASB5      rCSCSD0\ClD         " SE SA\C5      rE\5" SFSG5      rF\5" SHSI5      rGSJSJSJSDSDSK.\GlD         " SL SH\G5      rH " SM SN\05      rI\IR7                  SO\R                  5        \IR7                  SP\R                  5        \IR7                  SQ\R                  \=5        \IR7                  SR\R                  \;5        \IR7                  SS\R                  \;5        \IR7                  ST\R                  \;5        \IR7                  SU\R                  \;5        \IR7                  SV\R                  \<5        \IR7                  SW\R                  \>5        \IR7                  SX\R                  \H5        \IR7                  SY\S\B5        \IR7                  SZ\T\E5        \IR7                  S-\8\@5        \IR7                  S[\9\F5        \IR7                  S+\7\?5        \IR7                  SD\:SS\9  \IR7                  SJSS]9  \(       a!   " S^ S_5      rU " S` Sa\)5      rV " Sb S\05      rWgg! \ a    Sr GNf = fs  sn f )e)BaseManagerSyncManager	BaseProxyToken    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryTSharedMemoryManagerFc                 Z    [         R                   U R                  U R                  5       44$ N)arraytypecodetobytes)as    //usr/lib/python3.13/multiprocessing/managers.pyreduce_arrayr   /   s     ;;QYY[111    )itemskeysvaluesc                 &    [         [        U 5      44$ r   )listobjs    r   rebuild_as_listr$   4   s    $s)r   c                   4    \ rS rSrSrSrS rS rS rS r	Sr
g	)
r   >   z+
Type to uniquely identify a shared object
typeidaddressidc                 .    XUsU l         U l        U l        g r   r'   )selfr(   r)   r*   s       r   __init__Token.__init__D   s    06,dlDGr   c                 H    U R                   U R                  U R                  4$ r   r'   r,   s    r   __getstate__Token.__getstate__G   s    T\\47733r   c                 .    Uu  U l         U l        U l        g r   r'   r,   states     r   __setstate__Token.__setstate__J   s    /4,dlDGr   c                     U R                   R                  < SU R                  < SU R                  < SU R                  < S3$ )Nz(typeid=z
, address=z, id=))	__class____name__r(   r)   r*   r0   s    r   __repr__Token.__repr__M   s-    ''dllDGGM 	Mr   )r)   r*   r(   N)r;   
__module____qualname____firstlineno____doc__	__slots__r-   r1   r6   r<   __static_attributes__ r   r   r   r   >   s$     ,IE45Mr   r   rD   c                     U R                  XX445        U R                  5       u  pVUS:X  a  U$  [        XV5      e! Af = f)zD
Send a message to manager using connection `c` and return response
#RETURN)sendrecvconvert_to_error)cr*   
methodnameargskwdskindresults          r   dispatchrP   U   sD     FFBD'(668LDyt,,s   : =c           	         U S:X  a  U$ U S;   aX  [        U[        5      (       d$  [        SR                  X[	        U5      5      5      eU S:X  a  [        SU-  5      $ [        U5      $ [        SR                  U 5      5      $ )N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrT   zUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformattypeRemoteError
ValueError)rN   rO   s     r   rI   rI   b   s    x	2	2&#&&@GG$v,01 1 $$=FGGv&&:AA$GHHr   c                       \ rS rSrS rSrg)rZ   q   c                 >    S[        U R                  S   5      -   S-   $ )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rV   rL   r0   s    r   __str__RemoteError.__str__r   s    $s499Q<'886ABr   rD   N)r;   r>   r?   r@   r_   rC   rD   r   r   rZ   rZ   q   s    Cr   rZ   c                     / n[        U 5       H1  n[        X5      n[        U5      (       d  M   UR                  U5        M3     U$ )z,
Return a list of names of methods of `obj`
)dirgetattrcallableappend)r#   tempnamefuncs       r   all_methodsri   y   s=     DCs!D>>KK  Kr   c                 X    [        U 5       Vs/ s H  oS   S:w  d  M  UPM     sn$ s  snf )zH
Return a list of names of methods of `obj` which do not start with '_'
r   _)ri   )r#   rg   s     r   public_methodsrl      s+     )-@-TaCD-@@@s   ''c                       \ rS rSrSr/ SQrS rS rS rS r	S r
S	 rS
 rS rS r\\\S.rS rS rS rS rS rS rS rS rS rSrg)Server   zE
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decrefc                 ~   [        U[        5      (       d$  [        SR                  U[	        U5      5      5      eXl        [        R                  " U5      U l        [        U   u  pVU" USS9U l
        U R                  R                  U l        SS0U l        0 U l        0 U l        [        R                   " 5       U l        g )Nz&Authkey {0!r} is type {1!s}, not bytes   )r)   backlog0NrD   )rU   bytesrW   rX   rY   registryr   AuthenticationStringauthkeylistener_clientlistenerr)   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r,   r   r)   r   
serializerListenerClients          r   r-   Server.__init__   s    '5))8??T'],- - !33G<*:6 !#>}},,z* %'"^^%
r   c                    [         R                  " 5       U l        U [        R                  " 5       l         [         R                  " U R                  S9nSUl        UR                  5          U R                  R                  5       (       d<  U R                  R                  S5        U R                  R                  5       (       d  M<  [        R                  [        R                   :w  aH  ["        R$                  " S5        [        R                   [        l        [        R&                  [        l        [        R*                  " S5        g! [        [        4 a     Nf = f! [        R                  [        R                   :w  aH  ["        R$                  " S5        [        R                   [        l        [        R&                  [        l        [        R*                  " S5        f = f)z
Run the server forever
)targetTr	   zresetting stdout, stderrr   N)r   Event
stop_eventr   current_process_manager_serverThreadaccepterdaemonstartis_setwaitKeyboardInterrupt
SystemExitsysstdout
__stdout__r   debug
__stderr__stderrexit)r,   r   s     r   serve_foreverServer.serve_forever   s&    $//+48!1	 ''t}}=H"HONN//0022OO((+ //0022
 zzS^^+

56 ^^
 ^^
HHQK &z2  zzS^^+

56 ^^
 ^^
HHQKs+   5E ,AE EE EE BG c                       U R                   R                  5       n[        R                  " U R
                  U4S9nSUl        UR                  5         MT  ! [         a     Mb  f = f)NTr   rL   )r   acceptOSErrorr   r   handle_requestr   r   )r,   rJ   ts      r   r   Server.accepter   sa    MM((*   (;(;1$GAAHGGI   s   A 
A$#A$c                    S n [         R                  " XR                  5        [         R                  " XR                  5        UR	                  5       nUu  p4pVX@R
                  ;   d
   SU-  5       e[        X5      n U" U/UQ70 UD6nSU4n	 UR                  U	5        g ! [         a    S[        5       4n	 N+f = f! [         a    S[        5       4n	 NGf = f! [         a|  n
 UR                  S[        5       45        O! [         a     Of = f[        R                  " SU	5        [        R                  " SU5        [        R                  " SU
5         S n
A
g S n
A
ff = f)Nz%r unrecognizedrF   rS   zFailure to send message: %rz ... request was %r ... exception was %r)r
   deliver_challenger   answer_challengerH   publicrc   	Exceptionr   rG   r   info)r,   rJ   requestignorefuncnamerL   rM   rh   rO   msges              r   _handle_requestServer._handle_request   sC   	*((LL9''<<8ffhG+2(Fd{{*H,=,HH*4*D*a/$/$/ !&)		2FF3K  3#Z\23  	/.C	/  	2jl34 II3S9II+W5II-q11	2s[   A9B= >B! C !B:9B:=CC
E$D ?E 
D
EDAEEc                      U R                  U5        UR                  5         g! [         a     Nf = f! UR                  5         f = f)z
Handle a new connection
N)r   r   closer,   conns     r   r   Server.handle_request   s@    	  &
 JJL	  		 JJLs   $ 
14 14 Ac                 n   [         R                  " S[        R                  " 5       R                  5        UR
                  nUR                  nU R                  nU R                  R                  5       (       d   S=pVU" 5       nUu  pp XH   u  pknX[;  a   [        SU< S[        U5      < SU< 35      e[        Xe5      n U" U	0 U
D6nU=(       a    UR                  US5      nU(       a4  U R!                  UUU5      u  nn[#        UU R$                  U5      nSUU44nOSU4n   U" W5        U R                  R                  5       (       d  M  gg! [         a-  n U R                  U   u  pkn SnAN! [         a    Uef = fSnAff = f! [&         a  nSU4n SnANzSnAff = f! [         aS    Wc  S	[)        5       4n N U R*                  U   nU" XWW/W	Q70 W
D6nSU4n N! [&         a    S	[)        5       4n  Nf = f[,         aN    [         R                  " S
[        R                  " 5       R                  5        [.        R0                  " S5         GN4[&         a    S	[)        5       4n GNLf = f! [&         a    U" S[)        5       45         GNef = f! [&         a  n[         R2                  " S[        R                  " 5       R                  5        [         R2                  " SW5        [         R2                  " SU5        UR5                  5         [.        R0                  " S5         SnAGNSnAff = f)zA
Handle requests from the proxies in a particular process/thread
z$starting server thread to service %rNzmethod z of z object is not in exposed=#PROXYrF   rR   rS   z$got EOF -- exiting thread serving %rr   rT   zexception in thread serving %rz ... message was %rr   r	   )r   r   r   current_threadrg   rH   rG   r   r   r   KeyErrorr   AttributeErrorrY   rc   getrq   r   r)   r   r   fallback_mappingEOFErrorr   r   r   r   )r,   r   rH   rG   r   rK   r#   r   identrL   rM   exposed	gettypeidkefunctionresr(   ridentrexposedtokenr   r   fallback_funcrO   s                           r   serve_clientServer.serve_client   s    	

9++-22	4 yyyyNN	//((**53#''
&07-4!.7.>+C) ,(#T#Y9 
 #33/"D1D1C 'J9==T+JF+/;;tVS+I( %fdllF C'(E):;(#..<Iw //((**   !! 66u= 0i# ! !	!" ! (#Q-C( " ;%'6C;(,(=(=j(I!. s"59"=A"  )&1$ ;+Z\:;  

A$335::< 3#Z\23 ! <+Z\:;< 		:!002779		/5		115

s   9F& 	E 0F& F 	AF& F& &I4 
FE3.F& 3F  FFF& 
F#FF& F##F& &I1!G%%G?;I1>G??AI1I10I14JJ JJ 
L4!BL//L4c                     U$ r   rD   r,   r   r   r#   s       r   fallback_getvalueServer.fallback_getvalueB  s    
r   c                     [        U5      $ r   rV   r   s       r   fallback_strServer.fallback_strE  s    3xr   c                     [        U5      $ r   )reprr   s       r   fallback_reprServer.fallback_reprH  s    Cyr   )r_   r<   	#GETVALUEc                     g r   rD   r,   rJ   s     r   rv   Server.dummyQ  s    r   c                    U R                      / n[        U R                  R                  5       5      nUR	                  5         U HQ  nUS:w  d  M  UR                  SU< SU R                  U   < S[        U R                  U   S   5      SS < 35        MS     SR                  U5      sSSS5        $ ! , (       d  f       g= f)	z?
Return some info --- useful to spot problems with refcounting
r|   z  z:       refcount=z
    r   NK   
)	r   r!   r   r   sortre   rV   r   join)r,   rJ   rO   r   r   s        r   rt   Server.debug_infoT  s    
 ZZF++0023DIIKC<MM#($*=*=e*D#&t~~e'<Q'?#@"#E#G H 
 99V$ ZZs   ?B4AB44
Cc                 ,    [        U R                  5      $ )z
Number of shared objects
)lenr   r   s     r   ru   Server.number_of_objectsd  s    
 4&&''r   c                      [         R                  " S5        UR                  S5        U R
                  R                  5         g!   SSKnUR	                  5          N3= f! U R
                  R                  5         f = f)z
Shutdown this process
z!manager received shutdown messagerF   Nr   N)r   r   rG   	traceback	print_excr   set)r,   rJ   r   s      r   rp   Server.shutdownk  sZ    	"JJ:;FF$%
 OO!		"!OO!s   'A AA A;c          	         U R                      U R                  U   u  pVpxUc'  U(       d  [        U5      S:w  a  [        S5      eUS   n	OU" U0 UD6n	Uc  [	        U	5      nUbP  [        U[        5      (       d$  [        SR                  U[        U5      5      5      e[        U5      [        U5      -   nS[        U	5      -  n
[        R                  " SX*5        U	[        U5      U4U R                  U
'   XR                   ;  a  SU R                   U
'   SSS5        U R#                  UW
5        U
[%        W5      4$ ! , (       d  f       N-= f)z.
Create a new shared object and return its id
Nr	   z4Without callable, must have one non-keyword argumentr   z,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)r   r   r   r[   rl   rU   dictrW   rX   rY   r!   r*   r   r   r   r   r   rw   tuple)r,   rJ   r(   rL   rM   rd   r   method_to_typeid	proxytyper#   r   s              r   rq   Server.createx  s@    ZZmmF+ ;H/ CIN$NP P1g--(-+!"2D99#FMM,d3C.DFG G w-$/?*@@2c7NEJJ?O%(#g,8H$IDNN5!///-.##E*7 : 	AueGn$$= Zs   DD88
Ec                 L    [        U R                  UR                     S   5      $ )z<
Return the methods of the shared object indicated by token
r	   )r   r   r*   )r,   rJ   r   s      r   rs   Server.get_methods  s!     T^^EHH-a011r   c                 |    U[         R                  " 5       l        UR                  S5        U R	                  U5        g)z-
Spawn a new thread to serve this connection
r   N)r   r   rg   rG   r   )r,   rJ   rg   s      r   rr   Server.accept_connection  s0     +/	  "'	 !!r   c                 T   U R                       U R                  U==   S-  ss'   S S S 5        g ! [         a]  nX R                  ;   aG  SU R                  U'   U R                  U   U R                  U'   [
        R                  " SU5         S nANiUeS nAff = f! , (       d  f       g = f)Nr	   z&Server re-enabled tracking & INCREF %r)r   r   r   r   r   r   r   )r,   rJ   r   r   s       r   rw   Server.incref  s    ZZ##E*a/* Z  
 66612D''.2259 NN5)JJGOOH Zs2   B/
BAB
BBBB
B'c           	         X R                   ;  a'  X R                  ;   a  [        R                  " SU5        g U R                     U R                   U   S::  a5  [        SR                  X R                  U   U R                   U   5      5      eU R                   U==   S-  ss'   U R                   U   S:X  a  U R                   U	 S S S 5        X R                   ;  aI  SU R                  U'   [        R                  " SU5        U R                     U R                  U	 S S S 5        g g ! , (       d  f       Ng= f! , (       d  f       g = f)NzServer DECREF skipping %rr   z+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	   )NrD   Nzdisposing of obj with id %r)r   r   r   r   r   AssertionErrorrX   r   )r,   rJ   r   s      r   rx   Server.decref  s   +++///JJ2E:ZZ""5)Q.$AHH~~e4++E245 5 &!+&""5)Q.''.  +++ %5DNN5!JJ4e<NN5)  , Z$ s   B D$D5$
D25
E)	r)   r   r   r   r   r   r   r   r   N)r;   r>   r?   r@   rA   r   r-   r   r   r   r   r   r   r   r   r   rv   rt   ru   rp   rq   rs   rr   rw   rx   rC   rD   r   r   rn   rn      s    NF&$,2<
Ob  %
% (""%H2"*r   rn   c                   &    \ rS rSrS/rSrSrSrSrg)Statei  valuer   r	      rD   N)	r;   r>   r?   r@   rB   INITIALSTARTEDSHUTDOWNrC   rD   r   r   r  r    s    	IGGHr   r  )pickle	xmlrpclibc                       \ rS rSrSr0 r\r  SSS.S jjrS r	S r
SS	 jr\ SS
 j5       rS rSS jrS rS rS rS r\S 5       r\S 5       r\  SS j5       rSrg)r   i  z
Base class for managers
Ng      ?)shutdown_timeoutc                Z   Uc  [         R                  " 5       R                  nXl        [         R                  " U5      U l        [        5       U l        [        R                  U R                  l	        X0l
        [        U   u  U l        U l        U=(       d
    [        5       U l        XPl        g r   )r   r   r   _addressr   _authkeyr  _stater  r  _serializerr   	_Listener_Clientr   _ctx_shutdown_timeout)r,   r)   r   r   ctxr  s         r   r-   BaseManager.__init__  sx    ?--/77G44W=g!MM%'6z'B$(;=	!1r   c                    U R                   R                  [        R                  :w  a  U R                   R                  [        R                  :X  a  [        S5      eU R                   R                  [        R                  :X  a  [        S5      e[        SR                  U R                   R                  5      5      e[        U R                  U R                  U R                  U R                  5      $ )zH
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  rX   rn   	_registryr  r  r  r0   s    r   
get_serverBaseManager.get_server  s     ;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD DdnndmmmmT%5%57 	7r   c                     [         U R                     u  pU" U R                  U R                  S9n[	        USS5        [
        R                  U R                  l        g)z.
Connect manager object to the server process
r   Nrv   )	r   r  r  r  rP   r  r  r  r  )r,   r   r   r   s       r   connectBaseManager.connect  sG     +4+;+;<dmmT]];tW%!MMr   c           
         U R                   R                  [        R                  :w  a  U R                   R                  [        R                  :X  a  [        S5      eU R                   R                  [        R                  :X  a  [        S5      e[        SR                  U R                   R                  5      5      eUb  [        U5      (       d  [        S5      e[        R                  " SS9u  p4U R                  R                  [        U 5      R                  U R                   U R"                  U R$                  U R&                  XAU4S9U l        S	R+                  S
 U R(                  R,                   5       5      n[        U 5      R.                  S-   U-   U R(                  l        U R(                  R3                  5         UR5                  5         UR7                  5       U l        UR5                  5         [        R                  U R                   l        [8        R:                  " U [        U 5      R<                  U R(                  U R"                  U R$                  U R                   U R>                  U R@                  4SS9U l!        g)z0
Spawn a server process for this manager object
r  r  r  Nzinitializer must be a callableF)duplexr   :c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   ).0is     r   	<genexpr>$BaseManager.start.<locals>.<genexpr>3  s     A)@AQ)@s   -r   rL   exitpriority)"r  r  r  r  r  r   r  rX   rd   rW   r
   Piper  ProcessrY   _run_serverr  r  r  r  _processr   	_identityr;   rg   r   r   rH   r   Finalize_finalize_managerr  r  rp   )r,   initializerinitargsreaderwriterr   s         r   r   BaseManager.start  s    ;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD D "8K+@+@<== $6 		)):))..$--""FC * 
 A)@)@AA!$Z00C7%? 	 "MM$t*..--t{{,, 6 68	r   c                 V   [         R                   " [         R                  [         R                  5        Ub  U" U6   U R                  XX45      nUR	                  UR
                  5        UR                  5         [        R                  " SUR
                  5        UR                  5         g)z0
Create a server, report its address and run it
Nzmanager serving at %r)
signalSIGINTSIG_IGN_ServerrG   r)   r   r   r   r   )	clsr   r)   r   r   r7  r4  r5  servers	            r   r/  BaseManager._run_serverE  sv     	fmmV^^4"" XD 	FNN# 			)6>>:r   c                N   U R                   R                  [        R                  :X  d   S5       eU R	                  U R
                  U R                  S9n [        USSU4U-   U5      u  pVUR                  5         [        XR
                  U5      U4$ ! UR                  5         f = f)z@
Create a new shared object; return the token and exposed tuple
zserver not yet startedr  Nrq   )
r  r  r  r  r  r  r  rP   r   r   )r,   r(   rL   rM   r   r*   r   s          r   _createBaseManager._create\  s     {{  EMM1K3KK1||DMM4==|A	"4x&4NKBJJLV]]B/88 JJLs   B B$c                     U R                   bC  U R                   R                  U5        U R                   R                  5       (       d  SU l         ggg)z3
Join the manager process (if it has been spawned)
N)r0  r   is_aliver,   timeouts     r   r   BaseManager.joinh  sD     ==$MMw'==))++ $ , %r   c                     U R                  U R                  U R                  S9n [        USS5      UR	                  5         $ ! UR	                  5         f = f)zC
Return some info about the servers shared objects and connections
r  Nrt   r  r  r  rP   r   r   s     r   _debug_infoBaseManager._debug_infoq  sB     ||DMM4==|A	D$5JJLDJJL   A Ac                     U R                  U R                  U R                  S9n [        USS5      UR	                  5         $ ! UR	                  5         f = f)z%
Return the number of shared objects
r  Nru   rJ  r   s     r   _number_of_objectsBaseManager._number_of_objects{  sC     ||DMM4==|A	D$(;<JJLDJJLrM  c                    U R                   R                  [        R                  :X  a  U R	                  5         U R                   R                  [        R
                  :w  a  U R                   R                  [        R                  :X  a  [        S5      eU R                   R                  [        R                  :X  a  [        S5      e[        SR                  U R                   R                  5      5      eU $ )NzUnable to start serverr  r  )	r  r  r  r  r   r  r   r  rX   r0   s    r   	__enter__BaseManager.__enter__  s    ;;-JJL;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD Dr   c                 $    U R                  5         g r   )rp   r,   exc_typeexc_valexc_tbs       r   __exit__BaseManager.__exit__  s    r   c                    U R                   " 5       (       Ga  [        R                  " S5         U" XS9n [        USS5        UR	                  5         U R                  " US9  U R                   " 5       (       a  [        R                  " S5        [        U S5      (       a  [        R                  " S5        U R                  " 5         U R                  " US9  U R                   " 5       (       a8  [        R                  " S	5        U R                  " 5         U R                  " 5         [        R                  Ul         [        R                  U	 g! UR	                  5         f = f! [
         a     GNf = f! [         a     gf = f)
zA
Shutdown the manager process; will be registered as a finalizer
z#sending shutdown message to managerr  Nrp   )rG  zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)rE  r   r   rP   r   r   r   hasattrr\  killr  r  r  r   _address_to_localr   )r   r)   r   r5   r  r  r   s          r   r3  BaseManager._finalize_manager  s$    II;<w8!T44JJL LL!12!!		/07K00IIGH%%'LL)9:''))		"GHnn	++G4% JJL $  		s:   E" E E" ;E3 EE" "
E0/E03
F ?F c                     U R                   $ r   )r  r0   s    r   r)   BaseManager.address  s    }}r   c                   ^^ SU R                   ;  a  U R                  R                  5       U l        Tc  [        mU=(       d    [	        TSS5      nU=(       d    [	        TSS5      nU(       aZ  [        UR                  5       5       H=  u  px[        U5      [        L d
   SU-  5       e[        U5      [        L a  M5   SU-  5       e   X$UT4U R                  T'   U(       a  UU4S jn	TU	l	        [        U TU	5        gg)z)
Register a typeid with the manager type
r  N	_exposed__method_to_typeid_z%r is not a stringc                  > [         R                  " ST5        U R                  " T/UQ70 UD6u  p4T" X0R                  U U R                  US9nU R                  UR                  U R                  S9n[        US SUR                  45        U$ )Nz)requesting creation of a shared %r objectmanagerr   r   r  rx   )	r   r   rB  r  r  r  r)   rP   r*   )	r,   rL   rM   r   expproxyr   r   r(   s	          r   rf   "BaseManager.register.<locals>.temp  s    

FO!\\&@4@4@
!++T MM3 ||EMM4==|ItX{;r   )__dict__r  copy	AutoProxyrc   r!   r   rY   rV   r;   setattr)
r>  r(   rd   r   r   r   create_methodkeyr  rf   s
    ` `      r   registerBaseManager.register  s     cll*MM..0CM!IBWYTB+ J"9.BDI 	 "#3#9#9#;<
CyC'C)=)CC'E{c)G+?%+GG) =
 /!f 	 #DMC& r   )
r  r  r  r  r  r0  r  r  r  rp   )NNr  Nr}   r   )NNNNT)r;   r>   r?   r@   rA   r  rn   r=  r-   r  r   r   classmethodr/  rB  r   rK  rO  rR  rY  staticmethodr3  propertyr)   rr  rC   rD   r   r   r   r     s     IG>F2/227*)V /1 ,
9%    D   EI6:%' %'r   r   c                        \ rS rSrS rS rSrg)ProcessLocalSeti  c                 4    [         R                  " U S 5        g )Nc                 "    U R                  5       $ r   )clearr"   s    r   <lambda>*ProcessLocalSet.__init__.<locals>.<lambda>  s
    399;r   )r   register_after_forkr0   s    r   r-   ProcessLocalSet.__init__  s      '>?r   c                     [        U 5      S4$ r}   )rY   r0   s    r   
__reduce__ProcessLocalSet.__reduce__  s    Dz2~r   rD   N)r;   r>   r?   r@   r-   r  rC   rD   r   r   rx  rx    s    @r   rx  c                       \ rS rSrSr0 r\R                  " 5       rSr	  SS jr
S rS0 4S jrS	 rS
 r\S 5       rS rS rS rS rS rSrg)r   i  z&
A base for proxies of shared objects
r	   Nc                    [         R                     [         R                  R                  UR                  S 5      nUc<  [
        R                  " 5       [        5       4nU[         R                  UR                  '   [         R                  U l	        [         =R                  S-  sl        S S S 5        WS   U l
        US   U l        Xl        U R                  R                  U l        X0l        X l        ["        U   S   U l        Xpl        Ub  [(        R*                  " U5      U l        OMU R                  b  U R                  R,                  U l        O$[(        R.                  " 5       R0                  U l        U(       a  U R3                  5         [
        R4                  " U [         R6                  5        g ! , (       d  f       GN= f)Nr	   r   )r   _mutexr_  r   r)   r   ForkAwareLocalrx  _next_serial_serial_tls_all_serials_tokenr*   _id_managerr  r   r  _owned_by_managerr   r   r  r   r   _increfr~  _after_fork)	r,   r   r   rh  r   r   rw   manager_ownedtls_serialss	            r   r-   BaseProxy.__init__  sB   #5599%--NK""113_5FF=H	++EMM:$11DL""a'"   N	
 (N;;>>%&z215 "/#88ADM]]& MM22DM#335==DMLLN  y'<'<=Q s   BF22
Gc                    [         R                  " S5        [        R                  " 5       R                  n[
        R                  " 5       R                  S:w  a%  US[
        R                  " 5       R                  -   -  nU R                  U R                  R                  U R                  S9n[        US SU45        X R                  l        g )Nzmaking connection to manager
MainThread|r  rr   )r   r   r   r   rg   r   r   r  r  r)   r  rP   r  r
   )r,   rg   r   s      r   _connectBaseProxy._connect)  s    

12&&(--##%**l:C)2249999D||DKK//|Gt04':#		r   rD   c                     U R                   R                  nUR                  U R                  XU45        UR                  5       u  pVUS:X  a  U$ US:X  a  Uu  pxU R                  R                  UR                     S   n	U R                  R                   Ul        U	" XR"                  U R                  U R$                  US9n
U R'                  UR                   U R$                  S9n[)        USSUR*                  45        U
$  [-        XV5      e! [         a^    [        R                  " S[
        R                  " 5       R                  5        U R                  5         U R                   R                  n GN\f = f! Af = f)	zF
Try to call a method of the referent and return a copy of the result
z#thread %r does not own a connectionrF   r   rg  r  Nrx   )r  r
   r   r   r   r   r   rg   r  rG   r  rH   r  r  r(   r  r)   r  r  r  rP   r*   rI   )r,   rK   rL   rM   r   rN   rO   r   r   r   rj  s              r   _callmethodBaseProxy._callmethod2  s=   	(99''D 			488Zt45yy{9MX#NG//=bAI KK//EM''wE <<t}}<EDT4EHH;7L	"400/  	(JJ< //1668MMO99''D		(2 s   D E8 A$E54E58E;c                 $    U R                  S5      $ )z)
Get a copy of the value of the referent
r   r  r0   s    r   	_getvalueBaseProxy._getvalueS  s     ,,r   c                    U R                   (       a,  [        R                  " SU R                  R                  5        g U R                  U R                  R                  U R                  S9n[        US SU R                  45        [        R                  " SU R                  R                  5        U R                  R                  U R                  5        U R                  =(       a    U R                  R                  n[        R                  " U [         R"                  U R                  U R                  U R                  UU R$                  U R                  U R
                  4SS9U l        g )Nz%owned_by_manager skipped INCREF of %rr  rw   z	INCREF %r
   r+  )r  r   r   r  r*   r  r)   r  rP   r  r  addr  r  r  r2  r   _decrefr  _close)r,   r   r5   s      r   r  BaseProxy._increfY  s    !!JJ>O||DKK//|GtX{3

;/dll+6$--"6"6mm)##++t||T]]E))T..>	r   c                 t   UR                  U5        Ub  UR                  [        R                  :X  aM   [        R
                  " SU R                  5        U" U R                  US9n[        US SU R                  45        O![        R
                  " SU R                  5        U(       dc  [        US5      (       aQ  [        R
                  " S[        R                  " 5       R                  5        UR                  R                  5         U?g g g ! [         a!  n[        R
                  " SU5         S nANS nAff = f)Nz	DECREF %rr  rx   z... decref failed %sz%DECREF %r -- manager already shutdownr
   z-thread %r has no more proxies so closing conn)discardr  r  r  r   r   r*   r)   rP   r   r]  r   r   rg   r
   r   )	r   serialr   r5   tlsidsetr  r   r   s	            r   r  BaseProxy._decrefm  s    f =EKK5==86

;1u}}g>tX{;
 JJ>I l33JJF //1668NN  "	 4u  6

11556s   AD 
D7D22D7c                     S U l          U R                  5         g ! [         a#  n[        R                  " SU-  5         S nAg S nAff = f)Nzincref failed: %s)r  r  r   r   r   )r,   r   s     r   r  BaseProxy._after_fork  s<    	/LLN 	/II)A-..	/s    
AAAc                    0 n[        5       b  U R                  US'   [        U SS5      (       a3  U R                  US'   [        [
        U R                  U R                  U44$ [        [        U 5      U R                  U R                  U44$ )Nr   _isautoFr   )	r   r  rc   rd  RebuildProxyrn  r  r  rY   r,   rM   s     r   r  BaseProxy.__reduce__  s    +"mmDO4E**"nnDO T-=-=tDF F !$Zd.>.>EG Gr   c                 "    U R                  5       $ r   )r  )r,   memos     r   __deepcopy__BaseProxy.__deepcopy__  s    ~~r   c                 r    S[        U 5      R                  U R                  R                  [	        U 5      4-  $ )Nz<%s object, typeid %r at %#x>)rY   r;   r  r(   r*   r0   s    r   r<   BaseProxy.__repr__  s3    .T
##T[[%7%7DBC 	Cr   c                 h     U R                  S5      $ ! [         a    [        U 5      SS S-   s $ f = f)zF
Return representation of the referent (or a fall-back if that fails)
r<   Nr  z; '__str__()' failed>)r  r   r   r0   s    r   r_   BaseProxy.__str__  s=    	=##J// 	=:cr?%<<<	=s    11)r  r  r  r  r  r  r  r  r  r  r  NNNTF)r;   r>   r?   r@   rA   r_  r   ForkAwareThreadLockr  r  r-   r  r  r  r  ru  r  r  r  r  r<   r_   rC   rD   r   r   r   r     s{     %%'F L26HM*>X$ ,.B B-(  0/G C=r   r   c                    [        [        R                  " 5       SS5      nU(       a  UR                  UR                  :X  af  [        R
                  " SU5        SUS'   UR                  UR                  ;  a0  UR                  UR                     UR                  UR                  '   UR                  SS5      =(       a%    [        [        R                  " 5       SS5      (       + nU " X4SU0UD6$ )	z-
Function used for unpickling proxy objects.
r   Nz*Rebuild a proxy owned by manager, token=%rTr  rw   _inheritingF)
rc   r   r   r)   r   r   r*   r   r   pop)rh   r   r   rM   r?  rw   s         r   r  r    s     W,,.0A4HF&..EMM1

?G $_886777  * ((2 	4  	EG++-}eDD  9&9D99r   c                     [        U5      n X U4   $ ! [         a     Of = f0 nU H  n[        SU< SU< S3U5        M     [        U [        4U5      nXl        XRX4'   U$ )z:
Return a proxy type whose methods are given by `exposed`
zdef z:(self, /, *args, **kwds):
        return self._callmethod(z, args, kwds))r   r   execrY   r   rd  )rg   r   _cachedicmeth	ProxyTypes         r   MakeProxyTyper    s     GnGWo&&  C6:DBCF	H  TI<-I!'D?s    
  c           	      h   [         U   S   nUc1  U" U R                  US9n [        USSU 45      nUR                  5         Uc  Ub  UR                  nUc  [
        R                  " 5       R                  n[        SU R                  -  U5      n	U	" XX#XVS9n
SU
l
        U
$ ! UR                  5         f = f)z"
Return an auto-proxy for `token`
r	   Nr  rs   zAutoProxy[%s])rh  r   rw   r  T)r   r)   rP   r   r  r   r   r   r  r(   r  )r   r   rh  r   r   rw   r  r  r   r  rj  s              r   rn  rn    s    
 j)!,Gu}}g6	tT=5(CGJJL7.""))+33o<gFIe#BEEML JJLs   B B1c                        \ rS rSrS rS rSrg)	Namespacei  c                :    U R                   R                  U5        g r   )rl  updater  s     r   r-   Namespace.__init__  s    T"r   c                 <   [        U R                  R                  5       5      n/ nU H5  u  p4UR                  S5      (       a  M  UR	                  U< SU< 35        M7     UR                  5         U R                  R                  < SSR                  U5      < S3$ )Nrk   =(, r9   )	r!   rl  r   
startswithre   r   r:   r;   r   )r,   r   rf   rg   r  s        r   r<   Namespace.__repr__  sr    T]]((*+ KD??3''tU34 ! 			>>22DIIdODDr   rD   N)r;   r>   r?   r@   r-   r<   rC   rD   r   r   r  r    s    #Er   r  c                   B    \ rS rSrSS jrS rS rS r\" \\5      r	Sr
g)	Valuei  c                     Xl         X l        g r   	_typecode_value)r,   r   r  locks       r   r-   Value.__init__  s    !r   c                     U R                   $ r   r  r0   s    r   r   	Value.get  s    {{r   c                     Xl         g r   r  r,   r  s     r   r   	Value.set	  s    r   c                 l    [        U 5      R                  < SU R                  < SU R                  < S3$ )Nr  r  r9   )rY   r;   r  r  r0   s    r   r<   Value.__repr__  s!    !$Z00$..$++NNr   r  NT)r;   r>   r?   r@   r-   r   r   r<   rv  r  rC   rD   r   r   r  r    s#    OS#Er   r  c                 .    [         R                   " X5      $ r   )r   )r   sequencer  s      r   Arrayr    s    ;;x**r   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
IteratorProxyi  )__next__rG   throwr   c                     U $ r   rD   r0   s    r   __iter__IteratorProxy.__iter__      r   c                 &    U R                  SU5      $ )Nr  r  r,   rL   s     r   r  IteratorProxy.__next__  s    
D11r   c                 &    U R                  SU5      $ )NrG   r  r  s     r   rG   IteratorProxy.send  s    --r   c                 &    U R                  SU5      $ )Nr  r  r  s     r   r  IteratorProxy.throw      ..r   c                 &    U R                  SU5      $ )Nr   r  r  s     r   r   IteratorProxy.close   r  r   rD   N)r;   r>   r?   r@   rd  r  r  rG   r  r   rC   rD   r   r   r  r    s     6I2.//r   r  c                   4    \ rS rSrSrS	S jrS rS rS rSr	g)
AcquirerProxyi$  )acquirereleaseNc                 8    Uc  U4OX4nU R                  SU5      $ Nr  r  )r,   blockingrG  rL   s       r   r  AcquirerProxy.acquire&  s%    %o{H3F	400r   c                 $    U R                  S5      $ Nr  r  r0   s    r   r  AcquirerProxy.release)      	**r   c                 $    U R                  S5      $ r  r  r0   s    r   rR  AcquirerProxy.__enter__+  r  r   c                 $    U R                  S5      $ r  r  rU  s       r   rY  AcquirerProxy.__exit__-  r  r   rD   )TN)
r;   r>   r?   r@   rd  r  r  rR  rY  rC   rD   r   r   r  r  $  s    &I1+++r   r  c                   <    \ rS rSrSrS	S jrS
S jrS rS	S jrSr	g)ConditionProxyi1  )r  r  r   notify
notify_allNc                 (    U R                  SU45      $ Nr   r  rF  s     r   r   ConditionProxy.wait3      
33r   c                 (    U R                  SU45      $ )Nr  r  )r,   ns     r   r  ConditionProxy.notify5  s    1$//r   c                 $    U R                  S5      $ )Nr  r  r0   s    r   r  ConditionProxy.notify_all7  s    --r   c                     U" 5       nU(       a  U$ Ub  [         R                  " 5       U-   nOS nS nU(       dE  Ub!  U[         R                  " 5       -
  nUS::  a   U$ U R                  W5        U" 5       nU(       d  ME  U$ )Nr   )time	monotonicr   )r,   	predicaterG  rO   endtimewaittimes         r   wait_forConditionProxy.wait_for9  s    Mnn&0GGH""T^^%55q=  IIh[F & r   rD   r   )r	   )
r;   r>   r?   r@   rd  r   r  r  r  rC   rD   r   r   r  r  1  s    FI40.r   r  c                   4    \ rS rSrSrS rS rS rS	S jrSr	g)

EventProxyiL  )r   r   r{  r   c                 $    U R                  S5      $ )Nr   r  r0   s    r   r   EventProxy.is_setN  s    ))r   c                 $    U R                  S5      $ Nr   r  r0   s    r   r   EventProxy.setP      &&r   c                 $    U R                  S5      $ )Nr{  r  r0   s    r   r{  EventProxy.clearR      ((r   Nc                 (    U R                  SU45      $ r  r  rF  s     r   r   EventProxy.waitT  r  r   rD   r   )
r;   r>   r?   r@   rd  r   r   r{  r   rC   rD   r   r   r   r   L  s    2I*')4r   r   c                   ^    \ rS rSrSrSS jrS rS r\S 5       r	\S 5       r
\S	 5       rS
rg)BarrierProxyiX  )__getattribute__r   abortresetNc                 (    U R                  SU45      $ r  r  rF  s     r   r   BarrierProxy.waitZ  r  r   c                 $    U R                  S5      $ )Nr/  r  r0   s    r   r/  BarrierProxy.abort\  r)  r   c                 $    U R                  S5      $ )Nr0  r  r0   s    r   r0  BarrierProxy.reset^  r)  r   c                 &    U R                  SS5      $ )Nr.  )partiesr  r0   s    r   r8  BarrierProxy.parties`  s     2LAAr   c                 &    U R                  SS5      $ )Nr.  )	n_waitingr  r0   s    r   r;  BarrierProxy.n_waitingc  s     2NCCr   c                 &    U R                  SS5      $ )Nr.  )brokenr  r0   s    r   r>  BarrierProxy.brokenf  s     2K@@r   rD   r   )r;   r>   r?   r@   rd  r   r/  r0  rv  r8  r;  r>  rC   rD   r   r   r-  r-  X  sR    >I4))B BD DA Ar   r-  c                   *    \ rS rSrSrS rS rS rSrg)NamespaceProxyik  )r.  __setattr____delattr__c                 ~    US   S:X  a  [         R                  X5      $ [         R                  U S5      nU" SU45      $ )Nr   rk   r  r.  )objectr.  r,   rq  
callmethods      r   __getattr__NamespaceProxy.__getattr__m  s@    q6S=**455,,T=A
,sf55r   c                     US   S:X  a  [         R                  XU5      $ [         R                  U S5      nU" SX45      $ )Nr   rk   r  rB  )rE  rB  r.  )r,   rq  r  rG  s       r   rB  NamespaceProxy.__setattr__r  sA    q6S=%%d77,,T=A
-#66r   c                 ~    US   S:X  a  [         R                  X5      $ [         R                  U S5      nU" SU45      $ )Nr   rk   r  rC  )rE  rC  r.  rF  s      r   rC  NamespaceProxy.__delattr__w  s?    q6S=%%d00,,T=A
-#00r   rD   N)	r;   r>   r?   r@   rd  rH  rB  rC  rC   rD   r   r   rA  rA  k  s    BI6
7
1r   rA  c                   Z    \ rS rSrSrS rS r\" \\5      r\	" \
R                  5      rSrg)
ValueProxyi~  )r   r   c                 $    U R                  S5      $ )Nr   r  r0   s    r   r   ValueProxy.get  r&  r   c                 (    U R                  SU45      $ r$  r  r  s     r   r   ValueProxy.set  s    x00r   rD   N)r;   r>   r?   r@   rd  r   r   rv  r  rt  typesGenericAlias__class_getitem__rC   rD   r   r   rO  rO  ~  s.    I'1S#E#E$6$67r   rO  BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__re   countextendindexinsertr  removereverser   __imul__c                   D    \ rS rSrS rS r\" \R                  5      r	Sr
g)	ListProxyi  c                 ,    U R                  SU45        U $ )Nrb  r  r  s     r   __iadd__ListProxy.__iadd__  s    E8,r   c                 ,    U R                  SU45        U $ )Nrg  r  r  s     r   rg  ListProxy.__imul__  s    eX.r   rD   N)r;   r>   r?   r@   rk  rg  rt  rT  rU  rV  rC   rD   r   r   ri  ri    s     $E$6$67r   ri  	DictProxy)rY  rZ  r[  r  r\  r`  r{  rm  r   r   r   r  popitem
setdefaultr  r   r  Iteratorc                   8    \ rS rSr\" \R                  5      rSrg)ro  i  rD   N)	r;   r>   r?   r@   rt  rT  rU  rV  rC   rD   r   r   ro  ro    s    #E$6$67r   
ArrayProxy)r\  r[  r`  	PoolProxy)applyapply_asyncr   imapimap_unorderedr   map	map_asyncstarmapstarmap_asyncr\  AsyncResult)rw  r{  r}  rx  ry  c                        \ rS rSrS rS rSrg)ru  i  c                     U $ r   rD   r0   s    r   rR  PoolProxy.__enter__  r  r   c                 $    U R                  5         g r   )r\  rU  s       r   rY  PoolProxy.__exit__  s    r   rD   N)r;   r>   r?   r@   rR  rY  rC   rD   r   r   ru  ru    s    r   c                       \ rS rSrSrSrg)r   i  a  
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.
rD   N)r;   r>   r?   r@   rA   rC   rD   r   r   r   r     s    r   r   QueueJoinableQueuer   r   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr!   r   r  )r   rp  )rp  c                   H    \ rS rSrSr/ 4S jrS rS rS rS r	S r
S	 rS
rg)_SharedMemoryTrackeri  z+Manages one or more shared memory segments.c                     Xl         X l        g r   shared_memory_context_namesegment_names)r,   rg   r  s      r   r-   _SharedMemoryTracker.__init__  s    .2+!.r   c                     [         R                  " SU< S[        5        35        U R                  R	                  U5        g)z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)r   r   r   r  re   r,   segment_names     r   register_segment%_SharedMemoryTracker.register_segment  s3    JJ*<*:(68*MN%%l3r   c                     [         R                  " SU< S[        5        35        U R                  R	                  U5        [
        R                  " U5      nUR                  5         UR                  5         g)zvCalls unlink() on the shared memory block with the supplied name
and removes it from the list of blocks being tracked.zDestroy segment r  N)	r   r   r   r  re  r   SharedMemoryr   unlink)r,   r  segments      r   destroy_segment$_SharedMemoryTracker.destroy_segment  sX     JJ),)9&(LM%%l3#00>GMMONNr   c                 R    U R                   SS  H  nU R                  U5        M     g)z<Calls destroy_segment() on all tracked shared memory blocks.N)r  r  r  s     r   r  _SharedMemoryTracker.unlink  s%     $ 2 21 5$$\2 !6r   c                     [         R                  " SU R                  R                   S[	        5        35        U R                  5         g )NzCall z.__del__ in )r   r   r:   r;   r   r  r0   s    r   __del___SharedMemoryTracker.__del__  s1    JJt~~667|FH:NOKKMr   c                 2    U R                   U R                  4$ r   r  r0   s    r   r1   !_SharedMemoryTracker.__getstate__  s    33T5G5GHHr   c                 "    U R                   " U6   g r   )r-   r4   s     r   r6   !_SharedMemoryTracker.__setstate__  s    MM5!r   )r  r  N)r;   r>   r?   r@   rA   r-   r  r  r  r  r1   r6   rC   rD   r   r   r  r    s,    5/1 	/	4
		3
		I	"r   r  c                   Z    \ rS rSr\R
                  / SQ-   rS rS rS rS r	S r
S rS	rg
)SharedMemoryServeri
  )track_segmentrelease_segmentlist_segmentsc                 $   [         R                  " U /UQ70 UD6  U R                  n[        U[        5      (       a  [
        R                  " U5      n[        SU S[        5        35      U l	        [        R                  " S[        5        35        g )Nshm_rk   z"SharedMemoryServer started by pid )rn   r-   r)   rU   r~   osfsdecoder  r   shared_memory_contextr   r   )r,   rL   kwargsr)   s       r   r-   SharedMemoryServer.__init__  sq    OOD24262llG'5))++g.$tG9AfhZ%@A &JJ;FH:FGr   c                    [        U R                  U   S   S5      (       a  U R                  US'   [        R                  " XU/UQ70 UD6$ )z|Create a new distributed-shared object (not backed by a shared
memory block) and return its id to be used in a Proxy Object.r  _shared_memory_proxyr  )r]  r   r  rn   rq   )r,   rJ   r(   rL   r  s        r   rq   SharedMemoryServer.create  sL     t}}V,R02HII262L2L./==&B4B6BBr   c                 `    U R                   R                  5         [        R                  X5      $ )zACall unlink() on all tracked shared memory, terminate the Server.)r  r  rn   rp   r   s     r   rp   SharedMemoryServer.shutdown#  s#    &&--/??4++r   c                 :    U R                   R                  U5        g)z?Adds the supplied shared memory block name to Server's tracker.N)r  r  r,   rJ   r  s      r   r   SharedMemoryServer.track_segment(  s    &&77Er   c                 :    U R                   R                  U5        g)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  s      r   r  "SharedMemoryServer.release_segment,  s     &&66|Dr   c                 .    U R                   R                  $ )zVReturns a list of names of shared memory blocks that the Server
is currently tracking.)r  r  r   s     r   r   SharedMemoryServer.list_segments1  s     --;;;r   )r  N)r;   r>   r?   r@   rn   r   r-   rq   rp   r  r  r  rC   rD   r   r   r  r  
  s6    FG	H	C	,
	F	E
	<r   r  c                   :    \ rS rSrSr\rS rS rS r	S r
S rSrg	)
r   i7  aq  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).
c                     [         R                  S:X  a  SSKJn  UR	                  5         [
        R                  " U /UQ70 UD6  [        R                  " U R                  R                   S[        5        35        g )Nposixr	   )resource_trackerz created by pid )r  rg    r  ensure_runningr   r-   r   r   r:   r;   r   )r,   rL   r  r  s       r   r-   SharedMemoryManager.__init__C  s\    ww'! / //1  777JJ$..1122B68*MNr   c                 r    [         R                  " U R                  R                   S[	        5        35        g )Nz.__del__ by pid )r   r   r:   r;   r   r0   s    r   r  SharedMemoryManager.__del__O  s'    JJ$..1122B68*MNr   c                    U R                   R                  [        R                  :w  a  U R                   R                  [        R                  :X  a  [        S5      eU R                   R                  [        R                  :X  a  [        S5      e[        SR                  U R                   R                  5      5      eU R                  U R                  U R                  U R                  U R                  5      $ )z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr  )r  r  r  r  r  r   r  rX   r=  r  r  r  r  r0   s    r   r  SharedMemoryManager.get_serverR  s    {{  EMM1;;$$5&'KLL[[&&%..8&'JKK&,33DKK4E4EFH H<< $t/?/?A Ar   c                 .   U R                  U R                  U R                  S9 n[        R                  " SSUS9n [        USSUR                  45         SSS5        U$ ! [         a  nUR                  5         UeSnAff = f! , (       d  f       W$ = f)zcReturns a new SharedMemory instance with the specified size in
bytes, to be tracked by the manager.r  NT)rq   sizer  )	r  r  r  r   r  rP   rg   BaseExceptionr  )r,   r  r   smsr   s        r   r   SharedMemoryManager.SharedMemory_  s     dmmT]]Ct#00dNT4388+F D J % JJLG	 DC Js(   BA!!
B+A==BB
Bc                 V   U R                  U R                  U R                  S9 n[        R                  " U5      n [        USSUR                  R                  45         SSS5        U$ ! [         a!  nUR                  R                  5         UeSnAff = f! , (       d  f       W$ = f)zuReturns a new ShareableList instance populated with the values
from the input sequence, to be tracked by the manager.r  Nr  )
r  r  r  r   ShareableListrP   shmrg   r  r  )r,   r  r   slr   s        r   r  !SharedMemoryManager.ShareableListk  s     dmmT]]Ct"00:T4266;;.I D I % FFMMOG	 DC Is(   B#A++
B5BBB
B(rD   N)r;   r>   r?   r@   rA   r  r=  r-   r  r  r  r  rC   rD   r   r   r   r   7  s*    	 %
	O	O	A
	
	r   r  r  )X__all__r   r   r:  r   queuer  rT  r  r   r   r   r  r
   contextr   r   r   r   r   r   r   r   	HAS_SHMEMre   ImportErrorr   rr  rY   rc   
view_typesr$   	view_typerE  r   rP   rI   r   rZ   ri   rl   rn   r  r   r   XmlListener	XmlClientr   r   r   rx  r   r  r  rn  r  r  r  r  r  r  r   r-  rA  rO  rW  ri  _BaseDictProxyre  ro  rt  BasePoolProxyru  r   r  r   r   r  r  r  r  r  r  r!   r   r  r  r   )rg   s   0r   <module>r     s]   A        	     @ @    * INN()2 	  5;; -4MN4MDd72t$&'4MN
Iy/2 zMF M. &(b IC) C	AF*V F*Z
F  ##Z%6%67)):+?+?@t'& t'tc w= w=z:* )+ , 8<7<:
E 
E
F 
+/I /
+I 
+] 6	4 	4A9 A&1Y 1&8 8 o 0 8 8 { -  
% !8 8 < * 

 k , 
 !" $   	+ 	   Wekk *   _ekk 2   Wiooz :   VY^^] ;   Wioo} =   [)"5"5} E   ')C)C"$   [)"5"5~ F   Y	 1 1< @   VTYY	 2   VT9 -   VT9 -   WeZ 0   WeZ 0   [)^ <   Z=  N   ]%  8 "" ""J*<V *<Z>k >g %  I Os   P PPP