
    dC                     t   g d Z ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ ddlmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ 	 ddlmZ dZe                     d           n# e$ r dZY nw xY wd Z ej        ej        e           d dD             Zd ZeD ]Z ej        ee           [[ G d de          Z di fdZ!d Z" G d de#          Z$d Z%d Z& G d de          Z' G d d e          Z(ej)        ej*        fej+        ej,        fd!Z- G d" d#e          Z. G d$ d%e/          Z0 G d& d'e          Z1d( Z2i fd)Z3	 	 dcd*Z4 G d+ d,e          Z5 G d- d.e          Z6ddd/Z7 G d0 d1e1          Z8 G d2 d3e1          Z9 G d4 d5e9          Z: G d6 d7e1          Z; G d8 d9e1          Z< G d: d;e1          Z= G d< d=e1          Z> e3d>d?          Z? G d@ dAe?          Z@ e3dBdC          ZAdDdEieA_B         e3dFdG          ZC e3dHdI          ZDdJdJdJdEdEdKeD_B         G dL dHeD          ZE G dM dNe.          ZFeF                    dOejG                   eF                    dPejG                   eF                    dQejH        e;           eF                    dRejI        e9           eF                    dSejJ        e9           eF                    dTejK        e9           eF                    dUejL        e9           eF                    dVejM        e:           eF                    dWejN        e<           eF                    dXejO        eE           eF                    dYePe@           eF                    dZeQeA           eF                    d.e6e>           eF                    d[e7eC           eF                    d,e5e=           eF                    dEe8d\           eF                    dJd]           er+ G d^ d_          ZR G d` dae'          ZS G db de.          ZTdS dS )e)BaseManagerSyncManager	BaseProxyToken    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryTSharedMemoryManagerFc                 P    t           j         | j        |                                 ffS N)arraytypecodetobytes)as    *  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/multiprocessing/managers.pyreduce_arrayr   /   s    ;QYY[[111    c           	      X    g | ]'}t           t          i |                                (S  )typegetattr.0names     r   
