
    z%i              
          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 j1                  d       d Z ej6                  ej                  e       dD  cg c]  }  e  ei |                     c} Zd ZeD ]  Z  ej6                  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jV                  ejX                  fejZ                  ej\                  fd Z/ G d! d"e!      Z0 G d# d$e1      Z2 G d% d&e!      Z3d' Z4i fd(Z5	 	 dbd)Z6 G d* d+e!      Z7 G d, d-e!      Z8dcd.Z9 G d/ d0e3      Z: G d1 d2e3      Z; G d3 d4e;      Z< G d5 d6e3      Z= G d7 d8e3      Z> G d9 d:e3      Z? G d; d<e3      Z@ e5d=d>      ZA G d? d@eA      ZB e5dAdB      ZCdCdDieC_D         e5dEdF      ZE e5dGdH      ZFdIdIdIdDdDdJeF_D         G dK dGeF      ZG G dL dMe0      ZHeHj7                  dNej                         eHj7                  dOej                         eHj7                  dPej                  e=       eHj7                  dQej                  e;       eHj7                  dRej                  e;       eHj7                  dSej                  e;       eHj7                  dTej                  e;       eHj7                  dUej                  e<       eHj7                  dVej                  e>       eHj7                  dWej                  eG       eHj7                  dXeReB       eHj7                  dYeSeC       eHj7                  d-e8e@       eHj7                  dZe9eE       eHj7                  d+e7e?       eHj7                  dDe:d[       eHj7                  dId\       er! G d] d^      ZT G d_ d`e)      ZU G da de0      ZVyy# e$ r dZY w xY wc c} w )d)BaseManagerSyncManager	BaseProxyToken    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryTSharedMemoryManagerFc                 Z    t         j                   | j                  | j                         ffS N)arraytypecodetobytes)as    L/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/multiprocessing/managers.pyreduce_arrayr   /   s     ;;QYY[111    )itemskeysvaluesc                 &    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y)r   typeidaddressidc                 0    |||c| _         | _        | _        y r   r&   )selfr'   r(   r)   s       r   __init__zToken.__init__D   s    06,dlDGr   c                 H    | j                   | j                  | j                  fS r   r&   r+   s    r   __getstate__zToken.__getstate__G   s    T\\47733r   c                 .    |\  | _         | _        | _        y r   r&   r+   states     r   __setstate__zToken.__setstate__J   s    /4,dlDGr   c                     | j                   j                  d| j                  d| j                  d| j                  dS )Nz(typeid=z
, address=z, id=))	__class____name__r'   r(   r)   r.   s    r   __repr__zToken.__repr__M   s-    ''dllDGGM 	Mr   N)r7   
__module____qualname__	__slots__r,   r/   r3   r8    r   r   r   r   >   s$     ,IE45Mr   r   r<   c                 z    	 | j                  ||||f       | j                         \  }}|dk(  r|S t        ||      )N#RETURN)sendrecvconvert_to_error)cr)   
methodnameargskwdskindresults          r   dispatchrH   U   sG     FFB
D$'(668LD&y
4
((r   c           	          | dk(  r|S | dv rSt        |t              s%t        dj                  || t	        |                  | dk(  rt        d|z        S t        |      S t        dj                  |             S )N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrL   zUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformattypeRemoteError
ValueError)rF   rG   s     r   rA   rA   _   s    x	2	2&#&@GGD$v,01 1 $$=FGGv&&:AA$GHHr   c                       e Zd Zd Zy)rR   c                 >    dt        | j                  d         z   dz   S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rN   rD   r.   s    r   __str__zRemoteError.__str__o   s    $s499Q<'886ABr   N)r7   r9   r:   rV   r<   r   r   rR   rR   n   s    Cr   rR   c                 ~    	 g }t        |       D ]+  }t        | |      }t        |      s|j                  |       - |S r   )dirgetattrcallableappend)r#   tempnamefuncs       r   all_methodsr_   v   sG     DC sD!D>KK Kr   c                 R    	 t        |       D cg c]  }|d   dk7  s| c}S c c}w )Nr   _)r_   )r#   r]   s     r   public_methodsrb      s,     )-@TaCD@@@s   $$c                       e 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y)Server)	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefc                 z   t        |t              s$t        dj                  |t	        |                  || _        t        j                  |      | _        t        |   \  }} ||d      | _
        | j                  j                  | _        ddi| _        i | _        i | _        t        j                          | _        y )Nz&Authkey {0!r} is type {1!s}, not bytes   )r(   backlog0Nr<   )rM   bytesrO   rP   rQ   registryr   AuthenticationStringauthkeylistener_clientlistenerr(   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r+   rt   r(   rv   
serializerListenerClients          r   r,   zServer.__init__   s    '5)8??T'],- - !33G<*:6& !"=}},,z* %'"^^%
r   c                    	 t        j                         | _        | t        j                         _        	 t        j                  | j                        }d|_        |j                          	 | j                  j                         s6| j                  j                  d       | j                  j                         s6t        j                  t        j                   k7  rGt#        j$                  d       t        j                   t        _        t        j&                  t        _        t        j*                  d       y # t        t        f$ r Y w xY w# t        j                  t        j                   k7  rGt#        j$                  d       t        j                   t        _        t        j&                  t        _        t        j*                  d       w xY w)N)targetTr	   zresetting stdout, stderrr   )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_foreverzServer.serve_forever   s%   	 $//+48!1	 ''t}}=H"HONN//002OO((+ //002
 zzS^^+

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

56 ^^
 ^^
