o
    JAf                     @   sP  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 zddlmZ W n eyk   dZY nw dZe d dd Zeeje dd dD Zed eurdd ZeD ]Zeee qG dd de Z!di fddZ"dd Z#G dd de$Z%d d! Z&d"d# Z'G d$d% d%e Z(G d&d' d'e Z)ej*ej+fej,ej-fd(Z.G d)d* d*e Z/G d+d, d,e0Z1G d-d. d.e Z2d/d0 Z3i fd1d2Z4		dmd3d4Z5G d5d6 d6e Z6G d7d8 d8e Z7dnd9d:Z8G d;d< d<e2Z9G d=d> d>e2Z:G d?d@ d@e:Z;G dAdB dBe2Z<G dCdD dDe2Z=G dEdF dFe2Z>G dGdH dHe2Z?e4dIdJZ@G dKdL dLe@ZAe4dMdNZBdOdPieB_Ce4dQdRZDe4dSdTZEdUdUdUdPdPdVeE_CG dWdS dSeEZFG dXdY dYe/ZGeGdZejH eGd[ejH eGd\ejIe< eGd]ejJe: eGd^ejKe: eGd_ejLe: eGd`ejMe: eGdaejNe; eGdbejOe= eGdcejPeF eGddeeA eGdeeQeB eGd8e7e? eGd:e8eD eGd6e6e> eGjdPe9ddf eGjdUddg er&G dhdi diZRG djdk dke(ZSG dld de/ZTdS dS )o)BaseManagerSyncManager	BaseProxyToken    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryFTSharedMemoryManagerc                 C   s   t j | j|  ffS N)arraytypecodetobytes)a r   //usr/lib/python3.10/multiprocessing/managers.pyreduce_array/      r   c                 C   s   g | ]
}t ti | qS r   )typegetattr.0namer   r   r   
<listcomp>3       r!   )itemskeysvaluesc                 C   s   t t | ffS r   )listobjr   r   r   rebuild_as_list5      r)   c                   @   s2   e Zd Z	 dZdd Zdd Zdd Zdd	 Zd
S )r   typeidaddressidc                 C   s   |||| _ | _| _d S r   r+   )selfr,   r-   r.   r   r   r   __init__D   s   zToken.__init__c                 C   s   | j | j| jfS r   r+   r/   r   r   r   __getstate__G      zToken.__getstate__c                 C   s   |\| _ | _| _d S r   r+   r/   stater   r   r   __setstate__J   r   zToken.__setstate__c                 C   s   d| j j| j| j| jf S )Nz %s(typeid=%r, address=%r, id=%r))	__class____name__r,   r-   r.   r1   r   r   r   __repr__M   s   zToken.__repr__N)r8   
__module____qualname__	__slots__r0   r2   r6   r9   r   r   r   r   r   >   s    r   r   c                 C   s6   	 |  ||||f |  \}}|dkr|S t||)N#RETURN)sendrecvconvert_to_error)cr.   
methodnameargskwdskindresultr   r   r   dispatchU   s   
rG   c                 C   s^   | dkr|S | dv r(t |tstd|| t|| dkr$td| S t|S td| S )N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrJ   zUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformatr   RemoteError
ValueError)rE   rF   r   r   r   r@   _   s   

r@   c                   @   s   e Zd Zdd ZdS )rO   c                 C   s   dt | jd  d S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rL   rC   r1   r   r   r   __str__o   s   zRemoteError.__str__N)r8   r:   r;   rQ   r   r   r   r   rO   n   s    rO   c                 C   s4   	 g }t | D ]}t| |}t|r|| q|S r   )dirr   callableappend)r(   tempr    funcr   r   r   all_methodsv   s   

rW   c                 C   s   	 dd t | D S )Nc                 S   s   g | ]
}|d  dkr|qS )r   _r   r   r   r   r   r!      r"   z"public_methods.<locals>.<listcomp>)rW   r'   r   r   r   public_methods   s   rY   c                   @   s   e Zd Z	 g dZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zeee
dZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'S )(Server)	shutdowncreateaccept_connectionget_methods
debug_infonumber_of_objectsdummyincrefdecrefc                 C   sx   t |tstd|t||| _t|| _t	| \}}||dd| _
| j
j| _ddi| _i | _i | _t | _d S )Nz&Authkey {0!r} is type {1!s}, not bytes   )r-   backlog0Nr   )rK   bytesrM   rN   r   registryr   AuthenticationStringauthkeylistener_clientlistenerr-   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r/   ri   r-   rk   
serializerListenerClientr   r   r   r0      s   