<listcomp>r$   3   s3    NNNDd$72t$$&&''NNNr   )itemskeysvaluesc                 0    t           t          |           ffS r   )listobjs    r   rebuild_as_listr,   4   s    $s))r   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )r   z3
    Type to uniquely identify a shared object
    typeidaddressidc                 2    |||c| _         | _        | _        d S r   r.   )selfr/   r0   r1   s       r   __init__zToken.__init__D   s    06,dlDGGGr   c                 *    | j         | j        | j        fS r   r.   r3   s    r   __getstate__zToken.__getstate__G   s    T\4733r   c                 0    |\  | _         | _        | _        d S r   r.   r3   states     r   __setstate__zToken.__setstate__J   s    /4,dlDGGGr   c                 P    | j         j        d| j        d| j        d| j        dS )Nz(typeid=z
, address=z, id=))	__class____name__r/   r0   r1   r6   s    r   __repr__zToken.__repr__M   s4    '''dlllDGGGM 	Mr   N)	r?   
__module____qualname____doc__	__slots__r4   r7   r;   r@   r   r   r   r   r   >   si          ,IE E E4 4 45 5 5M M M M Mr   r   r   c                     |                      ||||f           |                                 \  }}|dk    r|S t          ||          )zL
    Send a message to manager using connection `c` and return response
    #RETURN)sendrecvconvert_to_error)cr1   
methodnameargskwdskindresults          r   dispatchrP   U   sP     FFB
D$'(((6688LD&y
4
(
((r   c           	      8   | dk    r|S | dv rmt          |t                    s1t          d                    || t	          |                              | dk    rt          d|z            S t          |          S t          d                    |                     S )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formatr   RemoteError
ValueError)rN   rO   s     r   rI   rI   _   s    x	2	2	2&#&& 	1@GGD$v,,0 01 1 1 $$$=FGGGv&&&:AA$GGHHHr   c                       e Zd Zd ZdS )rY   c                 B    dt          | j        d                   z   dz   S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rV   rL   r6   s    r   __str__zRemoteError.__str__o   s     $s49Q<'8'886ABr   N)r?   rA   rB   r]   r   r   r   rY   rY   n   s(        C C C C Cr   rY   c                     g }t          |           D ]6}t          | |          }t          |          r|                    |           7|S )z4
    Return a list of names of methods of `obj`
    )dirr    callableappend)r+   tempr#   funcs       r   all_methodsrd   v   sS     DC  sD!!D>> 	KKKr   c                 4    d t          |           D             S )zP
    Return a list of names of methods of `obj` which do not start with '_'
    c                 *    g | ]}|d          dk    |S )r   _r   r!   s     r   r$   z"public_methods.<locals>.<listcomp>   s!    @@@TaCDr   )rd   r*   s    r   public_methodsrh      s!     A@[--@@@@r   c                       e Zd ZdZg dZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd ZeeedZd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )ServerzM
    Server class which runs in a process controlled by a manager object
    )	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefc                    t          |t                    s0t          d                    |t	          |                              || _        t          j        |          | _        t          |         \  }} ||d          | _
        | j
        j        | _        ddi| _        i | _        i | _        t          j                    | _        d S )Nz&Authkey {0!r} is type {1!s}, not bytes   )r0   backlog0Nr   )rU   bytesrW   rX   r   registryr   AuthenticationStringauthkeylistener_clientlistenerr0   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r3   rz   r0   r|   
serializerListenerClients          r   r4   zServer.__init__   s    '5)) 	-8??T']], ,- - - !3G<<*:6& !"===},z* %'"^%%


r   c                 ^   t          j                    | _        | t          j                    _        	 t          j        | j                  }d|_        |	                                 	 | j        
                                s3| j                            d           | j        
                                3n# t          t          f$ r Y nw xY wt          j        t          j        k    r@t#          j        d           t          j        t          _        t          j        t          _        t          j        d           dS # t          j        t          j        k    r@t#          j        d           t          j        t          _        t          j        t          _        t          j        d           w xY w)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)r3   r   s     r   serve_foreverzServer.serve_forever   sP    $/++48!!1	 't}===H"HONN/0022 ,O((+++ /0022 ,%z2    zS^++
5666 ^
 ^
HQKKKKK	 zS^++
5666 ^
 ^
HQKKKKs1   5D< (AB5 4D< 5C	D< C		D< <A0F,c                     	 	 | j                                         }n# t          $ r Y (w xY wt          j        | j        |f          }d|_        |                                 c)NTr   rL   )r~   acceptOSErrorr   r   handle_requestr   r   )r3   rJ   ts      r   r   zServer.accepter   st    	M((**    (;1$GGGAAHGGIII	s    
**c                    d }	 t          j        || j                   t          j        || j                   |                                }|\  }}}}|| j        v sJ d|z              t          | |          }	  ||g|R i |}d|f}	n@# t          $ r dt                      f}	Y n$w xY w# t          $ r dt                      f}	Y nw xY w	 |	                    |	           d S # t          $ r}
	 |	                    dt                      f           n# t          $ r Y nw xY wt          j        d|	           t          j        d|           t          j        d|
           Y d }
~
d S d }
~
ww xY w)Nz%r unrecognizedrF   rS   zFailure to send message: %rz ... request was %r ... exception was %r)r
   deliver_challenger|   answer_challengerH   publicr    	Exceptionr   rG   r   info)r3   rJ   requestignorefuncnamerL   rM   rc   rO   msges              r   _handle_requestzServer._handle_request   s   	*(DL999'4<888ffhhG+2(FHdDt{***,=,H***4**D*a/$///$// !&)  3 3 3#Z\\23  	/ 	/ 	/.CCC	/		2FF3KKKKK 	2 	2 	2jll34444   I3S999I+W555I-q111111111	2s[   A5B+ :B B('B(+CCC# #
E,.#DE'
DE'DAE''E,c                     	 |                      |           n# t          $ r Y nw xY w|                                 dS # |                                 w xY w)z)
        Handle a new connection
        N)r   r   closer3   conns     r   r   zServer.handle_request   sc    	  &&&& 	 	 	D	 JJLLLLLDJJLLLLs    > 
%> %> Ac                 B   t          j        dt          j                    j                   |j        }|j        }| j        }| j        	                                s	 dx}} |            }|\  }}}	}
	 ||         \  }}}n:# t          $ r-}	 | j        |         \  }}}n# t          $ r |w xY wY d}~nd}~ww xY w||vr%t          d|dt          |          d|          t          ||          }	  ||	i |
}|o|                    |d          }|r7|                     |||          \  }}t#          || j        |          }d||ff}n d|f}n# t&          $ r}d|f}Y d}~nd}~ww xY wn# t          $ rX |d	t)                      f}nB	 | j        |         } || |||g|	R i |
}d|f}n # t&          $ r d	t)                      f}Y nw xY wY nit,          $ rB t          j        d
t          j                    j                   t/          j        d           Y nt&          $ r d	t)                      f}Y nw xY w	 	  ||           n)# t&          $ r  |dt)                      f           Y nw xY wn# t&          $ r}t          j        dt          j                    j                   t          j        d|           t          j        d|           |                                 t/          j        d           Y d}~nd}~ww xY w| j        	                                dS dS )zQ
        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_threadr#   rH   rG   r   r   r   KeyErrorr   AttributeErrorr   r    getrl   r   r0   r   r   fallback_mappingEOFErrorr   r   r   r   )r3   r   rH   rG   r   rK   r+   r   identrL   rM   exposed	gettypeidkefunctionresr/   ridentrexposedtokenr   r   fallback_funcrO   s                           r   serve_clientzServer.serve_client   sD    	
9+--2	4 	4 	4 yyN	/((** D	53#''
S$&&07-z4!.7.>+C)) ! ! !! 6u= 0Wii# ! ! ! ! '0iiii! W,,(.#T#YYYY9  
 #3
33/"(D1D11C 'J9==T+J+JF /+/;;tVS+I+I( %fdlF C C'(E):;(#. ! ( ( (#Q-CCCCCC( " ; ; ;%'6CC;(,(=j(I!. $s"59" " "=A" "  )&1$ ; ; ;+Z\\:;    
A$355:< < < 3 3 3#Z\\23<DIIII  < < <D+Z\\:;;;;;<   	:!02279 9 9	/555	11555

} /((** D	 D	 D	 D	 D	s   E- 2A? >E- ?
B6
BB1B))B1,E- 1B66<E- 3E ;AE- 
E)E$E- $E))E- -H4 F,+H4,G	H4G		H4AH4H43H49I I/ #I+(I/ *I++I/ /
L 9A=K;;L c                     |S r   r   r3   r   r   r+   s       r   fallback_getvaluezServer.fallback_getvalue?  s    
r   c                      t          |          S r   rV   r   s       r   fallback_strzServer.fallback_strB  s    3xxr   c                      t          |          S r   )reprr   s       r   fallback_reprzServer.fallback_reprE  s    Cyyr   )r]   r@   	#GETVALUEc                     d S r   r   r3   rJ   s     r   rq   zServer.dummyN  s    r   c                    | j         5  g }t          | j                                                  }|                                 |D ]W}|dk    rO|                    d|d| j        |         dt          | j        |         d                   dd                    Xd                    |          cddd           S # 1 swxY w Y   dS )	zO
        Return some info --- useful to spot problems with refcounting
        rw   z  z:       refcount=z
    r   NK   
)	r   r)   r   r&   sortra   rV   r   join)r3   rJ   rO   r&   r   s        r   ro   zServer.debug_infoQ  s%   
 Z 		% 		%F+002233DIIKKK H HC<<MMM#(55$*=e*D*D*D#&t~e'<Q'?#@#@"#E#E#G H H H 99V$$		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		% 		%s   B+C  CCc                 *    t          | j                  S )z*
        Number of shared objects
        )lenr   r   s     r   rp   zServer.number_of_objectsa  s    
 4&'''r   c                    	 t          j        d           |                    d           n#  ddl}|                                 Y nxY w| j                                         dS # | j                                         w xY w)z'
        Shutdown this process
        z!manager received shutdown messagerF   Nr   N)r   r   rG   	traceback	print_excr   set)r3   rJ   r   s      r   rk   zServer.shutdownh  s    	"J:;;;FF$%%%%	"!!!!!O!!!!!DO!!!!s   ), A& AA& &Bc          	         | j         5  | j        |         \  }}}}|-|st          |          dk    rt          d          |d         }	n ||i |}	|t	          |	          }|dt          |t                    s0t          d                    |t          |                              t          |          t          |          z   }dt          |	          z  }
t          j        d||
           |	t          |          |f| j        |