HHQKs+   7E -AD; ;E
E EE A?Gc                     	 	 | j                   j                         }t        j                  | j
                  |f      }d|_        |j                          U# t        $ r Y aw xY w)NTr   rD   )rx   acceptOSErrorr|   r   handle_requestr   r   )r+   rB   ts      r   r   zServer.accepter   sa    MM((*   (;(;1$GAAHGGI   s   A 	A#"A#c                    d }	 t        j                  || j                         t        j                  || j                         |j	                         }|\  }}}}t        | |      }	  ||g|i |}d|f}		 |j                  |	       y # t        $ r dt               f}	Y *w xY w# t        $ r dt               f}	Y Ew xY w# t        $ rx}
	 |j                  dt               f       n# t        $ r Y nw xY wt        j                  d|	       t        j                  d|       t        j                  d|
       Y d }
~
y d }
~
ww xY w)Nr>   rK   zFailure to send message: %rz ... request was %r ... exception was %r)r
   deliver_challengerv   answer_challenger@   rY   	Exceptionr   r?   r   info)r+   rB   requestignorefuncnamerD   rE   r^   rG   msges              r   _handle_requestzServer._handle_request   s2   	*((DLL9''4<<8ffhG+2(FHdD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[   A#B& (B 9C B#"B#&B>=B>	EC'&D='	C30D=2C33AD==Ec                     	 	 | j                  |       |j                          y # t        $ r Y w xY w# |j                          w xY wr   )r   r   closer+   conns     r   r   zServer.handle_request   sE    		  &
 JJL	  		 JJLs   % 	14 14 Ac                 &   	 t        j                  dt        j                         j                         |j
                  }|j                  }| j                  }| j                  j                         s	 d x}} |       }|\  }}}	}
	 ||   \  }}}||vrt        d|dt        |      d|      t        ||      }	  ||	i |
}|xr |j                  |d       }|r4| j!                  |||      \  }}t#        || j$                  |      }d||ff}nd|f}	 	 	  |       | j                  j                         sy y # t        $ r.}	 | j                  |   \  }}}n# t        $ r |w xY wY d }~d }~ww xY w# t&        $ r}d|f}Y d }~sd }~ww xY w# t        $ rQ dt)               f}n?	 | j*                  |   } || |g	i 
}d|f}n# t&        $ r dt)               f}Y nw xY wY t,        $ rK t        j                  d	t        j                         j                         t/        j0                  d
       Y &t&        $ r dt)               f}Y =w xY w# t&        $ r  |dt)               f       Y Uw xY w# t&        $ r}t        j2                  dt        j                         j                         t        j2                  d       t        j2                  d|       |j5                          t/        j0                  d       Y d }~d }~ww xY w)Nz$starting server thread to service %rzmethod z of z object is not in exposed=#PROXYr>   rJ   rK   z$got EOF -- exiting thread serving %rr   rL   zexception in thread serving %rz ... message was %rr   r	   )r   r   r|   current_threadr]   r@   r?   ry   r   r   KeyErrorr{   AttributeErrorrQ   rY   getrf   r   r(   r   r   fallback_mappingEOFErrorr   r   r   r   )r+   r   r@   r?   ry   rC   r#   r   identrD   rE   exposed	gettypeidkefunctionresr'   ridentrexposedtokenr   r   fallback_funcrG   s                           r   serve_clientzServer.serve_client   s   	 	

9++-22	4 yyyyNN	//((*53#''
S&07-z4!.7.>+C) W,(#T#Y9 
 #3
3/"D1D1C 'J9==T+JF+/;;tVS+I( %fdllF C'(E):;(#..<Iw //((*   !! 66u= 0Wi# ! ! '0!" ! (#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   3F 	D= -F =E7 AF I =	E4EE/E''E/*F /E44F 7	F F	F 	FF I*"GIG%"I$G%%I*AI<III62I9 5I66I9 9	LBLLc                     |S r   r<   r+   r   r   r#   s       r   fallback_getvaluezServer.fallback_getvalue?  s    
r   c                     t        |      S r   rN   r   s       r   fallback_strzServer.fallback_strB  s    3xr   c                     t        |      S r   )reprr   s       r   fallback_reprzServer.fallback_reprE  s    Cyr   )rV   r8   	#GETVALUEc                      y r   r<   r+   rB   s     r   rk   zServer.dummyN  s    r   c                 t   	 | j                   5  g }t        | j                  j                               }|j	                          |D ]K  }|dk7  s	|j                  d|d| j                  |   dt        | j                  |   d         d d        M dj                  |      cd d d        S # 1 sw Y   y xY w)Nrq   z  z:       refcount=z
    r   K   
)	r~   r!   rz   r   sortr[   rN   ry   join)r+   rB   rG   r   r   s        r   ri   zServer.debug_infoQ  s    	 ZZ 		%F++0023DIIK HC<MM#($*=*=e*D#&t~~e'<Q'?#@"#E#G HH
 99V$		% 		% 		%s   A B.AB..B7c                 .    	 t        | j                        S r   )lenrz   r   s     r   rj   zServer.number_of_objectsa  s    	 4&&''r   c                     	 	 t        j                  d       |j                  d       | j
                  j                          y #  dd l}|j	                          Y 3xY w# | j
                  j                          w xY w)Nz!manager received shutdown messager>   Nr   )r   r   r?   	traceback	print_excr   set)r+   rB   r   s      r   re   zServer.shutdownh  s_    		"JJ:;FF$%
 OO!		"!OO!s   &A AA A;c          	      p   	 | j                   5  | j                  |   \  }}}}|!|st        |      dk7  rt        d      |d   }	n ||i |}	|t	        |	      }|Kt        |t              s$t        dj                  |t        |                  t        |      t        |      z   }dt        |	      z  }