zServer.__init__c              	   C   s   	 t  | _| t _zGt j| jd}d|_|	  z| j
 s+| jd | j
 r W n ttfy7   Y nw W tjtjkrLtd tjt_tjt_td d S tjtjkrftd tjt_tjt_td w )N)targetTr   zresetting stdout, stderrr   )rq   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}   r   r   r   serve_forever   s4   





zServer.serve_foreverc                 C   sF   	 z| j  }W n	 ty   Y q w tj| j|fd}d|_|  q)NTrw   rC   )rm   acceptOSErrorrq   r|   handle_requestr~   r   )r/   rA   tr   r   r   r}      s   zServer.accepterc                 C   s$  d }zt || j t || j | }|\}}}}t| |}W n ty/   dt f}Y n!w z||g|R i |}	W n tyK   dt f}Y nw d|	f}z|| W d S  ty }
 z-z
|dt f W n	 tys   Y nw t	
d| t	
d| t	
d|
 W Y d }
~
d S d }
~
ww )NrI   r=   zFailure to send message: %rz ... request was %r ... exception was %r)r	   deliver_challengerk   answer_challenger?   r   	Exceptionr   r>   r   info)r/   rA   requestignorefuncnamerC   rD   rV   msgrF   er   r   r   _handle_request   s:   zServer._handle_requestc                 C   sL   	 zz|  | W n	 ty   Y nw W |  d S W |  d S |  w r   )r   r   closer/   connr   r   r   r      s   zServer.handle_requestc                 C   s  	 t dt j |j}|j}| j}| j	 sezd  }}| }|\}}}	}
z	|| \}}}W n& t
yV } zz
| j| \}}}W n	 t
yK   |w W Y d }~nd }~ww ||vrftd|t||f t||}z	||	i |
}W n ty } z
d|f}W Y d }~n*d }~ww |o||d }|r| |||\}}t|| j|}d||ff}nd|f}W n` ty   |d u rdt f}n(z| j| }|| |||g|	R i |
}d|f}W n ty   dt f}Y nw Y n& ty   t dt j td Y n ty   dt f}Y nw zz|| W n ty*   |d	t f Y nw W n1 ty] } z$t d
t j t d| t d| |  td W Y d }~nd }~ww | j	 rd S d S )Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rrH   #PROXYr=   rI   z$got EOF -- exiting thread serving %rr   rJ   zexception in thread serving %rz ... message was %rr   r   )r   r   rq   current_threadr    r?   r>   rn   ry   r   KeyErrorrp   AttributeErrorr   r   r   getr\   r   r-   r   fallback_mappingEOFErrorr   r   r   r   )r/   r   r?   r>   rn   rB   r(   r   identrC   rD   exposed	gettypeidkefunctionresr   r   r,   ZridentZrexposedtokenZfallback_funcrF   r   r   r   serve_client   s   

zServer.serve_clientc                 C   s   |S r   r   r/   r   r   r(   r   r   r   fallback_getvalue?     zServer.fallback_getvaluec                 C      t |S r   rL   r   r   r   r   fallback_strB     zServer.fallback_strc                 C   r   r   )reprr   r   r   r   fallback_reprE  r   zServer.fallback_repr)rQ   r9   	#GETVALUEc                 C   s   d S r   r   r/   rA   r   r   r   ra   N  r   zServer.dummyc              
   C   s   	 | j ; g }t| j }|  |D ]}|dkr2|d|| j| t| j| d d d f  qd|W  d    S 1 sBw   Y  d S )Nrf   z  %s:       refcount=%s
    %sr   K   
)	rs   r&   ro   r$   sortrT   rL   rn   join)r/   rA   rF   r$   r   r   r   r   r_   Q  s   
$zServer.debug_infoc                 C   s   	 t | jS r   )lenro   r   r   r   r   r`   a  s   
zServer.number_of_objectsc                 C   sb   	 z)zt d |d W n   dd l}|  Y W | j  d S W | j  d S | j  w )Nz!manager received shutdown messager=   Nr   )r   r   r>   	traceback	print_excry   set)r/   rA   r   r   r   r   r[   h  s   
zServer.shutdownc                O   s  	 | j q | j| \}}}}|d u r#|st|dkrtd|d }	n||i |}	|d u r2t|	}|d urMt|tsEtd|t	|t
|t
| }dt|	 }
td||
 |	t||f| j|