<   |
| j        vr
d| j        |
<   ddd           n# 1 swxY w Y   |                     ||
           |
t%          |          fS )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   rz   r   rZ   rh   rU   dictrW   rX   r   r)   r1   r   r   r   r   r   rr   tuple)r3   rJ   r/   rL   rM   r`   r   method_to_typeid	proxytyper+   r   s              r   rl   zServer.createu  s    Z 	/ 	/mF+ ;Hg/  PCIINN$NP P P1gh---(--+!"2D99 G#FMM,d3C.D.DF FG G G w--$/?*@*@@2c77NEJ?OOO%(#g,,8H$IDN5!D///-.#E*7	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/: 	AueGnn$$s   DD**D.1D.c                 L    t          | j        |j                 d                   S )zL
        Return the methods of the shared object indicated by token
        r	   )r   r   r1   )r3   rJ   r   s      r   rn   zServer.get_methods  s      T^EH-a0111r   c                     |t          j                    _        |                    d           |                     |           dS )z=
        Spawn a new thread to serve this connection
        r   N)r   r   r#   rG   r   )r3   rJ   r#   s      r   rm   zServer.accept_connection  sB     +/	 ""'	 !!!!r   c                 D   | j         5  	 | j        |xx         dz  cc<   nh# t          $ r[}|| j        v rFd| j        |<   | j        |         | j        |<   | j        |         \  }}}t          j        d|           n|Y d }~nd }~ww xY wd d d            d S # 1 swxY w Y   d S )Nr	   z&Server re-enabled tracking & INCREF %r)r   r   r   r   r   r   r   )r3   rJ   r   r   r+   r   r   s          r   rr   zServer.incref  s(   Z 	 	#E***a/****   
 D66612D'.259 N5).2nU.C+C)JGOOOOH POOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s7   B B
BAB ;B BBBBc           	      ,   || j         vr || j        v rt          j        d|           d S | j        5  | j         |         dk    r:t          d                    || j        |         | j         |                             | j         |xx         dz  cc<   | j         |         dk    r| j         |= d d d            n# 1 swxY w Y   || j         vrId| j        |<   t          j        d|           | j        5  | j        |= d d d            d S # 1 swxY w Y   d S d S )NzServer DECREF skipping %rr   z+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r	   )Nr   Nzdisposing of obj with id %r)r   r   r   r   r   AssertionErrorrX   r   )r3   rJ   r   s      r   rs   zServer.decref  s   +++T///J2E:::FZ 	/ 	/"5)Q..$AHHt~e4+E24 45 5 5 &&&!+&&&"5)Q..'.	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ +++ %5DN5!J4e<<< * *N5)* * * * * * * * * * * * * * * * * * ,+s$   A:B77B;>B;1	DDDN)r?   rA   rB   rC   r   r4   r   r   r   r   r   r   r   r   r   rq   ro   rp   rk   rl   rn   rm   rr   rs   r   r   r   rj   rj      s]        N N NF& & &$  ,  2 2 2<
 
 
O O Ob        %
 
  % % % ( ( (" " ""% "% "%H2 2 2    $* * * * *r   rj   c                        e Zd ZdgZdZdZdZdS )Statevaluer   r	      N)r?   rA   rB   rD   INITIALSTARTEDSHUTDOWNr   r   r   r   r     s$        	IGGHHHr   r   )pickle	xmlrpclibc                       e Zd ZdZi ZeZ	 	 ddddZd Zd Z	dd
Z
e	 dd            Zd ZddZd Zd Zd Zd Zed             Zed             Ze	 	 dd            ZdS )r   z!
    Base class for managers
    Nr   g      ?)shutdown_timeoutc                F   |t          j                    j        }|| _        t          j        |          | _        t                      | _        t          j        | j        _	        || _
        t          |         \  | _        | _        |pt                      | _        || _        d S r   )r   r   r|   _addressr{   _authkeyr   _stater   r   _serializerr}   	_Listener_Clientr   _ctx_shutdown_timeout)r3   r0   r|   r   ctxr   s         r   r4   zBaseManager.__init__  s    ?-//7G4W==gg!M%'6z'B$(;==	!1r   c                 ~   | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            t          | j	        | j
        | j        | j                  S )zX
        Return server object with serve_forever() method and address attribute
        Already started serverManager has shut downUnknown state {!r})r   r   r   r   r   r   r   rX   rj   	_registryr   r   r   r6   s    r   
get_serverzBaseManager.get_server   s     ;--{ EM11"#;<<<"en44"#:;;;"(//0ABBD D DdndmmT%57 7 	7r   c                     t           | j                 \  }} || j        | j                  }t	          |dd           t
          j        | j        _        dS )z>
        Connect manager object to the server process
        r|   Nrq   )	r}   r   r   r   rP   r   r   r   r   )r3   r   r   r   s       r   connectzBaseManager.connect  sR     +4+;<&vdmT];;;tW%%%!Mr   r   c           
      b   | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            |t          |          st          d          t          j        d          \  }}| j                            t          |           j        | j        | j        | j        | j        |||f          | _        d	                    d
 | j        j        D                       }t          |           j        dz   |z   | j        _        | j                                         |                                 |                                | _        |                                 t          j        | j         _        t9          j        | t          |           j        | j        | j        | j        | j         | j        | j         fd          | _!        dS )z@
        Spawn a server process for this manager object
        r   r  r  Nzinitializer must be a callableF)duplexr   :c              3   4   K   | ]}t          |          V  d S r   r   )r"   is     r   	<genexpr>z$BaseManager.start.<locals>.<genexpr>1  s(      AAAQAAAAAAr   -r   rL   exitpriority)"r   r   r   r   r   r   r   rX   r`   rW   r
   Piper   Processr   _run_serverr  r   r   r   _processr   	_identityr?   r#   r   r   rH   r   Finalize_finalize_managerr   r   rk   )r3   initializerinitargsreaderwriterr   s         r   r   zBaseManager.start  s    ;--{ EM11"#;<<<"en44"#:;;;"(//0ABBD D D "8K+@+@"<=== $666 	))::).$-"FKC *  
 AA)@AAAAA!$ZZ0C7%? 	 "M$t**.-t{, 68	  r   c                 N   t          j         t           j        t           j                   | ||  |                     ||||          }|                    |j                   |                                 t          j        d|j                   |	                                 dS )z@
        Create a server, report its address and run it
        Nzmanager serving at %r)