t        j                  d||
       |	t        |      |f| j                  |
<   |
| j                   vrd| j                   |
<   d d d        | j#                  |
       |
t%              fS # 1 sw Y   (xY w)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~   rt   r   rS   rb   rM   dictrO   rP   rQ   r!   r)   r   r   r   ry   rz   rl   tuple)r+   rB   r'   rD   rE   rZ   r   method_to_typeid	proxytyper#   r   s              r   rf   zServer.createu  sR   	 ZZ 	/mmF+ ;Hg/ CIN$NP P1g--(-+!"2D9#FMM,d3C.DFG G w-$/?*@@2c7NEJJ?O%(#g,8H$IDNN5!D///-.##E*7	/: 	AueGn$$=	/ 	/s   C7D,,D5c                 N    	 t        | j                  |j                     d         S )Nr	   )r   ry   r)   )r+   rB   r   s      r   rh   zServer.get_methods  s&    	 T^^EHH-a011r   c                 |    	 |t        j                         _        |j                  d       | j	                  |       y )Nr   )r|   r   r]   r?   r   )r+   rB   r]   s      r   rg   zServer.accept_connection  s5    	 +/	  "'	 !!r   c                 F   | j                   5  	 | j                  |xx   dz  cc<   d d d        y # t        $ r\}|| j                  v rBd| j                  |<   | j                  |   | j                  |<   t        j                  d|       n|Y d }~id }~ww xY w# 1 sw Y   y xY w)Nr	   z&Server re-enabled tracking & INCREF %r)r~   rz   r   r{   ry   r   r   )r+   rB   r   r   s       r   rl   zServer.incref  s    ZZ 	##E*a/*	 	  
 D66612D''.2259 NN5)JJGOH P	 	s,   B/	BAB
BBBB c           	      l   || j                   vr%|| j                  v rt        j                  d|       y | j                  5  | j                   |   dk  r6t        dj                  || j                  |   | j                   |               | j                   |xx   dz  cc<   | j                   |   dk(  r| j                   |= d d d        || j                   vrHd| j                  |<   t        j                  d|       | j                  5  | j                  |= d d d        y y # 1 sw Y   `xY w# 1 sw Y   y xY w)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)rz   r{   r   r   r~   AssertionErrorrP   ry   )r+   rB   r   s      r   rm   zServer.decref  s0   +++T///JJ2E:ZZ 	/""5)Q.$AHHt~~e4++E245 5 &!+&""5)Q.''.	/ +++ %5DNN5!JJ4e< *NN5)* * ,	/ 	/$* *s    A?DD*D'*D3N)r7   r9   r:   publicr,   r   r   r   r   r   r   r   r   r   rk   ri   rj   re   rf   rh   rg   rl   rm   r<   r   r   rd   rd      s    NF&$,2<
Ob  %
% (""%H2"*r   rd   c                       e Zd ZdgZdZdZdZy)Statevaluer   r	      N)r7   r9   r:   r;   INITIALSTARTEDSHUTDOWNr<   r   r   r   r     s    	IGGHr   r   )pickle	xmlrpclibc                       e 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y)r   Ng      ?)shutdown_timeoutc                P   |t        j                         j                  }|| _        t        j                  |      | _        t               | _        t        j                  | j                  _	        || _
        t        |   \  | _        | _        |xs
 t               | _        || _        y r   )r   r   rv   _addressru   _authkeyr   _stater   r   _serializerrw   	_Listener_Clientr   _ctx_shutdown_timeout)r+   r(   rv   r   ctxr   s         r   r,   zBaseManager.__init__  s~    ?--/77G44W=g!MM%'6z'B$(;=	!1r   c                    	 | j                   j                  t        j                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              t        | j                  | j                  | j                  | j                        S )NAlready started serverManager has shut downUnknown state {!r})r   r   r   r   r   r   r   rP   rd   	_registryr   r   r   r.   s    r   
get_serverzBaseManager.get_server  s    	 ;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD DdnndmmmmT%5%57 	7r   c                     	 t         | j                     \  }} || j                  | j                        }t	        |d d       t
        j                  | j                  _        y )Nrv   rk   )	rw   r   r   r   rH   r   r   r   r   )r+   r   r   r   s       r   connectzBaseManager.connect  sN    	 +4+;+;<&dmmT]];tW%!MMr   c           
         	 | j                   j                  t        j                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              |t        |      st        d      t        j                  d      \  }}| j                  j                  t        |       j                  | j                   | j"                  | j$                  | j&                  |||f      | _        dj+                  d	 | j(                  j,                  D              }t        |       j.                  d
z   |z   | j(                  _        | j(                  j3                          |j5                          |j7                         | _        |j5                          t        j                  | j                   _        t9        j:                  | t        |       j<                  | j(                  | j"                  | j$                  | j                   | j>                  | j@                  fd      | _!        y )Nr   r   r   zinitializer must be a callableF)duplexr   :c              3   2   K   | ]  }t        |        y wr   r   ).0is     r   	<genexpr>z$BaseManager.start.<locals>.<genexpr>0  s     AAQAs   -r   rD   exitpriority)"r   r   r   r   r   r   r   rP   rZ   rO   r
   Piper   ProcessrQ   _run_serverr   r   r   r   _processr   	_identityr7   r]   r   r   r@   r   Finalize_finalize_managerr   r   re   )r+   initializerinitargsreaderwriterr   s         r   r   zBaseManager.start  s   	 ;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD D "8K+@<== $6 		)):))..$--""FKC * 
 A)@)@AA!$Z00C7%? 	 "MM$t*..--t{{,, 6 68	r   c                 V   	 t        j                   t         j                  t         j                         | ||  | j                  ||||      }|j	                  |j
                         |j                          t        j                  d|j
                         |j                          y )Nzmanager serving at %r)