< |
| jvrnd| j|
< W d    n1 sxw   Y  | ||
 |
t|fS )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)rs   ri   r   rP   rY   rK   dictrM   rN   r   r&   r.   r   r   r   rn   ro   rb   tuple)r/   rA   r,   rC   rD   rS   r   method_to_typeid	proxytyper(   r   r   r   r   r\   u  s<   




zServer.createc                 C   s   	 t | j|j d S )Nr   )r   rn   r.   )r/   rA   r   r   r   r   r^     s   zServer.get_methodsc                 C   s$   	 |t  _|d | | d S )Nr   )rq   r   r    r>   r   )r/   rA   r    r   r   r   r]     s   

zServer.accept_connectionc                 C   s   | j R z| j|  d7  < W n5 tyD } z)|| jv r8d| j|< | j| | j|< | j| \}}}td| n|W Y d }~nd }~ww W d    d S W d    d S 1 sXw   Y  d S )Nr   z&Server re-enabled tracking & INCREF %r)rs   ro   r   rp   rn   r   r   )r/   rA   r   r   r(   r   r   r   r   r   rb     s$   

"zServer.increfc                 C   s   || j vr|| jv rtd| d S | j2 | j | dkr,td|| j| | j | | j |  d8  < | j | dkr@| j |= W d    n1 sJw   Y  || j vryd| j|< td| | j | j|= W d    d S 1 srw   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)ro   rp   r   r   rs   AssertionErrorrN   rn   )r/   rA   r   r   r   r   rc     s0   






"zServer.decrefN)r8   r:   r;   publicr0   r   r}   r   r   r   r   r   r   r   ra   r_   r`   r[   r\   r^   r]   rb   rc   r   r   r   r   rZ      s2    
Q$rZ   c                   @   s   e Zd ZdgZdZdZdZdS )Statevaluer   r      N)r8   r:   r;   r<   INITIALSTARTEDSHUTDOWNr   r   r   r   r     s
    r   )pickle	xmlrpclibc                   @   s   e Zd Z	 i ZeZ		d!ddZdd Zdd Zd"d
dZ	e
		d"ddZdd Zd#ddZdd Zdd Zdd Zdd Zedd Zedd Ze
		d$dd ZdS )%r   Nr   c                 C   s\   |d u r	t  j}|| _t || _t | _tj| j_	|| _
t| \| _| _|p*t | _d S r   )r   rz   rk   _addressrj   _authkeyr   _stater   r   _serializerrl   Z	_Listener_Clientr   _ctx)r/   r-   rk   rt   ctxr   r   r   r0     s   

zBaseManager.__init__c                 C   sd   	 | 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 )NAlready started serverManager has shut downUnknown state {!r})r   r   r   r   r   r   r   rN   rZ   	_registryr   r   r   r1   r   r   r   
get_server  s   
zBaseManager.get_serverc                 C   s:   	 t | j \}}|| j| jd}t|d d tj| j_d S )Nrk   ra   )	rl   r   r   r   rG   r   r   r   r   )r/   ru   rv   r   r   r   r   connect  s
   zBaseManager.connectr   c              	   C   s2  	 | 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|d ur3t|s3t	dt
jdd\}}| jjt| j| j| j| j| j|||fd| _dd	d
 | jjD }t| jd | | j_| j  |  | | _|  tj| j _tj| t| j| j| j| j| j | jfdd| _ d S )Nr   r   r   zinitializer must be a callableF)duplexr   :c                 s   s    | ]}t |V  qd S r   r   )r   ir   r   r   	<genexpr>0  s    z$BaseManager.start.<locals>.<genexpr>-r   rC   exitpriority)!r   r   r   r   r   r   r   rN   rS   rM   r	   Piper   Processr   _run_serverr   r   r   r   _processr   	_identityr8   r    r   r   r?   r   Finalize_finalize_managerr   r[   )r/   initializerinitargsreaderwriterr   r   r   r   r     s@   