signalSIGINTSIG_IGN_ServerrG   r0   r   r   r   r   )	clsrz   r0   r|   r   r  r  r  servers	            r   r  zBaseManager._run_serverC  s     	fmV^444"K"" XwDD 	FN### 		)6>:::r   c                N   | j         j        t          j        k    s
J d            |                     | j        | j                  }	 t          |dd|f|z   |          \  }}|                                 n# |                                 w xY wt          || j        |          |fS )zP
        Create a new shared object; return the token and exposed tuple
        zserver not yet startedr  Nrl   )
r   r   r   r   r   r   r   rP   r   r   )r3   r/   rL   rM   r   r1   r   s          r   _createzBaseManager._createZ  s     { EM1113K111||DM4=|AA	"4x&4NNKBJJLLLLDJJLLLLVT]B//88s   A6 6Bc                     | j         <| j                             |           | j                                         sd| _         dS dS dS )zC
        Join the manager process (if it has been spawned)
        N)r  r   is_aliver3   timeouts     r   r   zBaseManager.joinf  sU     =$Mw'''=))++ % $ %$% %r   c                     |                      | j        | j                  }	 t          |dd          |                                 S # |                                 w xY w)zS
        Return some info about the servers shared objects and connections
        r  Nro   r   r   r   rP   r   r   s     r   _debug_infozBaseManager._debug_infoo  sR     ||DM4=|AA	D$55JJLLLLDJJLLLL   A Ac                     |                      | j        | j                  }	 t          |dd          |                                 S # |                                 w xY w)z5
        Return the number of shared objects
        r  Nrp   r*  r   s     r   _number_of_objectszBaseManager._number_of_objectsy  sS     ||DM4=|AA	D$(;<<JJLLLLDJJLLLLr,  c                    | j         j        t          j        k    r|                                  | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            | S )NzUnable to start serverr  r  )	r   r   r   r   r   r   r   r   rX   r6   s    r   	__enter__zBaseManager.__enter__  s    ;--JJLLL;--{ EM11"#;<<<"en44"#:;;;"(//0ABBD D Dr   c                 .    |                                   d S r   )rk   r3   exc_typeexc_valexc_tbs       r   __exit__zBaseManager.__exit__  s    r   c                     | j                     r,t          j        d           	  |||          }	 t          |dd           |                                 n# |                                 w xY wn# t
          $ r Y nw xY w | j        |            | j                     rt          j        d           t          | d          rut          j        d            | j                      | j        |            | j                     r2t          j        d	            | j	                      | j                     t          j        |_        	 t          j        |= dS # t          $ r Y dS w xY w)
zQ
        Shutdown the manager process; will be registered as a finalizer
        z#sending shutdown message to managerr  Nrk   )r(  zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r&  r   r   rP   r   r   r   hasattrr8  killr   r   r   r   _address_to_localr   )r   r0   r|   r:   r   r   r   s          r   r  zBaseManager._finalize_manager  s    7 	'I;<<<ww888!T4444JJLLLLDJJLLLLL    GL!12222w!! 	'	/0007K00 'IGHHH%G%''' GL)9::::'w')) '	"GHHH$$n	+G444 	 	 	DD	s:   A4 A A4 A00A4 4
B BE 
E,+E,c                     | j         S r   )r   r6   s    r   r0   zBaseManager.address  s
    }r   Tc                    d| j         vr| j                                        | _        t          |pt	          dd          }|pt	          dd          }|rmt          |                                          D ]K\  }}t          |          t          u sJ d|z              t          |          t          u sJ d|z              L|||f| j        <   |r fd}	|	_	        t          | |	           dS dS )z9
        Register a typeid with the manager type
        r  N	_exposed__method_to_typeid_z%r is not a stringc                    t          j        d            | j        g|R i |\  }} || j        | | j        |          }|                     |j        | j                  }t          |d d|j        f           |S )Nz)requesting creation of a shared %r objectmanagerr|   r   r  rs   )	r   r   r$  r   r   r   r0   rP   r1   )	r3   rL   rM   r   expproxyr   r   r/   s	          r   rb   z"BaseManager.register.<locals>.temp  s    