signalSIGINTSIG_IGN_Serverr?   r(   r   r   r   r   )	clsrt   r(   rv   r   r  r  r  servers	            r   r  zBaseManager._run_serverB  s    	 	fmmV^^4"" XwD 	FNN# 			)6>>:r   c                    	 | j                  | j                  | j                        }	 t        |d d|f|z   |      \  }}|j	                          t        || j                  |      |fS # |j	                          w xY w)Nr   rf   )r   r   r   rH   r   r   )r+   r'   rD   rE   r   r)   r   s          r   _createzBaseManager._createY  sr    	 ||DMM4==|A	"4x&4NKBJJLVT]]B/88 JJLs   A) )A;c                     	 | j                   >| j                   j                  |       | j                   j                         sd | _         y y y r   )r  r   is_aliver+   timeouts     r   r   zBaseManager.joine  sF    	 ==$MMw'==))+ $ , %r   c                     	 | j                  | j                  | j                        }	 t        |d d      |j	                          S # |j	                          w xY w)Nr   ri   r   r   r   rH   r   r   s     r   _debug_infozBaseManager._debug_infon  sG    	 ||DMM4==|A	D$5JJLDJJL   A Ac                     	 | j                  | j                  | j                        }	 t        |d d      |j	                          S # |j	                          w xY w)Nr   rj   r%  r   s     r   _number_of_objectszBaseManager._number_of_objectsx  sH    	 ||DMM4==|A	D$(;<JJLDJJLr'  c                    | j                   j                  t        j                  k(  r| j	                          | j                   j                  t        j
                  k7  r| j                   j                  t        j                  k(  rt        d      | j                   j                  t        j                  k(  rt        d      t        dj                  | j                   j                              | S )NzUnable to start serverr   r   )	r   r   r   r   r   r   r   r   rP   r.   s    r   	__enter__zBaseManager.__enter__  s    ;;-JJL;;-{{  EMM1"#;<<""enn4"#:;;"(//0A0ABD Dr   c                 $    | j                          y r   )re   r+   exc_typeexc_valexc_tbs       r   __exit__zBaseManager.__exit__  s    r   c                    	  | j                          rt        j                  d       	  |||      }	 t        |d d       |j	                          	  | j                  |        | j                          rt        j                  d       t        | d      rt        j                  d        | j                           | j                  |        | j                          r7t        j                  d        | j                           | j                          t        j                  |_        	 t        j                  |= y # |j	                          w xY w# t
        $ r Y w xY w# t        $ r Y y w xY w)	Nz#sending shutdown message to managerr   re   )r#  zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r!  r   r   rH   r   r   r   hasattrr3  killr   r   r   r   _address_to_localr   )r   r(   rv   r2   r   r   r   s          r   r  zBaseManager._finalize_manager  s/   	 7II;<w8!T44JJL GLL!12w!		/07K0IIGH%G%%' GLL)9:'w'')		"GH$$nn	++G4% JJL $  		s:   
E E E /E& EE 	E#"E#&	E21E2c                     | j                   S r   )r   r.   s    r   r(   zBaseManager.address  s    }}r   c                 ^   	 d| j                   vr| j                  j                         | _        t        |xs t	        dd       }|xs t	        dd       }|r!t        |j                               D ]  \  }} |||f| j                  <   |rfd}	|	_        t        | |	       y y )Nr   	_exposed__method_to_typeid_c                (   t        j                  d        | j                  g|i |\  }} || j                  | | j                  |      }| j                  |j                  | j                        }t        |d d|j                  f       |S )Nz)requesting creation of a shared %r objectmanagerrv   r   r   rm   )	r   r   r  r   r   r   r(   rH   r)   )	r+   rD   rE   r   expproxyr   r   r'   s	          r   r\   z"BaseManager.register.<locals>.temp  s    

FO)T\\&@4@4@
s!4++T MM3 ||EMM4==|ItX{;r   )	__dict__r   copy	AutoProxyrY   r!   r   r7   setattr)
r  r'   rZ   r   r   r   create_methodkeyr   r\   s
    ` `      r   registerzBaseManager.register  s    	 cll*MM..0CM!IBWYTB+ J"9.BDI 	 "#3#9#9#;< H
U H
 g/!f 	 #DMC& r   )NNr   Nrr   r   )NNNNT)r7   r9   r:   r   rd   r  r,   r   r  r   classmethodr  r  r   r&  r)  r+  r1  staticmethodr  propertyr(   rF  r<   r   r   r   r     s     IG>F2/227*)V /1 ,
9%    D   EI6:%' %'r   r   c                       e Zd Zd Zd Zy)ProcessLocalSetc                 2    t        j                  | d        y )Nc                 "    | j                         S r   )clearr"   s    r   <lambda>z*ProcessLocalSet.__init__.<locals>.<lambda>  s    399; r   )r   register_after_forkr.   s    r   r,   zProcessLocalSet.__init__  s      '>?r   c                     t        |       dfS rr   )rQ   r.   s    r   
__reduce__zProcessLocalSet.__reduce__  s    Dz2~r   N)r7   r9   r:   r,   rR  r<   r   r   rK  rK    s    @r   rK  c                       e 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y)r   Nc                    t         j                  5  t         j                  j                  |j                  d       }|;t        j                         t               f}|t         j                  |j                  <   d d d        d   | _        |d   | _	        || _
        | j                  j                  | _        || _        || _        t        |   d   | _        || _        |t%        j&                  |      | _        nK| j                  | j                  j(                  | _        n#t%        j*                         j,                  | _        |r| j/                          t        j0                  | t         j2                         y # 1 sw Y   xY w)Nr   r	   )r   _mutexr6  r   r(   r   ForkAwareLocalrK  _tls_idset_tokenr)   _id_managerr   rw   r   _owned_by_managerr   ru   r   r   rv   _increfrP  _after_fork)	r+   r   r   r=  rv   r   rl   manager_owned	tls_idsets	            r   r,   zBaseProxy.__init__  s6    	G!3377tLI  //1?3DD	=F	++EMM:		G aL	
  l;;>>%&z215 "/#88ADM]]& MM22DM#335==DMLLN  y'<'<=K	G 	Gs   A(E<<Fc                    t        j                  d       t        j                         j                  }t        j                         j                  dk7  r$|dt        j                         j                  z   z  }| j                  | j                  j                  | j                        }t        |d d|f       || j                  _        y )Nzmaking connection to manager
MainThread|r   rg   )r   r   r   r   r]   r|   r   r   rY  r(   r   rH   rW  r
   )r+   r]   r   s      r   _connectzBaseProxy._connect  s    