zBaseManager.startc           	      C   s`   	 t  t jt j |d ur||  | ||||}||j |  td|j |	  d S )Nzmanager serving at %r)
signalSIGINTSIG_IGN_Serverr>   r-   r   r   r   r   )	clsri   r-   rk   rt   r   r   r   serverr   r   r   r   B  s   zBaseManager._run_serverc                O   sX   	 | j | j| jd}zt|d d|f| |\}}W |  n|  w t|| j||fS )Nr   r\   )r   r   r   rG   r   r   )r/   r,   rC   rD   r   r.   r   r   r   r   _createY  s   zBaseManager._createc                 C   s4   	 | j d ur| j | | j  sd | _ d S d S d S r   )r   r   is_aliver/   timeoutr   r   r   r   e  s   


zBaseManager.joinc                 C   6   	 | j | j| jd}zt|d dW |  S |  w )Nr   r_   r   r   r   rG   r   r   r   r   r   _debug_infon  
   zBaseManager._debug_infoc                 C   r   )Nr   r`   r   r   r   r   r   _number_of_objectsx  r   zBaseManager._number_of_objectsc                 C   sf   | j jtjkr|   | j jtjkr1| 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   rN   r1   r   r   r   	__enter__  s   zBaseManager.__enter__c                 C      |    d S r   )r[   r/   exc_typeexc_valexc_tbr   r   r   __exit__     zBaseManager.__exit__c                 C   s   	 |   rZtd z|||d}zt|d d W |  n|  w W n	 ty-   Y nw | jdd |   rZtd t| drZtd |   | jdd |   rZtd	 t	j
|_ztj|= W d S  tyo   Y d S w )
Nz#sending shutdown message to managerr   r[   g      ?)r   zmanager still alive	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r   r   r   rG   r   r   r   hasattrr  r   r   r   r   _address_to_localr   )r   r-   rk   r5   r   r   r   r   r   r     s4   




zBaseManager._finalize_managerc                 C      | j S r   )r   r1   r   r   r   r-     s   zBaseManager.addressTc           
         s   	 d| j vr| j | _ d u rt |pt dd }|p!t dd }|r/t| D ]\}}q*||| f| j< |rL fdd}	|	_t| |	 d S d S )Nr   	_exposed__method_to_typeid_c                   sf   t d | jg|R i |\}} || j| | j|d}| j|j| jd}t|d d|jf |S )Nz)requesting creation of a shared %r objectmanagerrk   r   r   rc   )	r   r   r   r   r   r   r-   rG   r.   )r/   rC   rD   r   expproxyr   r   r,   r   r   rU     s   z"BaseManager.register.<locals>.temp)	__dict__r   copy	AutoProxyr   r&   r#   r8   setattr)
r   r,   rS   r   r   r   create_methodkeyr   rU   r   r  r   register  s$   



zBaseManager.register)NNr   Nrg   r   )NNNNT)r8   r:   r;   r   rZ   r   r0   r   r   r   classmethodr   r   r   r   r   r   r  staticmethodr   propertyr-   r  r   r   r   r   r     s6    

	+
	



r   c                   @      e Zd Zdd Zdd ZdS )ProcessLocalSetc                 C   s   t | dd  d S )Nc                 S      |   S r   )clearr'   r   r   r   <lambda>  s    z*ProcessLocalSet.__init__.<locals>.<lambda>)r   register_after_forkr1   r   r   r   r0     r   zProcessLocalSet.__init__c                 C   s   t | dfS rg   )r   r1   r   r   r   
__reduce__  r  zProcessLocalSet.__reduce__N)r8   r:   r;   r0   r"  r   r   r   r   r        r  c                   @   s   e Zd Z	 i Ze Z		dddZdd Zdi fd	d
Z	dd Z
dd Zedd Zdd Zdd Zdd Zdd Zdd ZdS )r   NTFc           	      C   s   t j! t j|jd }|d u rt t f}|t j|j< W d    n1 s'w   Y  |d | _|d | _	|| _
| j
j| _|| _|| _t| d | _|| _|d urYt|| _n| jd urd| jj| _nt j| _|rp|   t| t j d S )Nr   r   )r   _mutexr	  r   r-   r   ForkAwareLocalr  _tls_idset_tokenr.   _id_managerr   rl   r   _owned_by_managerr   rj   r   rz   rk   _increfr!  _after_fork)	r/   r   rt   r  rk   r   rb   manager_ownedZ	tls_idsetr   r   r   r0     s.   



