<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    e5d                     @   sB  d ddddg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 dZW n ek
r   dZY nX dd Zeeje dd dD Zed ek	r.dd ZeD ]Zeee qG 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-e.Z/G d.d deZ0d/d0 Z1i fd1d2Z2dld3d4Z3G d5d6 d6eZ4G d7d8 d8eZ5dmd9d:Z6G d;d< d<e0Z7G d=d> d>e0Z8G d?d@ d@e8Z9G dAdB dBe0Z:G dCdD dDe0Z;G dEdF dFe0Z<G dGdH dHe0Z=e2dIdJZ>G dKdL dLe>Z?e2dMdNZ@dOdPie@_Ae2dQdRZBe2dSdTZCdUdUdUdPdPdVeC_AG dWdS dSeCZDG dXd de-ZEeEdYejF eEdZejF eEd[ejGe: eEd\ejHe8 eEd]ejIe8 eEd^ejJe8 eEd_ejKe8 eEd`ejLe9 eEdaejMe; eEdbejNeD eEdcee? eEddeOe@ eEd8e5e= eEd:e6eB eEd6e4e< eEjdPe7dde eEjdUddf er>G dgdh dhZPG didj dje&ZQG dkd de-ZRdS )nBaseManagerSyncManager	BaseProxyTokenSharedMemoryManager    N)getpid)
format_exc   )
connection)	reductionget_spawning_popenProcessError)pool)process)util)get_context)shared_memoryTFc                 C   s   t j | j|  ffS N)arraytypecodetobytes)a r   0/usr/lib64/python3.8/multiprocessing/managers.pyreduce_array-   s    r   c                 C   s   g | ]}t ti | qS r   )typegetattr.0namer   r   r   
<listcomp>1   s     r    )itemskeysvaluesc                 C   s   t t | ffS r   )listobjr   r   r   rebuild_as_list3   s    r'   c                   @   s0   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__B   s    zToken.__init__c                 C   s   | j | j| jfS r   r(   r,   r   r   r   __getstate__E   s    zToken.__getstate__c                 C   s   |\| _ | _| _d S r   r(   r,   stater   r   r   __setstate__H   s    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+   r.   r   r   r   __repr__K   s    zToken.__repr__N)r4   
__module____qualname__	__slots__r-   r/   r2   r5   r   r   r   r   r   <   s
   r   c                 C   s8   |  ||||f |  \}}|dkr*|S t||d S )N#RETURN)sendrecvconvert_to_error)cr+   
methodnameargskwdskindresultr   r   r   dispatchS   s
    rC   c                 C   sd   | dkr|S | dkrRt |ts4td|| t|| dkrHtd| S t|S ntd| S d S )N#ERROR)
#TRACEBACK#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrF   zUnserializable message: %s
zUnrecognized message type {!r})
isinstancestr	TypeErrorformatr   RemoteError
ValueError)rA   rB   r   r   r   r<   ]   s    
  
r<   c                   @   s   e Zd Zdd ZdS )rK   c                 C   s   dt | jd  d S )NzM
---------------------------------------------------------------------------
r   zK---------------------------------------------------------------------------)rH   r?   r.   r   r   r   __str__m   s    zRemoteError.__str__N)r4   r6   r7   rM   r   r   r   r   rK   l   s   rK   c                 C   s2   g }t | D ] }t| |}t|r|| q|S r   )dirr   callableappend)r&   tempr   funcr   r   r   all_methodst   s    
rS   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       s      z"public_methods.<locals>.<listcomp>)rS   r%   r   r   r   public_methods   s    rU   c                	   @   s   e Zd Zddddddddd	g	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%e_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*   Zbacklog0Nr   )rG   bytesrI   rJ   r   registryr   AuthenticationStringauthkeylistener_clientlistenerr*   	id_to_objid_to_refcountid_to_local_proxy_obj	threadingLockmutex)r,   rd   r*   rf   
serializerListenerClientr   r   r   r-      s     
 

zServer.__init__c              	   C   s   t  | _| t _zVt j| jd}d|_|  z| j sL| jd q4W n ttfk
rf   Y nX W 5 tjtjkrt	
d tjt_tjt_td X d S )Nzresetting stdout, stderrr   )targetTr	   )rl   Event
stop_eventr   current_process_manager_serversysstdout
__stdout__r   debug
__stderr__stderrexitThreadaccepterdaemonstartis_setwaitKeyboardInterrupt
SystemExit)r,   r   r   r   r   serve_forever   s     




zServer.serve_foreverc                 C   sN   z| j  }W n tk
r&   Y q Y nX tj| j|fd}d|_|  q d S )Nrr   r?   T)rh   ZacceptOSErrorrl   r~   handle_requestr   r   )r,   r=   tr   r   r   r      s    
zServer.accepterc                 C   s4  d  } }}z>t || j t || j | }|\}}}}t| |}W n tk
rh   dt f}	Y n>X z||f||}W n tk
r   dt f}	Y n
X d|f}	z||	 W nr tk
r& }
 zRz|dt f W n tk
r   Y nX t	
d|	 t	
d| t	
d|
 W 5 d }
~
X Y nX |  d S )NrE   r9   zFailure to send message: %rz ... request was %r ... exception was %r)r
   Zdeliver_challengerf   Zanswer_challenger;   r   	Exceptionr   r:   r   infoclose)r,   r=   funcnamerB   requestignorer?   r@   rR   msger   r   r   r      s2    zServer.handle_requestc                 C   s  t dt j |j}|j}| j}| j	 szBd  }}| }|\}}}	}
z|| \}}}W n^ t
k
r } z@z| j| \}}}W n& t
k
r } z|W 5 d }~X Y nX W 5 d }~X Y nX ||krtd|t||f t||}z||	|
}W n, tk
r" } zd|f}W 5 d }~X Y nPX |o4||d }|rj| |||\}}t|| j|}d||ff}nd|f}W n tk
r   |d krdt f}nNz,| j| }|| |||f|	|
}d|f}W n  tk
r   dt f}Y nX Y nP tk
r   t dt j td Y n  tk
r<   dt f}Y nX zDz|| W n2 tk
r~ } z|d	t f W 5 d }~X Y nX W q$ tk
r } z@t d
t j t d| t d| |  td W 5 d }~X Y q$X q$d S )Nz$starting server thread to service %rz+method %r of %r object is not in exposed=%rrD   #PROXYr9   rE   z$got EOF -- exiting thread serving %rr   rF   zexception in thread serving %rz ... message was %rr   r	   )r   rz   rl   current_threadr   r;   r:   ri   rt   r   KeyErrorrk   AttributeErrorr   r   r   getrX   r   r*   r   fallback_mappingEOFErrorrw   r}   r   r   )r,   connr;   r:   ri   r>   r&   r   identr?   r@   exposed	gettypeidkeZ	second_keZfunctionresr   r   r)   ZridentZrexposedtokenZfallback_funcrB   r   r   r   serve_client   s    (


   $zServer.serve_clientc                 C   s   |S r   r   r,   r   r   r&   r   r   r   fallback_getvalue5  s    zServer.fallback_getvaluec                 C   s   t |S r   rH   r   r   r   r   fallback_str8  s    zServer.fallback_strc                 C   s   t |S r   )reprr   r   r   r   fallback_repr;  s    zServer.fallback_repr)rM   r5   	#GETVALUEc                 C   s   d S r   r   r,   r=   r   r   r   r]   D  s    zServer.dummyc              
   C   s   | j t g }t| j }|  |D ]<}|dkr&|d|| j| t| j| d d d f  q&d|W  5 Q R  S Q R X d S )Nra   z  %s:       refcount=%s
    %sr   K   
)	rn   r$   rj   r"   sortrP   rH   ri   join)r,   r=   rB   r"   r   r   r   r   r[   G  s    
zServer.debug_infoc                 C   s
   t | jS r   )lenrj   r   r   r   r   r\   W  s    zServer.number_of_objectsc                 C   sL   z:ztd |d W n   dd l}|  Y nX W 5 | j   X d S )Nz!manager received shutdown messager9   Nr   )rt   setr   rz   r:   	traceback	print_exc)r,   r=   r   r   r   r   rW   ^  s    
zServer.shutdownc               	   O   s  t | dkr| ^}}}} n| s(tdnd|krDtdt | d  |d}t | dkr~| ^}}} dd l}|jdtdd	 nFd
|krtdt | d  |d
}| ^}} dd l}|jdtdd	 t| } |j |j| \}}}}	|d kr|st | dkrt	d| d }
n
|| |}
|d kr2t
|
}|d k	rlt|ts\td|t|t|t| }dt|
 }td|| |
t||f|j|< ||jkrd|j|< W 5 Q R X ||| |t|fS )N   z8descriptor 'create' of 'Server' object needs an argumentr)   7create expected at least 2 positional arguments, got %dr	      r   z2Passing 'typeid' as keyword argument is deprecated)
stacklevelr=   z-Passing 'c' as keyword argument is deprecatedz4Without callable, must have one non-keyword argumentz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)r   rI   popwarningswarnDeprecationWarningtuplern   rd   rL   rU   rG   dictrJ   r   r$   r+   r   rz   r   ri   rj   r^   )r?   r@   r,   r=   r)   r   rO   r   method_to_typeid	proxytyper&   r   r   r   r   rX   k  sp    



 

 





 zServer.createz$($self, c, typeid, /, *args, **kwds)c                 C   s   t | j|j d S )Nr	   )r   ri   r+   )r,   r=   r   r   r   r   rZ     s    zServer.get_methodsc                 C   s"   |t  _|d | | d S )Nr   )rl   r   r   r:   r   )r,   r=   r   r   r   r   rY     s    

zServer.accept_connectionc                 C   s   | j  z| j|  d7  < W nh tk
r } zJ|| jkrrd| j|< | j| | j|< | j| \}}}td| n|W 5 d }~X Y nX W 5 Q R X d S )Nr	   z&Server re-enabled tracking & INCREF %r)rn   rj   r   rk   ri   r   rz   )r,   r=   r   r   r&   r   r   r   r   r   r^     s    

zServer.increfc              	   C   s   || j kr$|| jkr$td| d S | jZ | j | dkrXtd|| j| | j | | j |  d8  < | j | dkr| j |= W 5 Q R X || j krd| j|< td| | j | j|= W 5 Q R X 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)rj   rk   r   rz   rn   AssertionErrorrJ   ri   )r,   r=   r   r   r   r   r_     s,    
 

zServer.decrefN)r4   r6   r7   publicr-   r   r   r   r   r   r   r   r   r]   r[   r\   rW   rX   __text_signature__rZ   rY   r^   r_   r   r   r   r   rV      s:       
"Q=rV   c                   @   s   e Zd ZdgZdZdZdZdS )Statevaluer   r	   r   N)r4   r6   r7   r8   INITIALSTARTEDSHUTDOWNr   r   r   r   r     s   r   )pickleZ	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 krt  j}|| _t || _t | _tj| j_	|| _
t| \| _| _|pTt | _d S r   )r   ru   rf   _addressre   _authkeyr   _stater   r   _serializerrg   Z	_Listener_Clientr   _ctx)r,   r*   rf   ro   Zctxr   r   r   r-     s    

zBaseManager.__init__c                 C   sf   | j jtjkrP| j jtjkr&tdn*| j jtjkr>tdn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   rJ   rV   	_registryr   r   r   r.   r   r   r   
get_server  s    


 zBaseManager.get_serverc                 C   s8   t | j \}}|| j| jd}t|d d tj| j_d S )Nrf   r]   )	rg   r   r   r   rC   r   r   r   r   )r,   rp   rq   r   r   r   r   connect  s    zBaseManager.connectr   c              	   C   s4  | j jtjkrP| j jtjkr&tdn*| j jtjkr>tdntd| j j|d k	rht|sht	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)Zduplexr   :c                 s   s   | ]}t |V  qd S r   r   )r   ir   r   r   	<genexpr>A  s     z$BaseManager.start.<locals>.<genexpr>-r   r?   Zexitpriority)!r   r   r   r   r   r   r   rJ   rO   rI   r
   ZPiper   ZProcessr   _run_serverr   r   r   r   _processr   Z	_identityr4   r   r   r   r;   r   Finalize_finalize_managerr   rW   )r,   initializerinitargsreaderwriterr   r   r   r   r   (  sH    

   


  zBaseManager.startc           	      C   s^   t  t jt j |d k	r ||  | ||||}||j |  td|j |	  d S )Nzmanager serving at %r)
signalSIGINTSIG_IGN_Serverr:   r*   r   r   r   r   )	clsrd   r*   rf   ro   r   r   r   serverr   r   r   r   S  s    zBaseManager._run_serverc                O   sN   | j | j| jd}zt|d d|f| |\}}W 5 |  X t|| j||fS )Nr   rX   )r   r   r   r   rC   r   )r,   r)   r?   r@   r   r+   r   r   r   r   _createj  s
    
zBaseManager._createc                 C   s*   | j d k	r&| j | | j  s&d | _ d S r   )r   r   is_aliver,   timeoutr   r   r   r   v  s    

zBaseManager.joinc                 C   s2   | j | j| jd}zt|d dW S |  X d S )Nr   r[   r   r   r   r   rC   r,   r   r   r   r   _debug_info  s    zBaseManager._debug_infoc                 C   s2   | j | j| jd}zt|d dW S |  X d S )Nr   r\   r   r   r   r   r   _number_of_objects  s    zBaseManager._number_of_objectsc                 C   sj   | j jtjkr|   | j jtjkrf| j jtjkr<tdn*| j jtjkrTtdntd| j j| S )NzUnable to start serverr   r   )	r   r   r   r   r   r   r   r   rJ   r.   r   r   r   	__enter__  s    

zBaseManager.__enter__c                 C   s   |    d S r   )rW   r,   exc_typeZexc_valZexc_tbr   r   r   __exit__  s    zBaseManager.__exit__c                 C   s   |   rtd z,|||d}zt|d d W 5 |  X W n tk
rR   Y nX | jdd |   rtd t| drtd |   | jd	d |   rtd
 t	j
|_ztj|= W n tk
r   Y nX d S )Nz#sending shutdown message to managerr   rW   g      ?)r   zmanager still alive	terminatez'trying to `terminate()` manager processg?z#manager still alive after terminate)r   r   r   r   rC   r   r   hasattrr   r   r   r   r   _address_to_localr   )r   r*   rf   r1   r   r   r   r   r   r     s.    




zBaseManager._finalize_managerc                 C   s   | j S r   )r   r.   r   r   r   r*     s    zBaseManager.addressTc           
         s   d| j kr| j | _ d kr"t |p0t dd }|p@t dd }|r\t| D ]\}}qR||| f| j< |r fdd}	|	_t| |	 d S )Nr   	_exposed__method_to_typeid_c                   s`   t d | jf||\}} || j| | j|d}| j|j| jd}t|d d|jf |S )Nz)requesting creation of a shared %r objectmanagerrf   r   r   r_   )	r   rz   r   r   r   r   r*   rC   r+   )r,   r?   r@   r   Zexpproxyr   r   r)   r   r   rQ     s       z"BaseManager.register.<locals>.temp)	__dict__r   copy	AutoProxyr   r$   r!   r4   setattr)