12&&(--##%**l:C)2249999D||DKK//|Gt04':#		r   r<   c                    	 	 | j                   j                  }|j                  | j                  |||f       |j                         \  }}|dk(  r|S |dk(  r|\  }}| j                  j                  |j                     d   }	| j                  j                   |_         |	|| j"                  | j                  | j$                  |      }
| j'                  |j                   | j$                        }t)        |d d|j*                  f       |
S t-        ||      # t        $ r\ t        j                  dt        j                         j                         | j                          | j                   j                  }Y aw xY w)Nz#thread %r does not own a connectionr>   r   r<  r   rm   )rW  r
   r   r   r   r|   r   r]   rd  r?   rZ  r@   r[  r   r'   rY  r(   r   r   r   rH   r)   rA   )r+   rC   rD   rE   r   rF   rG   r   r   r   r?  s              r   _callmethodzBaseProxy._callmethod(  sA   		(99''D 			488Zt45yy{f9MX#NGU//=bAI KK//EMt''wE <<t}}<EDT4EHH;7LtV,,-  	(JJ< //1668MMO99''D		(s   D A!E;:E;c                 &    	 | j                  d      S )Nr   rg  r.   s    r   	_getvaluezBaseProxy._getvalueF  s    	 ,,r   c           
         | j                   r+t        j                  d| j                  j                         y | j                  | j                  j                  | j                        }t        |d d| j                  f       t        j                  d| j                  j                         | j                  j                  | j                         | j                  xr | j                  j                  }t        j                  | t        j                   | j                  | j                  || j"                  | j                  | j
                  fd      | _        y )Nz%owned_by_manager skipped INCREF of %rr   rl   z	INCREF %r
   r
  )r\  r   r   rY  r)   r   r(   r   rH   rZ  rX  addr[  r   r  r   _decrefrW  _close)r+   r   r2   s      r   r]  zBaseProxy._increfL  s    !!JJ>O||DKK//|GtX{3