zBaseProxy.__init__c                 C   sd   t d t j}t jdkr|dt j 7 }| j| jj	| j
d}t|d d|f || j_d S )Nzmaking connection to manager
MainThread|r   r]   )r   r   r   rz   r    rq   r   r   r(  r-   r   rG   r&  r	   )r/   r    r   r   r   r   _connect  s   

zBaseProxy._connectr   c                 C   s   	 z| j j}W n ty!   tdt j |   | j j}Y nw |	| j
|||f | \}}|dkr8|S |dkrn|\}}| jj|j d }	| jj|_|	|| j| j| j|d}
| j|j| jd}t|d d|jf |
S t||)Nz#thread %r does not own a connectionr=   r   r  r   rc   )r&  r	   r   r   r   rq   r   r    r1  r>   r)  r?   r*  r   r,   r(  r-   r   r   r   rG   r.   r@   )r/   rB   rC   rD   r   rE   rF   r   r   r   r  r   r   r   _callmethod%  s4   


zBaseProxy._callmethodc                 C   s   	 |  dS )Nr   r3  r1   r   r   r   	_getvalueC  s   
zBaseProxy._getvaluec              	   C   s   | j rtd| jj d S | j| jj| jd}t|d d| j	f td| jj | j
| j	 | jo5| jj}tj| tj| j| j|| j| j
| jfdd| _d S )Nz%owned_by_manager skipped INCREF of %rr   rb   z	INCREF %r
   r   )r+  r   r   r(  r.   r   r-   r   rG   r)  r'  addr*  r   r   r   _decrefr&  _close)r/   r   r5   r   r   r   r,  I  s   
zBaseProxy._increfc              
   C   s   | | j |d u s|jtjkrBztd| j || j|d}t|d d| jf W n t	yA } ztd| W Y d }~nd }~ww td| j |sbt