FOOO)T\&@4@@@4@@
s!	4+T M3   ||EM4=|IItX{;;;r   )__dict__r  copy	AutoProxyr    r)   r%   r   rV   r?   setattr)
r!  r/   r`   r   r   r   create_methodkeyr   rb   s
    ` `      r   registerzBaseManager.register  sV    cl**M..00CM!IBWYTBB+ J"9.BDII 	  	H"#3#9#9#;#;<< H H
UCyyC''')=)C'''E{{c)))+?%+G)))) g/!f  	'	 	 	 	 	 	 #DMC&&&&&	' 	'r   )NNr   Nrx   r   )NNNNT)r?   rA   rB   rC   r  rj   r   r4   r  r  r   classmethodr  r$  r   r+  r.  r0  r6  staticmethodr  propertyr0   rK  r   r   r   r   r     sc         IG>F2/22 2 2 2 27 7 7* * *) ) ) )V /1   [,
9 
9 
9% % % %             \ D   X EI6:%' %' %' [%' %' %'r   r   c                       e Zd Zd Zd ZdS )ProcessLocalSetc                 2    t          j        | d            d S )Nc                 *    |                                  S r   )clearr*   s    r   <lambda>z*ProcessLocalSet.__init__.<locals>.<lambda>  s    399;; r   )r   register_after_forkr6   s    r   r4   zProcessLocalSet.__init__  s     '>'>?????r   c                 $    t          |           dfS rx   )r   r6   s    r   
__reduce__zProcessLocalSet.__reduce__  s    Dzz2~r   N)r?   rA   rB   r4   rW  r   r   r   rP  rP    s5        @ @ @    r   rP  c                       e Zd ZdZi Z ej                    Z	 	 ddZd Z	di fdZ
d	 Zd
 Zed             Zd Zd Zd Zd Zd ZdS )r   z.
    A base for proxies of shared objects
    NTFc                    t           j        5  t           j                            |j        d           }|5t          j                    t                      f}|t           j        |j        <   d d d            n# 1 swxY w Y   |d         | _        |d         | _	        || _
        | j
        j        | _        || _        || _        t          |         d         | _        || _        |t%          j        |          | _        n6| j        | j        j        | _        nt%          j                    j        | _        |r|                                  t          j        | t           j                   d S )Nr   r	   )r   _mutexr;  r   r0   r   ForkAwareLocalrP  _tls_idset_tokenr1   _id_managerr   r}   r   _owned_by_managerr   r{   r   r   r|   _increfrU  _after_fork)	r3   r   r   rB  r|   r   rr   manager_owned	tls_idsets	            r   r4   zBaseProxy.__init__  s    	G 	G!377tLLI  /11?3D3DD	=F	+EM:		G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G aL	
  l;>%&z215 "/#8AADMM]& M2DMM#355=DM 	LLNNN y'<=====s   AA66A:=A:c                 \   t          j        d           t          j                    j        }t          j                    j        dk    r|dt          j                    j        z   z  }|                     | j        j	        | j
                  }t          |d d|f           || j        _        d S )Nzmaking connection to manager
MainThread|r  rm   )r   r   r   r   r#   r   r   r   r^  r0   r   rP   r\  r
   )r3   r#   r   s      r   _connectzBaseProxy._connect   s    
1222&((-#%%*l::C)244999D||DK/|GGt04':::#	r   r   c                    	 | j         j        }n[# t          $ rN t          j        dt          j                    j                   |                                  | j         j        }Y nw xY w|	                    | j
        |||f           |                                \  }}|dk    r|S |dk    r|\  }}| j        j        |j                 d         }	| j        j        |_         |	|| j        | j        | j        |          }
|                     |j        | j                  }t)          |dd|j        f           |
S t-          ||          )	zV
        Try to call a method of the referent and return a copy of the result
        z#thread %r does not own a connectionrF   r   rA  r  Nrs   )r\  r
   r   r   r   r   r   r#   ri  rG   r_  rH   r`  r  r/   r^  r0   r   r   r   rP   r1   rI   )r3   rK   rL   rM   r   rN   rO   r   r   r   rD  s              r   _callmethodzBaseProxy._callmethod)  sV   	(9'DD 	( 	( 	(J< /1168 8 8MMOOO9'DDD		( 			48Zt4555yy{{f9MX#NGU/=bAI K/EMIt'w  E <<t}<EEDT4EH;777LtV,,,s    AA'&A'c                 ,    |                      d          S )z9
        Get a copy of the value of the referent
        r   rl  r6   s    r   	_getvaluezBaseProxy._getvalueG  s     ,,,r   c           
          | j         r!t          j        d| j        j                   d S |                     | j        j        | j                  }t          |d d| j	        f           t          j        d| j        j                   | j
                            | j	                   | j        o| j        j        }t          j        | t          j        | j        | j        || j        | j
        | j        fd          | _        d S )Nz%owned_by_manager skipped INCREF of %rr  rr   z	INCREF %r
   r  )ra  r   r   r^  r1   r   r0   r   rP   r_  r]  addr`  r   r  r   _decrefr\  _close)r3   r   r:   s      r   rb  zBaseProxy._increfM  s    ! 	J>OOOF||DK/|GGtX{333
;///!!!6$-"6m)#+t}e)T[$,8	  r   c                 8   |                     | j                   ||j        t          j        k    rr	 t          j        d| j                    || j        |          }t          |d d| j        f           nF# t          $ r}t          j        d|           Y d }~n"d }~ww xY wt          j        d| j                   |sXt          |d          rJt          j        dt          j                    j                   |j                                         |`d S d S d S )Nz	DECREF %rr  rs   z... decref failed %sz%DECREF %r -- manager already shutdownr
   z-thread %r has no more proxies so closing conn)discardr1   r   r   r   r   r   r0   rP   r   r9  r   r   r#   r
   r   )r   r|   r:   tlsidsetr   r   r   s           r   rs  zBaseProxy._decrefa  s?   eh =EK5=886
;111wu}g>>>tX{;;;; 6 6 6
11555555556 J>III  	l33 	JF /1168 8 8N  """		 	 	 	s   AA8 8
B!BB!c                     d | _         	 |                                  d S # t          $ r"}t          j        d|z             Y d }~d S d }~ww xY w)Nzincref failed: %s)r`  rb  r   r   r   )r3   r   s     r   rc  zBaseProxy._after_forkz  sf    	/LLNNNNN 	/ 	/ 	/I)A-.........	/s    
AAAc                     i }t                      
| j        |d<   t          | dd          r&| j        |d<   t          t
          | j        | j        |ffS t          t          |           | j        | j        |ffS )Nr|   _isautoFr   )	r   r   r    r>  RebuildProxyrG  r^  r   r   r3   rM   s     r   rW  zBaseProxy.__reduce__  s    +"mDO4E** 	G"nDO T-=tDF F !$ZZd.>EG Gr   c                 *    |                                  S r   )ro  )r3   memos     r   __deepcopy__zBaseProxy.__deepcopy__  s    ~~r   c                 d    dt          |           j        | j        j        t	          |           fz  S )Nz<%s object, typeid %r at %#x>)r   r?   r^  r/   r1   r6   s    r   r@   zBaseProxy.__repr__  s/    .T

#T[%7DBC 	Cr   c                     	 |                      d          S # t          $ r t          |           dd         dz   cY S w xY w)zV
        Return representation of the referent (or a fall-back if that fails)
        r@   Nrk  z; '__str__()' failed>)rl  r   r   r6   s    r   r]   zBaseProxy.__str__  sV    	=##J/// 	= 	= 	=::crc?%<<<<<	=s    $>>NNNTF)r?   rA   rB   rC   r;  r   ForkAwareThreadLockrZ  r4   ri  rl  ro  rb  rM  rs  rc  rW  r  r@   r]   r   r   r   r   r     s         %T%''F26HM'> '> '> '>R$ $ $ ,.B - - - -<- - -  (   \0/ / /G G G     C C C= = = = =r   r   c                    t          t          j                    dd          }|rW|j        |j        k    rGt	          j        d|           d|d<   |j        |j        vr|j        |j                 |j        |j        <   |	                    dd          o"t          t          j                    dd           } | ||fd|i|S )	z5
    Function used for unpickling proxy objects.
    r   Nz*Rebuild a proxy owned by manager, token=%rTrd  rr   _inheritingF)
r    r   r   r0   r   r   r1   r   r   pop)rc   r   r   rM   r"  rr   s         r   r|  r|    s     W,..0A4HHF +&.EM11
?GGG $_86777 * (2 	4   	EG+--}eDDD  4z99&9D999r   c                     t          |          }	 || |f         S # t          $ r Y nw xY wi }|D ]}t          d|d|d|           t          | t          f|          }||_        ||| |f<   |S )zB
    Return a proxy type whose methods are given by `exposed`
    zdef z:(self, /, *args, **kwds):
        return self._callmethod(z, args, kwds))r   r   execr   r   r>  )r#   r   _cachedicmeth	ProxyTypes         r   MakeProxyTyper    s     GnnGtWo&&    C H H6:ddDDDBCF	H 	H 	H 	H TI<--I!I'FD'?s   	 
((c                    t           |         d         }|T || j        |          }	 t          |dd| f          }|                                 n# |                                 w xY w|	||j        }|t          j                    j        }t          d| j	        z  |          }	 |	| |||||          }
d|
_
        |
S )z*
    Return an auto-proxy for `token`
    r	   Nr  rn   zAutoProxy[%s])rB  r|   rr   rd  T)r}   r0   rP   r   r   r   r   r|   r  r/   r{  )r   r   rB  r|   r   rr   rd  r   r   r  rD  s              r   rG  rG    s    
 j)!,Gwu}g666	tT=5(CCGJJLLLLDJJLLLL7.")++3o<gFFIIeZ'#=B B BEEMLs   A A'c                       e Zd Zd Zd ZdS )	Namespacec                :    | j                             |           d S r   )rE  updater}  s     r   r4   zNamespace.__init__  s    T"""""r   c                 2   t          | j                                                  }g }|D ]4\  }}|                    d          s|                    |d|           5|                                 | j        j        dd                    |          dS )Nrg   =(, r=   )	r)   rE  r%   