r   r)   rO   r   r   r   create_methodkeyr   rQ   r   r   r   register  s(    

   

zBaseManager.register)NNr   N)Nr   )Nr   )N)NNNNT)r4   r6   r7   r   rV   r   r-   r   r   r   classmethodr   r   r   r   r   r   r   staticmethodr   propertyr*   r  r   r   r   r   r     s6     
	
+   
	



    c                   @   s   e Zd Zdd Zdd ZdS )ProcessLocalSetc                 C   s   t | dd  d S )Nc                 S   s   |   S r   )clearr%   r   r   r   <lambda>      z*ProcessLocalSet.__init__.<locals>.<lambda>)r   register_after_forkr.   r   r   r   r-     s    zProcessLocalSet.__init__c                 C   s   t | dfS rb   )r   r.   r   r   r   
__reduce__  s    zProcessLocalSet.__reduce__N)r4   r6   r7   r-   r  r   r   r   r   r    s   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8 t j|jd }|d kr:t t f}|t j|j< W 5 Q R X |d | _|d | _	|| _
| j
j| _|| _|| _t| d | _|| _|d k	rt|| _n"| jd k	r| jj| _nt j| _|r|   t| t j d S )Nr   r	   )r   _mutexr   r   r*   r   ZForkAwareLocalr  _tls_idset_tokenr+   _id_managerr   rg   r   _owned_by_managerr   re   r   ru   rf   _increfr  _after_fork)	r,   r   ro   r   rf   r   r^   manager_ownedZ	tls_idsetr   r   r   r-     s*    