|drdtdt j |j  |`d S d S d S )Nz	DECREF %rr   rc   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-   rG   r   r  rq   r   r    r	   r   )r   rk   r5   ZtlsZidsetr   r   r   r   r   r   r8  ]  s$   
zBaseProxy._decrefc              
   C   sJ   d | _ z|   W d S  ty$ } ztd|  W Y d }~d S d }~ww )Nzincref failed: %s)r*  r,  r   r   r   )r/   r   r   r   r   r-  v  s   zBaseProxy._after_forkc                 C   sZ   i }t  d ur| j|d< t| ddr!| j|d< tt| j| j|ffS tt| | j| j|ffS )Nrk   _isautoFr   )	r   r   r   r  RebuildProxyr  r(  r   r   r/   rD   r   r   r   r"  ~  s   


zBaseProxy.__reduce__c                 C   r  r   )r5  )r/   memor   r   r   __deepcopy__  r   zBaseProxy.__deepcopy__c                 C   s   dt | j| jjt| f S )Nz<%s object, typeid %r at %#x>)r   r8   r(  r,   r.   r1   r   r   r   r9     s   zBaseProxy.__repr__c                 C   s6   	 z|  dW S  ty   t| d d d  Y S w )Nr9   r2  z; '__str__()' failed>)r3  r   r   r1   r   r   r   rQ     s   zBaseProxy.__str__NNNTF)r8   r:   r;   r	  r   ForkAwareThreadLockr$  r0   r1  r3  r5  r,  r  r8  r-  r"  r?  r9   rQ   r   r   r   r   r     s$    
)	
r   c                 C   s   	 t t dd }|r+|j|jkr+td| d|d< |j|jvr+|j|j |j|j< |	ddo9t t dd }| ||fd|i|S )Nr{   z*Rebuild a proxy owned by manager, token=%rTr.  rb   Z_inheritingF)
r   r   rz   r-   r   r   r.   rp   rn   pop)rV   r   rt   rD   r   rb   r   r   r   r<    s   

r<  c                 C   sp   	 t |}z|| |f W S  ty   Y nw i }|D ]}td||f | qt| tf|}||_||| |f< |S )NzOdef %s(self, /, *args, **kwds):
        return self._callmethod(%r, args, kwds))r   r   execr   r   r  )r    r   _cacheZdicmeth	ProxyTyper   r   r   MakeProxyType  s$   rG  c                 C   s   	 t | d }|d u r&|| j|d}zt|d d| f}W |  n|  w |d u r1|d ur1|j}|d u r:t j}td| j	 |}	|	| |||||d}
d|
_
|
S )Nr   r   r^   zAutoProxy[%s])r  rk   rb   r.  T)rl   r-   rG   r   r   r   rz   rk   rG  r,   r;  )r   rt   r  rk   r   rb   r.  r   r   rF  r  r   r   r   r    s"   

r  c                   @   r  )	Namespacec                K   s   | j | d S r   )r  updater=  r   r   r   r0     r3   zNamespace.__init__c                 C   sZ   t | j }g }|D ]\}}|ds|d||f  q|  d| jjd|f S )NrX   z%s=%rz%s(%s)z, )	r&   r  r#   
startswithrT   r   r7   r8   r   )r/   r#   rU   r    r   r   r   r   r9     s   
zNamespace.__repr__N)r8   r:   r;   r0   r9   r   r   r   r   rH    r#  rH  c                   @   s8   e Zd ZdddZdd Zdd Zdd	 ZeeeZd
S )ValueTc                 C      || _ || _d S r   )	_typecode_value)r/   r   r   lockr   r   r   r0        
zValue.__init__c                 C   r
  r   rN  r1   r   r   r   r     s   z	Value.getc                 C   s
   || _ d S r   rQ  r/   r   r   r   r   r        
z	Value.setc                 C   s   dt | j| j| jf S )Nz
%s(%r, %r))r   r8   rM  rN  r1   r   r   r   r9     s   zValue.__repr__NT)	r8   r:   r;   r0   r   r   r9   r  r   r   r   r   r   rK    s    
rK  c                 C   s   t  | |S r   )r   )r   sequencerO  r   r   r   Array  r  rV  c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )IteratorProxy)__next__r>   throwr   c                 C      | S r   r   r1   r   r   r   __iter__  r   zIteratorProxy.__iter__c                 G      |  d|S )NrX  r4  r/   rC   r   r   r   rX  
  r  zIteratorProxy.__next__c                 G   r\  )Nr>   r4  r]  r   r   r   r>     r  zIteratorProxy.sendc                 G   r\  )NrY  r4  r]  r   r   r   rY    r  zIteratorProxy.throwc                 G   r\  )Nr   r4  r]  r   r   r   r     r  zIteratorProxy.closeN)	r8   r:   r;   r  r[  rX  r>   rY  r   r   r   r   r   rW    s    rW  c                   @   s2   e Zd ZdZdddZdd Zdd	 Zd
d ZdS )AcquirerProxy)acquirereleaseTNc                 C   s"   |d u r|fn||f}|  d|S Nr_  r4  )r/   blockingr   rC   r   r   r   r_    s   zAcquirerProxy.acquirec                 C   
   |  dS Nr`  r4  r1   r   r   r   r`    rS  zAcquirerProxy.releasec                 C   rc  ra  r4  r1   r   r   r   r     rS  zAcquirerProxy.__enter__c                 C   rc  rd  r4  r  r   r   r   r    rS  zAcquirerProxy.__exit__)TN)r8   r:   r;   r  r_  r`  r   r  r   r   r   r   r^    s    