startswithra   r   r>   r?   r   )r3   r%   rb   r#   r   s        r   r@   zNamespace.__repr__  s    T]((**++  	5 	5KD%??3'' 5tttUU3444		>222DIIdOOOODDr   N)r?   rA   rB   r4   r@   r   r   r   r  r    s7        # # #E E E E Er   r  c                   @    e Zd ZddZd Zd Zd Z eee          ZdS )ValueTc                 "    || _         || _        d S r   )	_typecode_value)r3   r   r   locks       r   r4   zValue.__init__  s    !r   c                     | j         S r   r  r6   s    r   r   z	Value.get  s
    {r   c                     || _         d S r   r  r3   r   s     r   r   z	Value.set  s    r   c                 P    t          |           j        d| j        d| j        dS )Nr  r  r=   )r   r?   r  r  r6   s    r   r@   zValue.__repr__  s*    !$ZZ000$...$+++NNr   NT)	r?   rA   rB   r4   r   r   r@   rN  r   r   r   r   r  r    sc               O O OHS#EEEr   r  c                 ,    t          j         | |          S r   )r   )r   sequencer  s      r   Arrayr    s    ;x***r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )IteratorProxy)__next__rG   throwr   c                     | S r   r   r6   s    r   __iter__zIteratorProxy.__iter__      r   c                 .    |                      d|          S )Nr  rn  r3   rL   s     r   r  zIteratorProxy.__next__  s    
D111r   c                 .    |                      d|          S )NrG   rn  r  s     r   rG   zIteratorProxy.send  s    ---r   c                 .    |                      d|          S )Nr  rn  r  s     r   r  zIteratorProxy.throw      ...r   c                 .    |                      d|          S )Nr   rn  r  s     r   r   zIteratorProxy.close  r  r   N)	r?   rA   rB   r>  r  r  rG   r  r   r   r   r   r  r  
  sd        6I  2 2 2. . ./ / // / / / /r   r  c                   ,    e Zd ZdZddZd Zd Zd ZdS )	AcquirerProxy)acquirereleaseTNc                 @    ||fn||f}|                      d|          S Nr  rn  )r3   blockingr(  rL   s       r   r  zAcquirerProxy.acquire  s,    %o{{Hg3F	4000r   c                 ,    |                      d          S Nr  rn  r6   s    r   r  zAcquirerProxy.release      	***r   c                 ,    |                      d          S r  rn  r6   s    r   r0  zAcquirerProxy.__enter__  r  r   c                 ,    |                      d          S r  rn  r2  s       r   r6  zAcquirerProxy.__exit__!  r  r   )TN)r?   rA   rB   r>  r  r  r0  r6  r   r   r   r  r    sZ        &I1 1 1 1+ + ++ + ++ + + + +r   r  c                   0    e Zd ZdZddZd	dZd ZddZdS )
ConditionProxy)r  r  r   notify
notify_allNc                 0    |                      d|f          S Nr   rn  r'  s     r   r   zConditionProxy.wait'      
333r   r	   c                 0    |                      d|f          S )Nr  rn  )r3   ns     r   r  zConditionProxy.notify)  s    1$///r   c                 ,    |                      d          S )Nr  rn  r6   s    r   r  zConditionProxy.notify_all+  s    ---r   c                      |            }|r|S |t          j                    |z   }nd }d }|s@||t          j                    z
  }|dk    rn!|                     |            |            }|@|S )Nr   )time	monotonicr   )r3   	predicater(  rO   endtimewaittimes         r   wait_forzConditionProxy.wait_for-  s     	Mn&&0GGGH 	!""T^%5%55q==IIhY[[F  	! r   r   )r	   )r?   rA   rB   r>  r   r  r  r  r   r   r   r  r  %  sd        FI4 4 4 40 0 0 0. . .     r   r  c                   ,    e Zd ZdZd Zd Zd ZddZdS )