;/!6$--"6"6mm)##++t}}e))T[[$,,8	r   c                 j   |j                  | j                         ||j                  t        j                  k(  rO	 t        j                  d| j                          || j                  |      }t        |d d| j                  f       n t        j                  d| j                         |s\t        |d      rOt        j                  dt        j                         j                         |j                  j                          |`y y y # t        $ r }t        j                  d|       Y d }~d }~ww xY w)Nz	DECREF %rr   rm   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(   rH   r   r4  r|   r   r]   r
   r   )r   rv   r2   tlsidsetr   r   r   s           r   rn  zBaseProxy._decref`  s    ehh =EKK5==86

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

11556s   AD	 		D2D--D2c                     d | _         	 | j                          y # t        $ r"}t        j                  d|z         Y d }~y d }~ww xY w)Nzincref failed: %s)r[  r]  r   r   r   )r+   r   s     r   r^  zBaseProxy._after_forky  s<    	/LLN 	/II)A-..	/s    	AA  Ac                 
   i }t               | j                  |d<   t        | dd      r3| j                  |d<   t        t
        | j                  | j                  |ffS t        t        |       | j                  | j                  |ffS )Nrv   _isautoFr   )	r   r   rY   r9  RebuildProxyrB  rY  r   rQ   r+   rE   s     r   rR  zBaseProxy.__reduce__  s    +"mmDO4E*"nnDO T-=-=tDF F !$Zd.>.>EG Gr   c                 "    | j                         S r   )rj  )r+   memos     r   __deepcopy__zBaseProxy.__deepcopy__  s    ~~r   c                 r    dt        |       j                  | j                  j                  t	        |       fz  S )Nz<%s object, typeid %r at %#x>)rQ   r7   rY  r'   r)   r.   s    r   r8   zBaseProxy.__repr__  s3    .T
##T[[%7%7DBC 	Cr   c                 h    	 	 | j                  d      S # t        $ r t        |       d d dz   cY S w xY w)Nr8   rf  z; '__str__()' failed>)rg  r   r   r.   s    r   rV   zBaseProxy.__str__  sB    		=##J// 	=:cr?%<<<	=s    11NNNTF)r7   r9   r:   r6  r   ForkAwareThreadLockrU  r,   rd  rg  rj  r]  rH  rn  r^  rR  r{  r8   rV   r<   r   r   r   r     su     %T%%'F26HM'>R$ ,.B -<-(  0/G C=r   r   c                    	 t        t        j                         dd       }|r||j                  |j                  k(  rct	        j
                  d|       d|d<   |j                  |j                  vr0|j                  |j                     |j                  |j                  <   |j                  dd      xr  t        t        j                         dd       } | ||fd|i|S )Nr   z*Rebuild a proxy owned by manager, token=%rTr_  rl   _inheritingF)
rY   r   r   r(   r   r   r)   r{   ry   pop)r^   r   r   rE   r  rl   s         r   rw  rw    s     W,,.0A4HF&..EMM1

?G $_886777  * ((2 	4  	EG++-}eDD  z9&9D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 )Nzdef z:(self, /, *args, **kwds):
        return self._callmethod(z, args, kwds))r   r   execrQ   r   r9  )r]   r   _cachedicmeth	ProxyTypes         r   MakeProxyTyper    s     GnGtWo&&  C H6:DBCF	HH TI<-I!I'FD'?s    	!!c                 r   	 t         |   d   }|4 || j                  |      }	 t        |d d| f      }|j                          |||j                  }|t        j                         j                  }t        d| j                  z  |      }	 |	| |||||      }
d|
_
        |
S # |j                          w xY w)Nr	   r   rh   zAutoProxy[%s])r=  rv   rl   r_  T)rw   r(   rH   r   r   r   r   rv   r  r'   rv  )r   r   r=  rv   r   rl   r_  r   r   r  r?  s              r   rB  rB    s     j)!,Gu}}g6	tT=5(CGJJL7.""))+33o<gFIeZ'#=BEEML JJLs   B$ $B6c                       e Zd Zd Zd Zy)	Namespacec                :    | j                   j                  |       y r   )r@  updaterx  s     r   r,   zNamespace.__init__  s    T"r   c                 &   t        | j                  j                               }g }|D ]-  \  }}|j                  d      r|j	                  |d|       / |j                          | j                  j                  ddj                  |      dS )Nra   =(, r5   )	r!   r@  r   
startswithr[   r   r6   r7   r   )r+   r   r\   r]   r   s        r   r8   zNamespace.__repr__  sv    T]]((*+  	5KD%??3'tU34	5 			>>22DIIdODDr   N)r7   r9   r:   r,   r8   r<   r   r   r  r    s    #Er   r  c                   8    e Zd ZddZd Zd Zd Z eee      Zy)Valuec                      || _         || _        y r   )	_typecode_value)r+   r   r   locks       r   r,   zValue.__init__  s    !r   c                     | j                   S r   r  r.   s    r   r   z	Value.get  s    {{r   c                     || _         y r   r  r+   r   s     r   r   z	Value.set  s	    r   c                 f    t        |       j                  d| j                  d| j                  dS )Nr  r  r5   )rQ   r7   r  r  r.   s    r   r8   zValue.__repr__  s!    !$Z00$..$++NNr   NT)	r7   r9   r:   r,   r   r   r8   rI  r   r<   r   r   r  r    s#    OS#Er   r  c                 .    t        j                   | |      S r   )r   )r   sequencer  s      r   Arrayr    s    ;;x**r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)IteratorProxy)__next__r?   throwr   c                     | S r   r<   r.   s    r   __iter__zIteratorProxy.__iter__      r   c                 &    | j                  d|      S )Nr  ri  r+   rD   s     r   r  zIteratorProxy.__next__  s    
D11r   c                 &    | j                  d|      S )Nr?   ri  r  s     r   r?   zIteratorProxy.send  s    --r   c                 &    | j                  d|      S )Nr  ri  r  s     r   r  zIteratorProxy.throw      ..r   c                 &    | j                  d|      S )Nr   ri  r  s     r   r   zIteratorProxy.close  r  r   N)	r7   r9   r:   r9  r  r  r?   r  r   r<   r   r   r  r  	  s     6I2.//r   r  c                   *    e Zd ZdZddZd Zd Zd Zy)AcquirerProxy)acquirereleaseNc                 8    ||fn||f}| j                  d|      S Nr  ri  )r+   blockingr#  rD   s       r   r  zAcquirerProxy.acquire  s'    %o{Hg3F	400r   c                 $    | j                  d      S Nr  ri  r.   s    r   r  zAcquirerProxy.release      	**r   c                 $    | j                  d      S r  ri  r.   s    r   r+  zAcquirerProxy.__enter__  r  r   c                 $    | j                  d      S r  ri  r-  s       r   r1  zAcquirerProxy.__exit__   r  r   )TN)r7   r9   r:   r9  r  r  r+  r1  r<   r   r   r  r    s    &I1+++r   r  c                   .    e Zd ZdZddZddZd ZddZy)	ConditionProxy)r  r  r   notify
notify_allNc                 (    | j                  d|f      S Nr   ri  r"  s     r   r   zConditionProxy.wait&      
33r   c                 (    | j                  d|f      S )Nr  ri  )r+   ns     r   r  zConditionProxy.notify(  s    1$//r   c                 $    | j                  d      S )Nr  ri  r.   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	 |S | j                          |       }|s<|S )Nr   )time	monotonicr   )r+   	predicater#  rG   endtimewaittimes         r   wait_forzConditionProxy.wait_for,  s~    Mnn&0GGH""T^^%55q=  IIh[F  r   r   )r	   )r7   r9   r:   r9  r   r  r  r  r<   r   r   r  r  $  s    FI40.r   r  c                   *    e Zd ZdZd Zd Zd ZddZy)
EventProxy)r   r   rN  r   c                 $    | j                  d      S )Nr   ri  r.   s    r   r   zEventProxy.is_setA  s    ))r   c                 $    | j                  d      S Nr   ri  r.   s    r   r   zEventProxy.setC      &&r   c                 $    | j                  d      S )NrN  ri  r.   s    r   rN  zEventProxy.clearE      ((r   Nc                 (    | j                  d|f      S r  ri  r"  s     r   r   zEventProxy.waitG  r  r   r   )r7   r9   r:   r9  r   r   rN  r   r<   r   r   r  r  ?  s    2I*')4r   r  c                   T    e Zd ZdZd	dZd Zd Zed        Zed        Z	ed        Z
y)
BarrierProxy)__getattribute__r   abortresetNc                 (    | j                  d|f      S r  ri  r"  s     r   r   zBarrierProxy.waitM  r  r   c                 $    | j                  d      S )Nr  ri  r.   s    r   r  zBarrierProxy.abortO  r  r   c                 $    | j                  d      S )Nr  ri  r.   s    r   r  zBarrierProxy.resetQ  r  r   c                 &    | j                  dd      S )Nr  )partiesri  r.   s    r   r  zBarrierProxy.partiesS  s     2LAAr   c                 &    | j                  dd      S )Nr  )	n_waitingri  r.   s    r   r  zBarrierProxy.n_waitingV  s     2NCCr   c                 &    | j                  dd      S )Nr  )brokenri  r.   s    r   r  zBarrierProxy.brokenY  s     2K@@r   r   )r7   r9   r:   r9  r   r  r  rI  r  r  r  r<   r   r   r  r  K  sR    >I4))B BD DA Ar   r  c                   "    e Zd ZdZd Zd Zd Zy)NamespaceProxy)r  __setattr____delattr__c                 ~    |d   dk(  rt         j                  | |      S t         j                  | d      } |d|f      S )Nr   ra   rg  r  )objectr  r+   rE  
callmethods      r   __getattr__zNamespaceProxy.__getattr__`  sB    q6S=**455,,T=A
,sf55r   c                     |d   dk(  rt         j                  | ||      S t         j                  | d      } |d||f      S )Nr   ra   rg  r  )r  r  r  )r+   rE  r   r  s       r   r  zNamespaceProxy.__setattr__e  sE    q6S=%%dC77,,T=A
-#u66r   c                 ~    |d   dk(  rt         j                  | |      S t         j                  | d      } |d|f      S )Nr   ra   rg  r  )r  r  r  r  s      r   r  zNamespaceProxy.__delattr__j  sA    q6S=%%dC00,,T=A
-#00r   N)r7   r9   r:   r9  r  r  r  r<   r   r   r  r  ^  s    BI6
7
1r   r  c                   R    e Zd ZdZd Zd Z eee      Z ee	j                        Zy)
ValueProxy)r   r   c                 $    | j                  d      S )Nr   ri  r.   s    r   r   zValueProxy.gets  r  r   c                 (    | j                  d|f      S r  ri  r  s     r   r   zValueProxy.setu  s    x00r   N)r7   r9   r:   r9  r   r   rI  r   rG  typesGenericAlias__class_getitem__r<   r   r   r  r  q  s.    I'1S#E#E$6$67r   r  BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__r[   countextendindexinsertr  removereverser   __imul__c                       e Zd Zd Zd Zy)	ListProxyc                 ,    | j                  d|f       | S )Nr  ri  r  s     r   __iadd__zListProxy.__iadd__  s    E8,r   c                 ,    | j                  d|f       | S )Nr  ri  r  s     r   r  zListProxy.__imul__  s    eX.r   N)r7   r9   r:   r
  r  r<   r   r   r  r    s    r   r  	DictProxy)r  r  r  r  r  r  rN  rA  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_asyncr3  AsyncResult)r  r  r  r  r  c                       e Zd Zd Zd Zy)r  c                     | S r   r<   r.   s    r   r+  zPoolProxy.__enter__  r  r   c                 $    | j                          y r   )r3  r-  s       r   r1  zPoolProxy.__exit__  s    r   N)r7   r9   r:   r+  r1  r<   r   r   r  r    s    r   c                       e Zd Zy)r   N)r7   r9   r:   r<   r   r   r   r     s    r   r   QueueJoinableQueuer   r}   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr!   r   r  )r   rD  )rD  c                   <    e Zd Z	 g fdZd Zd Zd Zd Zd Zd Z	y)	_SharedMemoryTrackerc                      || _         || _        y r   shared_memory_context_namesegment_names)r+   r]   r,  s      r   r,   z_SharedMemoryTracker.__init__  s    .2D+!.Dr   c                     	 t        j                  d|dt                       | j                  j	                  |       y )NzRegister segment  in pid )r   r   r   r,  r[   r+   segment_names     r   register_segmentz%_SharedMemoryTracker.register_segment  s6    DJJ*<*:(68*MN%%l3r   c                     	 t        j                  d|dt                       | j                  j	                  |       t        j                  |      }|j                          |j                          y )NzDestroy segment r.  )	r   r   r   r,  r  r   SharedMemoryr   unlink)r+   r0  segments      r   destroy_segmentz$_SharedMemoryTracker.destroy_segment  s\    EJJ),)9&(LM%%l3#00>GMMONNr   c                 P    	 | j                   d d  D ]  }| j                  |        y r   )r,  r6  r/  s     r   r4  z_SharedMemoryTracker.unlink  s-    J $ 2 21 5 3$$\23r   c                     t        j                  d| j                  j                   dt	                       | j                          y )NzCall z.__del__ in )r   r   r6   r7   r   r4  r.   s    r   __del__z_SharedMemoryTracker.__del__  s1    JJt~~667|FH:NOKKMr   c                 2    | j                   | j                  fS r   r*  r.   s    r   r/   z!_SharedMemoryTracker.__getstate__  s    33T5G5GHHr   c                 "     | j                   |  y r   )r,   r1   s     r   r3   z!_SharedMemoryTracker.__setstate__  s    DMM5!r   N)
r7   r9   r:   r,   r1  r6  r4  r9  r/   r3   r<   r   r   r(  r(    s,    5/1 	/	4
		3
		I	"r   r(  c                   R    e Zd Zej                  g dz   Zd Zd Zd Zd Zd Z	d Z
y)	SharedMemoryServer)track_segmentrelease_segmentlist_segmentsc                    t        j                  | g|i | | j                  }t        |t              rt        j                  |      }t        d| dt                      | _	        t        j                  dt                       y )Nshm_ra   z"SharedMemoryServer started by pid )rd   r,   r(   rM   rs   osfsdecoder(  r   shared_memory_contextr   r   )r+   rD   kwargsr(   s       r   r,   zSharedMemoryServer.__init__  sn    OOD24262llG'5)++g.$tG9AfhZ%@A &JJ;FH:FGr   c                    	 t        | j                  |   d   d      r| j                  |d<   t        j                  | ||g|i |S )Nrf  _shared_memory_proxyrE  )r4  rt   rE  rd   rf   )r+   rB   r'   rD   rF  s        r   rf   zSharedMemoryServer.create  sQ    M
 t}}V,R02HI262L2L./==q&B4B6BBr   c                 d    	 | j                   j                          t        j                  | |      S r   )rE  r4  rd   re   r   s     r   re   zSharedMemoryServer.shutdown  s(    O&&--/??4++r   c                 <    	 | j                   j                  |       y r   )rE  r1  r+   rB   r0  s      r   r>  z SharedMemoryServer.track_segment  s    M&&77Er   c                 <    	 | j                   j                  |       y r   )rE  r6  rK  s      r   r?  z"SharedMemoryServer.release_segment  s    K&&66|Dr   c                 0    	 | j                   j                  S r   )rE  r,  r   s     r   r@  z SharedMemoryServer.list_segments   s    &--;;;r   N)r7   r9   r:   rd   r   r,   rf   re   r>  r?  r@  r<   r   r   r=  r=    s6    FG	H	C	,
	F	E
	<r   r=  c                   0    e Zd Z	 eZd Zd Zd Zd Zd Z	y)r   c                     t         j                  dk(  rddlm} |j	                          t        j                  | g|i | t        j                  | j                  j                   dt                       y )Nposixr	   )resource_trackerz created by pid )rC  r]    rQ  ensure_runningr   r,   r   r   r6   r7   r   )r+   rD   rF  rQ  s       r   r,   zSharedMemoryManager.__init__2  s\    ww'! / //1  777JJ$..1122B68*MNr   c                 p    t        j                  | j                  j                   dt	                       y )Nz.__del__ by pid )r   r   r6   r7   r   r.   s    r   r9  zSharedMemoryManager.__del__>  s'    JJ$..1122B68*MNr   c                    	 | j                   j                  t        j                  k7  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                  | j                  | j                        S )Nz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr   )r   r   r   r   r   r   r   rP   r  r   r   r   r   r.   s    r   r   zSharedMemoryManager.get_serverA  s    N{{  EMM1;;$$5&'KLL[[&&%..8&'JKK&,33DKK4E4EFH H<< $t/?/?A Ar   c                 .   	 | j                  | j                  | j                        5 }t        j                  d d|      }	 t        |d d|j                  f       	 d d d        |S # t        $ r}|j                          |d }~ww xY w# 1 sw Y   S xY w)Nr   T)rf   sizer>  )	r   r   r   r   r3  rH   r]   BaseExceptionr4  )r+   rW  r   smsr   s        r   r3  z SharedMemoryManager.SharedMemoryN  s    4dmmT]]C t#00dNT4388+F J % JJLG	 Js)   B