r^  c                   @   s6   e Zd ZdZdddZdddZdd	 Zdd
dZdS )ConditionProxy)r_  r`  r   notify
notify_allNc                 C      |  d|fS Nr   r4  r   r   r   r   r   #  r*   zConditionProxy.waitr   c                 C   rh  )Nrf  r4  )r/   nr   r   r   rf  %  r*   zConditionProxy.notifyc                 C   rc  )Nrg  r4  r1   r   r   r   rg  '  rS  zConditionProxy.notify_allc                 C   sj   | }|r|S |d urt  | }nd }d }|s3|d ur)|t   }|dkr)	 |S | | | }|r|S )Nr   )time	monotonicr   )r/   	predicater   rF   endtimewaittimer   r   r   wait_for)  s"   
zConditionProxy.wait_forr   )r   )r8   r:   r;   r  r   rf  rg  rp  r   r   r   r   re  !  s    

re  c                   @   s2   e Zd ZdZdd Zdd Zdd Zdd	d
ZdS )
EventProxy)r   r   r  r   c                 C   rc  )Nr   r4  r1   r   r   r   r   >  rS  zEventProxy.is_setc                 C   rc  Nr   r4  r1   r   r   r   r   @  rS  zEventProxy.setc                 C   rc  )Nr  r4  r1   r   r   r   r  B  rS  zEventProxy.clearNc                 C   rh  ri  r4  r   r   r   r   r   D  r*   zEventProxy.waitr   )r8   r:   r;   r  r   r   r  r   r   r   r   r   rq  <  s    rq  c                   @   sN   e Zd ZdZdddZdd Zdd Zed	d
 Zedd Z	edd Z
dS )BarrierProxy)__getattribute__r   abortresetNc                 C   rh  ri  r4  r   r   r   r   r   J  r*   zBarrierProxy.waitc                 C   rc  )Nru  r4  r1   r   r   r   ru  L  rS  zBarrierProxy.abortc                 C   rc  )Nrv  r4  r1   r   r   r   rv  N  rS  zBarrierProxy.resetc                 C      |  ddS )Nrt  )partiesr4  r1   r   r   r   rx  P     zBarrierProxy.partiesc                 C   rw  )Nrt  )	n_waitingr4  r1   r   r   r   rz  S  ry  zBarrierProxy.n_waitingc                 C   rw  )Nrt  )brokenr4  r1   r   r   r   r{  V  ry  zBarrierProxy.brokenr   )r8   r:   r;   r  r   ru  rv  r  rx  rz  r{  r   r   r   r   rs  H  s    


rs  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	NamespaceProxy)rt  __setattr____delattr__c                 C   s0   |d dkrt | |S t | d}|d|fS )Nr   rX   r3  rt  )objectrt  r/   r  
callmethodr   r   r   __getattr__]     zNamespaceProxy.__getattr__c                 C   s4   |d dkrt | ||S t | d}|d||fS )Nr   rX   r3  r}  )r  r}  rt  )r/   r  r   r  r   r   r   r}  b  s   zNamespaceProxy.__setattr__c                 C   s0   |d dkrt | |S t | d}|d|fS )Nr   rX   r3  r~  )r  r~  rt  r  r   r   r   r~  g  r  zNamespaceProxy.__delattr__N)r8   r:   r;   r  r  r}  r~  r   r   r   r   r|  [  s
    r|  c                   @   s4   e Zd ZdZdd Zdd ZeeeZee	j
ZdS )
ValueProxy)r   r   c                 C   rc  )Nr   r4  r1   r   r   r   r   p  rS  zValueProxy.getc                 C   rh  rr  r4  rR  r   r   r   r   r  r*   zValueProxy.setN)r8   r:   r;   r  r   r   r  r   r  typesGenericAlias__class_getitem__r   r   r   r   r  n  s    
r  BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__rT   countextendindexinsertrB  removereverser   __imul__c                   @   r  )	ListProxyc                 C      |  d|f | S )Nr  r4  rR  r   r   r   __iadd__     zListProxy.__iadd__c                 C   r  )Nr  r4  rR  r   r   r   r    r  zListProxy.__imul__N)r8   r:   r;   r  r  r   r   r   r   r    s    r  	DictProxy)r  r  r  r[  r  r  r  r  r   r#   r$   rB  popitem
setdefaultrI  r%   r[  Iterator
ArrayProxy)r  r  r  	PoolProxy)Zapplyapply_asyncr   imapimap_unorderedr   map	map_asyncstarmapstarmap_asyncr  ZAsyncResult)r  r  r  r  r  c                   @   r  )r  c                 C   rZ  r   r   r1   r   r   r   r     r   zPoolProxy.__enter__c                 C   r   r   )r  r  r   r   r   r    r  zPoolProxy.__exit__N)r8   r:   r;   r   r  r   r   r   r   r    r#  c                   @   s   e Zd ZdS )r   N)r8   r:   r;   r   r   r   r   r     s    r   QueueJoinableQueuerx   rr   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr&   r   )r   r  )r  c                   @   sJ   e Zd Z	 g fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )_SharedMemoryTrackerc                 C   rL  r   Zshared_memory_context_namesegment_names)r/   r    r  r   r   r   r0     rP  z_SharedMemoryTracker.__init__c                 C   s*   	 t d|dt   | j| d S )NzRegister segment  in pid )r   r   r   r  rT   r/   segment_namer   r   r   register_segment  s   z%_SharedMemoryTracker.register_segmentc                 C   sD   	 t d|dt   | j| t|}|  |  d S )NzDestroy segment r  )	r   r   r   r  r  r   SharedMemoryr   unlink)r/   r  Zsegmentr   r   r   destroy_segment  s   
z$_SharedMemoryTracker.destroy_segmentc                 C   s$   	 | j d d  D ]}| | qd S r   )r  r  r  r   r   r   r    s   z_SharedMemoryTracker.unlinkc                 C   s(   t d| jj dt   |   d S )NzCall z.__del__ in )r   r   r7   r8   r   r  r1   r   r   r   __del__  s   z_SharedMemoryTracker.__del__c                 C   s   | j | jfS r   r  r1   r   r   r   r2     r  z!_SharedMemoryTracker.__getstate__c                 C   s   | j |  d S r   )r0   r4   r   r   r   r6     r*   z!_SharedMemoryTracker.__setstate__N)
r8   r:   r;   r0   r  r  r  r  r2   r6   r   r   r   r   r    s    	r  c                   @   sJ   e Zd Zejg d Zdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dS )SharedMemoryServer)track_segmentrelease_segmentlist_segmentsc                 O   s`   t j| g|R i | | j}t|trt|}td| dt  | _	t
dt   d S )NZshm_rX   z"SharedMemoryServer started by pid )rZ   r0   r-   rK   rh   osfsdecoder  r   shared_memory_contextr   r   )r/   rC   kwargsr-   r   r   r   r0     s   