EventProxy)r   r   rS  r   c                 ,    |                      d          S )Nr   rn  r6   s    r   r   zEventProxy.is_setB  s    )))r   c                 ,    |                      d          S Nr   rn  r6   s    r   r   zEventProxy.setD      &&&r   c                 ,    |                      d          S )NrS  rn  r6   s    r   rS  zEventProxy.clearF      (((r   Nc                 0    |                      d|f          S r  rn  r'  s     r   r   zEventProxy.waitH  r  r   r   )r?   rA   rB   r>  r   r   rS  r   r   r   r   r  r  @  sZ        2I* * *' ' ') ) )4 4 4 4 4 4r   r  c                   h    e Zd ZdZd	dZd Zd Zed             Zed             Z	ed             Z
dS )
BarrierProxy)__getattribute__r   abortresetNc                 0    |                      d|f          S r  rn  r'  s     r   r   zBarrierProxy.waitN  r  r   c                 ,    |                      d          S )Nr  rn  r6   s    r   r  zBarrierProxy.abortP  r  r   c                 ,    |                      d          S )Nr  rn  r6   s    r   r  zBarrierProxy.resetR  r  r   c                 .    |                      dd          S )Nr  )partiesrn  r6   s    r   r  zBarrierProxy.partiesT  s     2LAAAr   c                 .    |                      dd          S )Nr  )	n_waitingrn  r6   s    r   r  zBarrierProxy.n_waitingW  s     2NCCCr   c                 .    |                      dd          S )Nr  )brokenrn  r6   s    r   r  zBarrierProxy.brokenZ  s     2K@@@r   r   )r?   rA   rB   r>  r   r  r  rN  r  r  r  r   r   r   r  r  L  s        >I4 4 4 4) ) )) ) )B B XBD D XDA A XA A Ar   r  c                   $    e Zd ZdZd Zd Zd ZdS )NamespaceProxy)r  __setattr____delattr__c                     |d         dk    rt                               | |          S t                               | d          } |d|f          S )Nr   rg   rl  r  )objectr  r3   rJ  
callmethods      r   __getattr__zNamespaceProxy.__getattr__a  sO    q6S==**4555,,T=AA
z,sf555r   c                     |d         dk    rt                               | ||          S t                               | d          } |d||f          S )Nr   rg   rl  r  )r  r  r  )r3   rJ  r   r  s       r   r  zNamespaceProxy.__setattr__f  sR    q6S==%%dC777,,T=AA
z-#u666r   c                     |d         dk    rt                               | |          S t                               | d          } |d|f          S )Nr   rg   rl  r  )r  r  r  r  s      r   r  zNamespaceProxy.__delattr__k  sN    q6S==%%dC000,,T=AA
z-#000r   N)r?   rA   rB   r>  r  r  r  r   r   r   r  r  _  sF        BI6 6 6
7 7 7
1 1 1 1 1r   r  c                   V    e Zd ZdZd Zd Z eee          Z ee	j
                  ZdS )
ValueProxy)r   r   c                 ,    |                      d          S )Nr   rn  r6   s    r   r   zValueProxy.gett  r  r   c                 0    |                      d|f          S r  rn  r  s     r   r   zValueProxy.setv  s    x000r   N)r?   rA   rB   r>  r   r   rN  r   rL  typesGenericAlias__class_getitem__r   r   r   r  r  r  sW        I' ' '1 1 1HS#E#E$677r   r  BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__ra   countextendindexinsertr  removereverser   __imul__c                       e Zd Zd Zd ZdS )	ListProxyc                 4    |                      d|f           | S )Nr  rn  r  s     r   __iadd__zListProxy.__iadd__  s    E8,,,r   c                 4    |                      d|f           | S )Nr  rn  r  s     r   r  zListProxy.__imul__  s    eX...r   N)r?   rA   rB   r  r  r   r   r   r  r    s2              r   r  	DictProxy)r  r  r  r  r   r  rS  rF  r   r%   r&   r  popitem
setdefaultr  r'   r  Iterator
ArrayProxy)r   r  r  	PoolProxy)applyapply_asyncr   imapimap_unorderedr   map	map_asyncstarmapstarmap_asyncr8  AsyncResult)r  r  r  r  r  c                       e Zd Zd Zd ZdS )r  c                     | S r   r   r6   s    r   r0  zPoolProxy.__enter__  r  r   c                 .    |                                   d S r   )r8  r2  s       r   r6  zPoolProxy.__exit__  s    r   N)r?   rA   rB   r0  r6  r   r   r   r  r    s2              r   c                       e Zd ZdZdS )r   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.
    N)r?   rA   rB   rC   r   r   r   r   r     s           r   r   QueueJoinableQueuer   r   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr)   r   r  )r   rI  )rI  c                   @    e Zd ZdZg fdZd Zd Zd Zd Zd Z	d Z
d	S )
_SharedMemoryTrackerz+Manages one or more shared memory segments.c                 "    || _         || _        d S r   shared_memory_context_namesegment_names)r3   r#   r1  s      r   r4   z_SharedMemoryTracker.__init__  s    .2D+!.Dr   c                     t          j        d|dt                                  | j                            |           dS )z6Adds the supplied shared memory block name to tracker.zRegister segment  in pid N)r   r   r   r1  ra   r3   segment_names     r   register_segmentz%_SharedMemoryTracker.register_segment  sD    JM<MM688MMNNN%%l33333r   c                     t          j        d|dt                                  | j                            |           t          j        |          }|                                 |                                 dS )zCalls unlink() on the shared memory block with the supplied name
            and removes it from the list of blocks being tracked.zDestroy segment r3  N)	r   r   r   r1  r	  r   SharedMemoryr   unlink)r3   r5  segments      r   destroy_segmentz$_SharedMemoryTracker.destroy_segment  ss     JL,LL&((LLMMM%%l333#0>>GMMOOONNr   c                 T    | j         dd         D ]}|                     |           dS )z<Calls destroy_segment() on all tracked shared memory blocks.N)r1  r;  r4  s     r   r9  z_SharedMemoryTracker.unlink  s>     $ 2111 5 3 3$$\22223 3r   c                     t          j        d| j        j         dt	                                  |                                  d S )NzCall z.__del__ in )r   r   r>   r?   r   r9  r6   s    r   __del__z_SharedMemoryTracker.__del__  s=    JNt~6NNFHHNNOOOKKMMMMMr   c                     | j         | j        fS r   r/  r6   s    r   r7   z!_SharedMemoryTracker.__getstate__  s    3T5GHHr   c                      | j         |  d S r   )r4   r9   s     r   r;   z!_SharedMemoryTracker.__setstate__  s    DM5!!!!r   N)r?   rA   rB   rC   r4   r6  r;  r9  r>  r7   r;   r   r   r   r-  r-    s        55/1 	/ 	/ 	/ 	/	4 	4 	4
	 	 		3 	3 	3
	 	 		I 	I 	I	" 	" 	" 	" 	"r   r-  c                   J    e Zd Zej        g dz   Zd Zd Zd Zd Zd Z	d Z
dS )	SharedMemoryServer)track_segmentrelease_segmentlist_segmentsc                 "   t          j        | g|R i | | j        }t          |t                    rt          j        |          }t          d| dt                                 | _	        t          j        dt                                  d S )Nshm_rg   z"SharedMemoryServer started by pid )rj   r4   r0   rU   ry   osfsdecoder-  r   shared_memory_contextr   r   )r3   rL   kwargsr0   s       r   r4   zSharedMemoryServer.__init__  s    OD242226222lG'5)) /+g..$%@G%@%@fhh%@%@AA &JFFHHFFGGGGGr   c                    t          | j        |         d         d          r
| j        |d<   t          j        | ||g|R i |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  )r9  rz   rJ  rj   rl   )r3   rJ   r/   rL   rK  s        r   rl   zSharedMemoryServer.create	  sV     t}V,R02HII M262L./=q&B4BBB6BBBr   c                 j    | j                                          t                              | |          S )zACall unlink() on all tracked shared memory, terminate the Server.)rJ  r9  rj   rk   r   s     r   rk   zSharedMemoryServer.shutdown  s+    &--///??4+++r   c                 :    | j                             |           dS )z?Adds the supplied shared memory block name to Server's tracker.N)rJ  r6  r3   rJ   r5  s      r   rC  z SharedMemoryServer.track_segment  s    &77EEEEEr   c                 :    | j                             |           dS )zCalls unlink() on the shared memory block with the supplied name
            and removes it from the tracker instance inside the Server.N)rJ  r;  rP  s      r   rD  z"SharedMemoryServer.release_segment  s!     &66|DDDDDr   c                     | j         j        S )zbReturns a list of names of shared memory blocks that the Server
            is currently tracking.)rJ  r1  r   s     r   rE  z SharedMemoryServer.list_segments!  s     -;;r   N)r?   rA   rB   rj   r   r4   rl   rk   rC  rD  rE  r   r   r   rB  rB    s        FFFG	H 	H 	H	C 	C 	C	, 	, 	,
	F 	F 	F	E 	E 	E
	< 	< 	< 	< 	<r   rB  c                   4    e Zd ZdZeZd Zd Zd Zd Z	d Z