A''	B0BBB

Bc                 P   	 | j                  | j                  | j                        5 }t        j                  |      }	 t        |d d|j                  j                  f       	 d d d        |S # t        $ r!}|j                  j                          |d }~ww xY w# 1 sw Y   S xY w)Nr   r>  )
r   r   r   r   ShareableListrH   shmr]   rX  r4  )r+   r  r   slr   s        r   r[  z!SharedMemoryManager.ShareableListZ  s    FdmmT]]C t"00:T4266;;.I I % FFMMOG	 Is)   B #A..	B7BBBB%N)
r7   r9   r:   r=  r  r,   r9  r   r3  r[  r<   r   r   r   r   &  s*    	 %
	O	O	A
	
	r   r~  r  )W__all__r   r|   r  r   queuer  r  rC  r   r   r   rR  r
   contextr   r   r   r   r   r   r   r   	HAS_SHMEMr[   ImportErrorr   rF  rQ   rY   
view_typesr$   	view_typer  r   rH   rA   r   rR   r_   rb   rd   r   r   r   XmlListener	XmlClientrw   r   r   rK  r   rw  r  rB  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(  r=  r   )r]   s   0r   <module>rh     sW   A        	     @ @    * INN()2 	  5;; -4MNDd$72t$&'N
 3IIy/23zMF M. &(b )IC) C	AF*V F*Z
F  ##Z%6%67)):+?+?@t'& t'tc m= m=f:* )+ , 8<7<:
E 
E
F 
+/I /
+I 
+] 6	4 	4A9 A&1Y 1&8 8 o 0   + ( 	 
 	 
 < * 

 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   O; P	;PP