zBaseProxy.__init__c                 C   sd   t d t j}t jdkr4|dt j 7 }| j| jj	| j
d}t|d d|f || j_d S )Nzmaking connection to managerZ
MainThread|r   rY   )r   rz   r   ru   r   rl   r   r   r  r*   r   rC   r  r
   )r,   r   r   r   r   r   _connect-  s    

zBaseProxy._connectr   c                 C   s   z| j j}W n6 tk
rB   tdt j |   | j j}Y nX |	| j
|||f | \}}|dkrp|S |dkr|\}}| jj|j d }	| jj|_|	|| j| j| j|d}
| j|j| jd}t|d d|jf |
S t||d S )Nz#thread %r does not own a connectionr9   r   r   r   r_   )r  r
   r   r   rz   rl   r   r   r  r:   r  r;   r  r   r)   r  r*   r   r   r   rC   r+   r<   )r,   r>   r?   r@   r   rA   rB   r   r   r   r   r   r   r   _callmethod6  s6    
   zBaseProxy._callmethodc                 C   s
   |  dS )Nr   r  r.   r   r   r   	_getvalueT  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oj| jj}tj| tj| j| j|| j| j
| jfdd| _d S )Nz%owned_by_manager skipped INCREF of %rr   r^   z	INCREF %r
   r   )r  r   rz   r  r+   r   r*   r   rC   r  r  addr  r   r   r   _decrefr  Z_close)r,   r   r1   r   r   r   r  Z  s$     
  zBaseProxy._increfc              
   C   s   | | j |d ks |jtjkrz2td| j || j|d}t|d d| jf W q t	k