dS )r   a  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                     t           j        dk    rddlm} |                                 t          j        | g|R i | t          j        | j	        j
         dt                                  d S )Nposixr	   )resource_trackerz created by pid )rH  r#    rV  ensure_runningr   r4   r   r   r>   r?   r   )r3   rL   rK  rV  s       r   r4   zSharedMemoryManager.__init__3  s    w'!! /..... //111 7777777J$.1MM688MMNNNNNr   c                 d    t          j        | j        j         dt	                                  d S )Nz.__del__ by pid )r   r   r>   r?   r   r6   s    r   r>  zSharedMemoryManager.__del__?  s/    J$.1MM688MMNNNNNr   c                    | j         j        t          j        k    r~| j         j        t          j        k    rt          d          | j         j        t          j        k    rt          d          t          d                    | j         j                            |                     | j	        | j
        | j        | j                  S )z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr  )r   r   r   r   r   r   r   rX   r   r  r   r   r   r6   s    r   r  zSharedMemoryManager.get_serverB  s    { EM11;$55&'KLLL[&%.88&'JKKK&,33DK4EFFH H H<< $t/?A A Ar   c                 ,   |                      | j        | j                  5 }t          j        dd|          }	 t          |dd|j        f           n(# t          $ r}|                                 |d}~ww xY w	 ddd           n# 1 swxY w Y   |S )zoReturns a new SharedMemory instance with the specified size in
            bytes, to be tracked by the manager.r  NT)rl   sizerC  )	r   r   r   r   r8  rP   r#   BaseExceptionr9  )r3   r\  r   smsr   s        r   r8  z SharedMemoryManager.SharedMemoryO  s     dmT]CC t#0dNNNT438+FFFF$   JJLLLG G               Js4   B	AB	
A9A44A99B		BBc                 :   |                      | j        | j                  5 }t          j        |          }	 t          |dd|j        j        f           n-# t          $ r }|j        	                                 |d}~ww xY w	 ddd           n# 1 swxY w Y   |S )zReturns a new ShareableList instance populated with the values
            from the input sequence, to be tracked by the manager.r  NrC  )
r   r   r   r   ShareableListrP   shmr#   r]  r9  )r3   r  r   slr   s        r   r`  z!SharedMemoryManager.ShareableList[  s     dmT]CC t"0::T426;.IIII$   FMMOOOG J               Is4   BAB
B  A;;B  BBBN)r?   rA   rB   rC   rB  r   r4   r>  r  r8  r`  r   r   r   r   r   '  sy        	 	 %
	O 
	O 
	O	O 	O 	O	A 	A 	A
	 
	 
	
	 
	 
	 
	 
	r   r  r  )U__all__r   r   r  r   queuer  r  rH  r   r   r   rW  r
   contextr   r   r   r   r   r   r   r   	HAS_SHMEMra   ImportErrorr   rK  
view_typesr,   	view_typer  r   rP   rI   r   rY   rd   rh   rj   r   r   r   XmlListener	XmlClientr}   r   r   rP  r   r|  r  rG  r  r  r  r  r  r  r  r  r  r  r  r  r  r?  r  BasePoolProxyr  r   r$  r   r   r&  r'  r(  r)  r*  r+  r)   r   r-  rB  r   r   r   r   <module>rm     s   A
@
@ 


          				                         @ @ @ @ @ @ @ @ @ @                        * INN())))	    III2 2 2 	 5; - - -NN4MNNN
   3 3IIy/2222zM M M M MF M M M. &(b ) ) ) )I I IC C C C C) C C C	 	 	A A AG* G* G* G* G*V G* G* G*\
    F    #Z%67):+?@ t' t' t' t' t'& t' t' t't    c   m= 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 	4A A A A A9 A A A&1 1 1 1 1Y 1 1 1&8 8 8 8 8 8 8 8 o 0          M+ (  	 
 	 
 ]< *  

 k ,  
 !" $ $         	 	 	 	 	+ 	 	 	   Wek * * *   _ek 2 2 2   Wioz : : :   VY^] ; ; ;   Wio} = = =   [)"5} E E E   ')C"$ $ $   [)"5~ F F F   Y	 1< @ @ @   VTY	 2 2 2   VT9 - - -   VT9 - - -   WeZ 0 0 0   WeZ 0 0 0   [)^ < < <   Z=  N N N   ]%  8 8 8  Q"" "" "" "" "" "" "" ""J*< *< *< *< *<V *< *< *<Z> > > > >k > > > > >gQ Qs   A8 8BB