zSharedMemoryServer.__init__c                O   s<   	 t | j| d dr| j|d< tj| ||g|R i |S )Nr2  Z_shared_memory_proxyr  )r  ri   r  rZ   r\   )r/   rA   r,   rC   r  r   r   r   r\     s   
zSharedMemoryServer.createc                 C   s   	 | j   t| |S r   )r  r  rZ   r[   r   r   r   r   r[     s   
zSharedMemoryServer.shutdownc                 C      	 | j | d S r   )r  r  r/   rA   r  r   r   r   r    s   z SharedMemoryServer.track_segmentc                 C   r  r   )r  r  r  r   r   r   r    s   z"SharedMemoryServer.release_segmentc                 C   s
   	 | j jS r   )r  r  r   r   r   r   r    s   z SharedMemoryServer.list_segmentsN)r8   r:   r;   rZ   r   r0   r\   r[   r  r  r  r   r   r   r   r    s    

r  c                   @   s:   e Zd Z	 eZdd Zdd Zdd Zdd Zd	d
 Z	dS )r   c                 O   sT   t jdkrddlm} |  tj| g|R i | t| j	j
 dt   d S )Nposixr   )resource_trackerz created by pid )r  r     r  Zensure_runningr   r0   r   r   r7   r8   r   )r/   rC   r  r  r   r   r   r0   /  s
   
zSharedMemoryManager.__init__c                 C   s   t | jj dt   d S )Nz.__del__ by pid )r   r   r7   r8   r   r1   r   r   r   r  ;  s   zSharedMemoryManager.__del__c                 C   sf   	 | 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 )Nz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr   )r   r   r   r   r   r   r   rN   r   r   r   r   r   r1   r   r   r   r   ?  s   zSharedMemoryManager.get_serverc                 C   s   	 | j | j| jd/}tjd d|d}zt|d d|jf W n ty0 } z|  |d }~ww W d    |S 1 s<w   Y  |S )Nr   T)r\   sizer  )	r   r   r   r   r  rG   r    BaseExceptionr  )r/   r  r   Zsmsr   r   r   r   r  L  s   
z SharedMemoryManager.SharedMemoryc                 C   s   	 | j | j| jd.}t|}zt|d d|jjf W n ty/ } z|j	  |d }~ww W d    |S 1 s;w   Y  |S )Nr   r  )
r   r   r   r   ShareableListrG   Zshmr    r  r  )r/   rU  r   slr   r   r   r   r  X  s   


z!SharedMemoryManager.ShareableListN)
r8   r:   r;   r  r   r0   r  r   r  r  r   r   r   r   r   #  s    	r@  rT  )U__all__r   rq   r   r   queuerk  r  r  r   r   r   r  r	   contextr
   r   r   r   r   r   r   r   ImportErrorZ	HAS_SHMEMrT   r   r  Z
view_typesr&   r)   Z	view_typer  r   rG   r@   r   rO   rW   rY   rZ   r   ru   rv   XmlListener	XmlClientrl   r   r   r  r   r<  rG  r  rH  rK  rV  rW  r^  re  rq  rs  r|  r  r  r  r  r  r  ZBasePoolProxyr  r   r  rx   rr   r  r  r  r  r  r  r   r  r  r   r   r   r   r   <module>   s   



  P

	 w
 4



	



%-