r } ztd| W 5 d }~X Y qX ntd| j |st
|drtdt j |j  |`d S )Nz	DECREF %rr   r_   z... decref failed %sz%DECREF %r -- manager already shutdownr
   z-thread %r has no more proxies so closing conn)discardr+   r   r   r   r   rz   r*   rC   r   r   rl   r   r   r
   r   )r   rf   r1   ZtlsZidsetr   r   r   r   r   r   r   n  s     
zBaseProxy._decrefc              
   C   sH   d | _ z|   W n0 tk
rB } ztd|  W 5 d }~X Y nX d S )Nzincref failed: %s)r  r  r   r   r   )r,   r   r   r   r   r    s
    zBaseProxy._after_forkc                 C   s^   i }t  d k	r| j|d< t| ddrB| j|d< tt| j| j|ffS tt| | j| j|ffS d S )Nrf   _isautoFr   )	r   r   r   r   RebuildProxyr   r  r   r   r,   r@   r   r   r   r    s    


zBaseProxy.__reduce__c                 C   s   |   S r   )r  )r,   Zmemor   r   r   __deepcopy__  s    zBaseProxy.__deepcopy__c                 C   s   dt | j| jjt| f S )Nz<%s object, typeid %r at %#x>)r   r4   r  r)   r+   r.   r   r   r   r5     s    zBaseProxy.__repr__c                 C   s:   z|  dW S  tk
r4   t| d d d  Y S X d S )Nr5   r  z; '__str__()' failed>)r  r   r   r.   r   r   r   rM     s    zBaseProxy.__str__)NNNTF)r4   r6   r7   r   r   ZForkAwareThreadLockr  r-   r  r  r  r  r  r   r  r  r%  r5   rM   r   r   r   r   r     s&           
)	
c                 C   s   t t dd }|rT|j|jkrTtd| d|d< |j|jkrT|j|j |j|j< |	ddopt t dd }| ||fd|i|S )Nrv   z*Rebuild a proxy owned by manager, token=%rTr  r^   Z_inheritingF)
r   r   ru   r*   r   rz   r+   rk   ri   r   )rR   r   ro   r@   r   r^   r   r   r   r#    s    

r#  c                 C   sp   t |}z|| |f W S  tk
r*   Y nX i }|D ]}td||f | q4t| tf|}||_||| |f< |S )NzOdef %s(self, /, *args, **kwds):
        return self._callmethod(%r, args, kwds))r   r   execr   r   r   )r   r   _cacheZdicZmeth	ProxyTyper   r   r   MakeProxyType  s     r)  c           
      C   s   t | d }|d krB|| j|d}zt|d d| f}W 5 |  X |d krX|d k	rX|j}|d krjt j}td| j	 |}|| ||||d}	d|	_
|	S )Nr	   r   rZ   zAutoProxy[%s])r   rf   r^   T)rg   r*   r   rC   r   r   ru   rf   r)  r)   r"  )
r   ro   r   rf   r   r^   r   r   r(  r   r   r   r   r     s     


r   c                   @   s   e Zd Zdd Zdd ZdS )	Namespacec                K   s   | j | d S r   )r   updater$  r   r   r   r-     s    zNamespace.__init__c                 C   sZ   t | j }g }|D ]$\}}|ds|d||f  q|  d| jjd|f S )NrT   z%s=%rz%s(%s)z, )	r$   r   r!   
startswithrP   r   r3   r4   r   )r,   r!   rQ   r   r   r   r   r   r5     s    
zNamespace.__repr__N)r4   r6   r7   r-   r5   r   r   r   r   r*    s   r*  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   s   || _ || _d S r   )	_typecode_value)r,   r   r   lockr   r   r   r-     s    zValue.__init__c                 C   s   | j S r   r/  r.   r   r   r   r     s    z	Value.getc                 C   s
   || _ d S r   r1  r,   r   r   r   r   r   
  s    z	Value.setc                 C   s   dt | j| j| jf S )Nz
%s(%r, %r))r   r4   r.  r/  r.   r   r   r   r5     s    zValue.__repr__N)T)	r4   r6   r7   r-   r   r   r5   r  r   r   r   r   r   r-    s
   
r-  c                 C   s   t  | |S r   )r   )r   sequencer0  r   r   r   Array  s    r4  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   | S r   r   r.   r   r   r   __iter__  s    zIteratorProxy.__iter__c                 G   s   |  d|S )Nr6  r  r,   r?   r   r   r   r6    s    zIteratorProxy.__next__c                 G   s   |  d|S )Nr:   r  r9  r   r   r   r:     s    zIteratorProxy.sendc                 G   s   |  d|S )Nr7  r  r9  r   r   r   r7    s    zIteratorProxy.throwc                 G   s   |  d|S )Nr   r  r9  r   r   r   r   !  s    zIteratorProxy.closeN)	r4   r6   r7   r   r8  r6  r:   r7  r   r   r   r   r   r5    s   r5  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 kr|fn||f}|  d|S Nr;  r  )r,   Zblockingr   r?   r   r   r   r;  '  s    zAcquirerProxy.acquirec                 C   s
   |  dS Nr<  r  r.   r   r   r   r<  *  s    zAcquirerProxy.releasec                 C   s
   |  dS r=  r  r.   r   r   r   r   ,  s    zAcquirerProxy.__enter__c                 C   s
   |  dS r>  r  r   r   r   r   r   .  s    zAcquirerProxy.__exit__)TN)r4   r6   r7   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   s   |  d|fS Nr   r  r   r   r   r   r   4  s    zConditionProxy.waitr	   c                 C   s   |  d|fS )Nr@  r  )r,   nr   r   r   r@  6  s    zConditionProxy.notifyc                 C   s
   |  dS )NrA  r  r.   r   r   r   rA  8  s    zConditionProxy.notify_allc                 C   sd   | }|r|S |d k	r$t  | }nd }d }|s`|d k	rN|t   }|dkrNq`| | | }q,|S )Nr   )time	monotonicr   )r,   Z	predicater   rB   ZendtimeZwaittimer   r   r   wait_for:  s    
zConditionProxy.wait_for)N)r	   )N)r4   r6   r7   r   r   r@  rA  rF  r   r   r   r   r?  2  s
   

r?  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   s
   |  dS )Nr   r  r.   r   r   r   r   O  s    zEventProxy.is_setc                 C   s
   |  dS Nr   r  r.   r   r   r   r   Q  s    zEventProxy.setc                 C   s
   |  dS )Nr	  r  r.   r   r   r   r	  S  s    zEventProxy.clearNc                 C   s   |  d|fS rB  r  r   r   r   r   r   U  s    zEventProxy.wait)N)r4   r6   r7   r   r   r   r	  r   r   r   r   r   rG  M  s
   rG  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   s   |  d|fS rB  r  r   r   r   r   r   [  s    zBarrierProxy.waitc                 C   s
   |  dS )NrK  r  r.   r   r   r   rK  ]  s    zBarrierProxy.abortc                 C   s
   |  dS )NrL  r  r.   r   r   r   rL  _  s    zBarrierProxy.resetc                 C   s   |  ddS )NrJ  )partiesr  r.   r   r   r   rM  a  s    zBarrierProxy.partiesc                 C   s   |  ddS )NrJ  )	n_waitingr  r.   r   r   r   rN  d  s    zBarrierProxy.n_waitingc                 C   s   |  ddS )NrJ  )brokenr  r.   r   r   r   rO  g  s    zBarrierProxy.broken)N)r4   r6   r7   r   r   rK  rL  r  rM  rN  rO  r   r   r   r   rI  Y  s   


rI  c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	NamespaceProxy)rJ  __setattr____delattr__c                 C   s0   |d dkrt | |S t | d}|d|fS )Nr   rT   r  rJ  )objectrJ  r,   r  
callmethodr   r   r   __getattr__n  s    zNamespaceProxy.__getattr__c                 C   s4   |d dkrt | ||S t | d}|d||fS )Nr   rT   r  rQ  )rS  rQ  rJ  )r,   r  r   rU  r   r   r   rQ  s  s    zNamespaceProxy.__setattr__c                 C   s0   |d dkrt | |S t | d}|d|fS )Nr   rT   r  rR  )rS  rR  rJ  rT  r   r   r   rR  x  s    zNamespaceProxy.__delattr__N)r4   r6   r7   r   rV  rQ  rR  r   r   r   r   rP  l  s   rP  c                   @   s*   e Zd ZdZdd Zdd ZeeeZdS )
ValueProxy)r   r   c                 C   s
   |  dS )Nr   r  r.   r   r   r   r     s    zValueProxy.getc                 C   s   |  d|fS rH  r  r2  r   r   r   r     s    zValueProxy.setN)r4   r6   r7   r   r   r   r  r   r   r   r   r   rW    s   rW  BaseListProxy)__add____contains____delitem____getitem____len____mul____reversed____rmul____setitem__rP   countextendindexinsertr   removereverser   __imul__c                   @   s   e Zd Zdd Zdd ZdS )	ListProxyc                 C   s   |  d|f | S )Nrc  r  r2  r   r   r   __iadd__  s    zListProxy.__iadd__c                 C   s   |  d|f | S )Nrh  r  r2  r   r   r   rh    s    zListProxy.__imul__N)r4   r6   r7   rj  rh  r   r   r   r   ri    s   ri  	DictProxy)rZ  r[  r\  r8  r]  ra  r	  r   r   r!   r"   r   popitem
setdefaultr+  r#   r8  Iterator
ArrayProxy)r]  r\  ra  	PoolProxy)Zapplyapply_asyncr   imapimap_unorderedr   map	map_asyncstarmapstarmap_asyncr   ZAsyncResult)rq  ru  rw  rr  rs  c                   @   s   e Zd Zdd Zdd ZdS )rp  c                 C   s   | S r   r   r.   r   r   r   r     s    zPoolProxy.__enter__c                 C   s   |    d S r   )r   r   r   r   r   r     s    zPoolProxy.__exit__N)r4   r6   r7   r   r   r   r   r   r   rp    s   c                   @   s   e Zd ZdS )r   N)r4   r6   r7   r   r   r   r   r     s   QueueZJoinableQueuers   rm   RLock	SemaphoreBoundedSemaphore	ConditionBarrierPoolr$   r   )r   r  )r  c                   @   sH   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   s   || _ || _d S r   Zshared_memory_context_namesegment_names)r,   r   r  r   r   r   r-     s    z_SharedMemoryTracker.__init__c                 C   s(   t d|dt   | j| d S )NzRegister segment  in pid )r   rz   r   r  rP   r,   segment_namer   r   r   register_segment  s    z%_SharedMemoryTracker.register_segmentc                 C   sB   t d|dt   | j| t|}|  |  d S )NzDestroy segment r  )	r   rz   r   r  rf  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   rz   r3   r4   r   r  r.   r   r   r   __del__  s    z_SharedMemoryTracker.__del__c                 C   s   | j | jfS r   r  r.   r   r   r   r/     s    z!_SharedMemoryTracker.__getstate__c                 C   s   | j |  d S r   )r-   r0   r   r   r   r2     s    z!_SharedMemoryTracker.__setstate__N)
r4   r6   r7   r-   r  r  r  r  r/   r2   r   r   r   r   r    s   	r  c                   @   sR   e Zd Zejdddg Zdd Zdd Zde_d	d
 Zdd Z	dd Z
dd ZdS )SharedMemoryServertrack_segmentrelease_segmentlist_segmentsc                 O   sZ   t j| f|| | j}t|tr,t|}td| dt  | _	t
dt   d S )NZshm_rT   z"SharedMemoryServer started by pid )rV   r-   r*   rG   rc   osfsdecoder  r   shared_memory_contextr   rz   )r,   r?   kwargsr*   r   r   r   r-   
  s    

zSharedMemoryServer.__init__c                  O   st   t | dkr| d }n4d|kr(|d }n"| s6tdntdt | d  ttj| d drhtj|d	< tj| |S )
Nr   r   r)   zDdescriptor 'create' of 'SharedMemoryServer' object needs an argumentr   r	   r  Z_shared_memory_proxyr  )r   rI   r   r,   rd   r  rV   rX   )r?   r  Ztypeodr)   r   r   r   rX     s    




zSharedMemoryServer.createz&($self, c, typeid, /, *args, **kwargs)c                 C   s   | j   t| |S r   )r  r  rV   rW   r   r   r   r   rW   )  s    
zSharedMemoryServer.shutdownc                 C   s   | j | d S r   )r  r  r,   r=   r  r   r   r   r  .  s    z SharedMemoryServer.track_segmentc                 C   s   | j | d S r   )r  r  r  r   r   r   r  2  s    z"SharedMemoryServer.release_segmentc                 C   s   | j jS r   )r  r  r   r   r   r   r  7  s    z SharedMemoryServer.list_segmentsN)r4   r6   r7   rV   r   r-   rX   r   rW   r  r  r  r   r   r   r   r    s   
r  c                   @   s8   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   sN   t jdkrddlm} |  tj| f|| t| j	j
 dt   d S )Nposixr	   )resource_trackerz created by pid )r  r    r  Zensure_runningr   r-   r   rz   r3   r4   r   )r,   r?   r  r  r   r   r   r-   I  s
    
zSharedMemoryManager.__init__c                 C   s   t | jj dt   d S )Nz.__del__ by pid )r   rz   r3   r4   r   r.   r   r   r   r  U  s    zSharedMemoryManager.__del__c                 C   sh   | j jtjkrP| j jtjkr&tdn*| j jtjkr>tdntd| j j| | j	| j
| j| jS )Nz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr   )r   r   r   r   r   r   r   rJ   r   r   r   r   r   r.   r   r   r   r   Y  s    

 zSharedMemoryManager.get_serverc                 C   sx   | j | j| jd\}tjd d|d}zt|d d|jf W n. tk
rh } z|  |W 5 d }~X Y nX W 5 Q R X |S )Nr   T)rX   sizer  )	r   r   r   r   r  rC   r   BaseExceptionr  )r,   r  r   Zsmsr   r   r   r   r  f  s     z SharedMemoryManager.SharedMemoryc                 C   sv   | j | j| jdZ}t|}zt|d d|jjf W n0 tk
rf } z|j	  |W 5 d }~X Y nX W 5 Q R X |S )Nr   r  )
r   r   r   r   ShareableListrC   Zshmr   r  r  )r,   r3  r   Zslr   r   r   r   r  r  s    

 z!SharedMemoryManager.ShareableListN)
r4   r6   r7   r  r   r-   r  r   r  r  r   r   r   r   r   =  s   
)NNNT)T)S__all__rw   rl   r   r   ZqueuerD  r  r   r   r   r  r
   contextr   r   r   r   r   r   r   r   Z	HAS_SHMEMImportErrorr   r  Z
view_typesr$   r'   Z	view_typerS  r   rC   r<   r   rK   rS   rU   rV   r   rp   rq   ZXmlListenerZ	XmlClientrg   r   r   r  r   r#  r)  r   r*  r-  r4  r5  r:  r?  rG  rI  rP  rW  rX  ri  rk  r   ro  ZBasePoolProxyrp  r   rx  rs   rm   ry  rz  r{  r|  r}  r~  r   r  r  r   r   r   r   r   <module>   s   


  c

	 w
 4    

	
	
 



%8