/ lib / multiprocessing / managers.pyc
managers.pyc
  1  o

  2  5�Hc��@sPgd�ZddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
  3  mZddlm
Z
ddlmZmZmZddlmZdd	lmZdd
  4  lmZddlmZzddlmZWneykd
ZYnwdZe�d�dd�Ze�eje�dd�dD�Zedeur�dd�ZeD]Ze�ee�q�Gdd�de �Z!difdd�Z"dd�Z#Gdd�de$�Z%d d!�Z&d"d#�Z'Gd$d%�d%e �Z(Gd&d'�d'e �Z)e
j*e
j+fe
j,e
j-fd(�Z.Gd)d*�d*e �Z/Gd+d,�d,e0�Z1Gd-d.�d.e �Z2d/d0�Z3ifd1d2�Z4		
dmd3d4�Z5Gd5d6�d6e �Z6Gd7d8�d8e �Z7dnd9d:�Z8Gd;d<�d<e2�Z9Gd=d>�d>e2�Z:Gd?d@�d@e:�Z;GdAdB�dBe2�Z<GdCdD�dDe2�Z=GdEdF�dFe2�Z>GdGdH�dHe2�Z?e4dIdJ�Z@GdKdL�dLe@�ZAe4dMdN�ZBdOdPieB_Ce4dQdR�ZDe4dSdT�ZEdUdUdUdPdPdV�eE_CGdWdS�dSeE�ZFGdXdY�dYe/�ZGeG�dZejH�eG�d[ejH�eG�d\ejIe<�eG�d]ejJe:�eG�d^ejKe:�eG�d_ejLe:�eG�d`ejMe:�eG�daejNe;�eG�dbejOe=�eG�dcejPeF�eG�ddeeA�eG�deeQeB�eG�d8e7e?�eG�d:e8eD�eG�d6e6e>�eGjdPe9d
df�eGjdUd
dg�e�r&Gdhdi�di�ZRGdjdk�dke(�ZSGdld�de/�ZTdSdS)o)�BaseManager�SyncManager�	BaseProxy�Token�N)�getpid)�
  5  format_exc�)�
  6  connection)�	reduction�get_spawning_popen�ProcessError)�pool)�process)�util)�get_context)�
shared_memoryFT�SharedMemoryManagercCstj|j|��ffS�N)�array�typecode�tobytes)�a�r��C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.10_3.10.2800.0_x64__qbz5n2kfra8p0\lib\multiprocessing\managers.py�reduce_array/�rcCsg|]
  7  }tti|����qSr)�type�getattr��.0�namerrr�
  8  <listcomp>3�r!)�items�keys�valuescCstt|�ffSr)�list��objrrr�rebuild_as_list5�r)c@s4eZdZdZdZdd�Zdd�Zdd�Zd	d
  9  �ZdS)rz3
 10      Type to uniquely identify a shared object
 11      ��typeid�address�idcCs||||_|_|_dSrr+)�selfr,r-r.rrr�__init__DszToken.__init__cCs|j|j|jfSrr+�r/rrr�__getstate__G�zToken.__getstate__cCs|\|_|_|_dSrr+�r/�staterrr�__setstate__JrzToken.__setstate__cCsd|jj|j|j|jfS)Nz %s(typeid=%r, address=%r, id=%r))�	__class__�__name__r,r-r.r1rrr�__repr__Ms�zToken.__repr__N)	r8�
 12  __module__�__qualname__�__doc__�	__slots__r0r2r6r9rrrrr>srrcCs4|�||||f�|��\}}|dkr|St||��)zL
 13      Send a message to manager using connection `c` and return response
 14      �#RETURN)�send�recv�convert_to_error)�cr.�
 15  methodname�args�kwds�kind�resultrrr�dispatchUs
 16  
 17  rHcCs^|dkr|S|dvr(t|t�std�||t|����|dkr$td|�St|�Std�|��S)N�#ERROR)�
 18  #TRACEBACK�#UNSERIALIZABLEz.Result {0!r} (kind '{1}') type is {2}, not strrKzUnserializable message: %s
 19  zUnrecognized message type {!r})�
 20  isinstance�str�	TypeError�formatr�RemoteError�
 21  ValueError)rFrGrrrrA_s
 22  
 23  ��rAc@seZdZdd�ZdS)rPcCsdt|jd�dS)NzM
 24  ---------------------------------------------------------------------------
 25  rzK---------------------------------------------------------------------------)rMrDr1rrr�__str__oszRemoteError.__str__N)r8r:r;rRrrrrrPnsrPcCs2g}t|�D]}t||�}t|�r|�|�q|S)z4
 26      Return a list of names of methods of `obj`
 27      )�dirr�callable�append)r(�tempr �funcrrr�all_methodsvs
 28  
 29  �rXcCsdd�t|�D�S)zP
 30      Return a list of names of methods of `obj` which do not start with '_'
 31      cSsg|]
 32  }|ddkr|�qS)r�_rrrrrr!�r"z"public_methods.<locals>.<listcomp>)rXr'rrr�public_methods�srZc@s�eZdZdZgd�Zdd�Zdd�Zdd�Zd	d
 33  �Zdd�Z	d
d�Z
 34  dd�Zdd�Zdd�Z
ee
ed�Zdd�Zdd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(S))�ServerzM
 35      Server class which runs in a process controlled by a manager object
 36      )	�shutdown�create�accept_connection�get_methods�
 37  debug_info�number_of_objects�dummy�incref�decrefcCsxt|t�std�|t|����||_t�|�|_t	|\}}||dd�|_
 38  |j
 39  j|_ddi|_i|_
i|_t��|_dS)Nz&Authkey {0!r} is type {1!s}, not bytes�)r-�backlog�0�Nr)rL�bytesrNrOr�registryr�AuthenticationString�authkey�listener_client�listenerr-�	id_to_obj�id_to_refcount�id_to_local_proxy_obj�	threading�Lock�mutex)r/rjr-rl�
 40  serializer�Listener�Clientrrrr0�s
 41  ��
 42  
 43  zServer.__init__c	Cs�t��|_|t��_zGtj|jd�}d|_|�	�z|j�
 44  �s*|j�d�|j�
 45  �rWntt
fy6YnwWtjtjkrKt�d�tjt_tjt_t�d�dStjtjkret�d�tjt_tjt_t�d�w)z(
 46          Run the server forever
 47          )�targetTrzresetting stdout, stderrrN)rr�Event�
 48  stop_eventr�current_process�_manager_server�Thread�accepter�daemon�start�is_set�wait�KeyboardInterrupt�
 49  SystemExit�sys�stdout�
 50  __stdout__r�debug�
 51  __stderr__�stderr�exit)r/r~rrr�
serve_forever�s2
 52  
 53  
 54  
 55  ����
 56  �
 57  zServer.serve_forevercCsF	z|j��}Wn	tyYqwtj|j|fd�}d|_|��q)NT�rxrD)rn�accept�OSErrorrrr}�handle_requestrr�)r/rB�trrrr~�s��zServer.acceptercCs:d}z*t�||j�t�||j�|��}|\}}}}||jvs&Jd|��t||�}Wnty:dt�f}Yn!wz
||g|�Ri|��}	WntyVdt�f}Ynwd|	f}z|�	|�WdSty�}
 58  z-z
 59  |�	dt�f�Wn	ty~Ynwt
 60  �d|�t
 61  �d|�t
 62  �d|
 63  �WYd}
 64  ~
 65  dSd}
 66  ~
 67  ww)Nz%r unrecognizedrJr>zFailure to send message: %rz ... request was %r� ... exception was %r)r	�deliver_challengerl�answer_challenger@�publicr�	Exceptionrr?r�info)r/rB�request�ignore�funcnamerDrErW�msgrG�errr�_handle_request�s<�����zServer._handle_requestcCsJzz|�|�Wn	tyYnwW|��dSW|��dS|��w)z)
 68          Handle a new connection
 69          N)r�r��close�r/�connrrrr��s���zServer.handle_requestcCs�t�dt��j�|j}|j}|j}|j�	��sdz�d}}|�}|\}}}	}
 70  z	||\}}}Wn&t
 71  yU}
zz
 72  |j|\}}}Wn	t
 73  yJ|
�wWYd}
~
nd}
~
ww||vretd|t
|�|f��t||�}z	||	i|
 74  ��}Wnty�}z
 75  d|f}WYd}~n*d}~ww|o�|�|d�}|r�|�|||�\}}t||j|�}d||ff}nd|f}Wn`ty�|dur�dt�f}n(z|j|}|||||g|	�Ri|
 76  ��}d|f}Wnty�dt�f}YnwYn&t�yt�dt��j�t�d	�Ynt�ydt�f}Ynwzz||�Wnt�y)|d
 77  t�f�YnwWn1t�y\}z$t�dt��j�t�d|�t�d
|�|��t�d�WYd}~nd}~ww|j�	�rdSdS)zQ
 78          Handle requests from the proxies in a particular process/thread
 79          z$starting server thread to service %rNz+method %r of %r object is not in exposed=%rrI�#PROXYr>rJz$got EOF -- exiting thread serving %rrrKzexception in thread serving %rz ... message was %rr�r)rr�rr�current_threadr r@r?rorzr��KeyErrorrq�AttributeErrorrrr��getr]rr-r�fallback_mapping�EOFErrorr�r�r�r�)r/r�r@r?rorCr(r��identrDrE�exposed�	gettypeid�ke�function�resr�r�r,ZridentZrexposed�tokenZ
fallback_funcrGrrr�serve_client�s���������
 80  ���
 81  �������������zServer.serve_clientcCs|Srr�r/r�r�r(rrr�fallback_getvalue?�zServer.fallback_getvaluecC�t|�Sr�rMr�rrr�fallback_strB�zServer.fallback_strcCr�r)�reprr�rrr�
fallback_reprEr�zServer.fallback_repr)rRr9�	#GETVALUEcCsdSrr�r/rBrrrrbNr�zServer.dummyc
 82  Cs�|j�;g}t|j���}|��|D]}|dkr1|�d||j|t|j|d�dd�f�qd�|�Wd�S1sAwYdS)zO
 83          Return some info --- useful to spot problems with refcounting
 84          rgz  %s:       refcount=%s
 85      %srN�K�
 86  )	rtr&rpr$�sortrUrMro�join)r/rBrGr$r�rrrr`Qs
 87  ���$�zServer.debug_infocCs
 88  t|j�S)z*
 89          Number of shared objects
 90          )�lenrpr�rrrraas
 91  zServer.number_of_objectscCs`z)zt�d�|�d�Wnddl}|��YW|j��dSW|j��dS|j��w)z'
 92          Shutdown this process
 93          z!manager received shutdown message�r>NrN)rr�r?�	traceback�	print_excrz�set)r/rBr�rrrr\hs
 94  �zServer.shutdowncOs|j�q|j|\}}}}|dur"|st|�dkrtd��|d}	n||i|��}	|dur1t|	�}|durLt|t�sDtd�|t	|����t
 95  |�t
 96  |�}dt|	�}
 97  t�
d||
 98  �|	t|�|f|j|
 99  <|
100  |jvrmd|j|
101  <Wd�n1swwY|�||
102  �|
103  t|�fS)z>
104          Create a new shared object and return its id
105          Nrz4Without callable, must have one non-keyword argumentrz,Method_to_typeid {0!r}: type {1!s}, not dictz%xz&%r callable returned object with id %r)rtrjr�rQrZrL�dictrNrOrr&r.rr�r�rorprc�tuple)r/rBr,rDrErTr��method_to_typeid�	proxytyper(r�rrrr]us:
106  ��
107  
108  ��
109  
110  ��z
Server.createcCst|j|jd�S)zL
111          Return the methods of the shared object indicated by token
112          r)r�ror.)r/rBr�rrrr_�szServer.get_methodscCs"|t��_|�d�|�|�dS)z=
113          Spawn a new thread to serve this connection
114          r�N)rrr�r r?r�)r/rBr rrrr^�s
115  
116  zServer.accept_connectioncCs�|j�Rz|j|d7<Wn5tyD}z)||jvr8d|j|<|j||j|<|j|\}}}t�d|�n|�WYd}~n
d}~wwWd�dSWd�dS1sXwYdS)Nrz&Server re-enabled tracking & INCREF %r)rtrpr�rqrorr�)r/rBr�r�r(r�r�rrrrc�s$
117  
118  ������
"�z
Server.increfcCs�||jvr||jvrt�d|�dS|j�2|j|dkr,td�||j||j|���|j|d8<|j|dkr@|j|=Wd�n1sJwY||jvryd|j|<t�d|�|j�
|j|=Wd�dS1srwYdSdS)NzServer DECREF skipping %rrz+Id {0!s} ({1!r}) has refcount {2:n}, not 1+r)NrNzdisposing of obj with id %r)rprqrr�rt�AssertionErrorrOro)r/rBr�rrrrd�s0
119  
120  
121  ����
122  
123  
124  
125  "��z
Server.decrefN)r8r:r;r<r�r0r�r~r�r�r�r�r�r�r�rbr`rar\r]r_r^rcrdrrrrr[�s2
126  Q�
$r[c@seZdZdgZdZdZdZdS)�State�valuerr�N)r8r:r;r=�INITIAL�STARTED�SHUTDOWNrrrrr��s
127  r�)�pickle�	xmlrpclibc@s�eZdZdZiZeZ		d"dd�Zdd�Zdd	�Z	d#dd�Z
128  e	
129  d#d
d��Zdd�Z
d$dd�Zdd�Zdd�Zdd�Zdd�Zedd��Zedd��Ze		d%d d!��ZdS)&rz!
130      Base class for managers
131      Nr�cCs\|dur	t��j}||_t�|�|_t�|_tj|j_	||_
132  t|\|_|_
|p*t�|_dSr)rr{rl�_addressrk�_authkeyr��_stater�r��_serializerrmZ	_Listener�_Clientr�_ctx)r/r-rlru�ctxrrrr0�s
133  
134  zBaseManager.__init__cCsb|jjtjkr&|jjtjkrtd��|jjtjkrtd��td�|jj���t|j	|j
135  |j|j�S)zX
136          Return server object with serve_forever() method and address attribute
137          �Already started server�Manager has shut down�Unknown state {!r})
r�r�r�r�r�rr�rOr[�	_registryr�r�r�r1rrr�
138  get_server�s�
139  �zBaseManager.get_servercCs8t|j\}}||j|jd�}t|dd�tj|j_dS)z>
140          Connect manager object to the server process
141          �rlNrb)	rmr�r�r�rHr�r�r�r�)r/rvrwr�rrr�connectszBaseManager.connectrc	Cs0|jjtjkr&|jjtjkrtd��|jjtjkrtd��td�|jj���|dur2t|�s2t	d��t
142  jdd�\}}|jj
t|�j|j|j|j|j|||fd�|_d	�d
143  d�|jjD��}t|�jd||j_|j��|��|��|_|��tj|j_tj|t|�j|j|j|j|j|jfd
d�|_ dS)z@
144          Spawn a server process for this manager object
145          r�r�r�Nzinitializer must be a callableF)�duplexr��:css�|]}t|�VqdSrr�)r�irrr�	<genexpr>0s�z$BaseManager.start.<locals>.<genexpr>�-r�rD�exitpriority)!r�r�r�r�r�rr�rOrTrNr	�Piper��Processr�_run_serverr�r�r�r��_processr��	_identityr8r r�r�r@r�Finalize�_finalize_managerr�r\)r/�initializer�initargs�reader�writerr�rrrr�s>�
146  ��
147  
148  
149  
150  ��zBaseManager.startc	Cs^t�tjtj�|dur||�|�||||�}|�|j�|��t�d|j�|�	�dS)z@
151          Create a server, report its address and run it
152          Nzmanager serving at %r)
153  �signal�SIGINT�SIG_IGN�_Serverr?r-r�rr�r�)	�clsrjr-rlrur�r�r��serverrrrr�BszBaseManager._run_servercOsl|jjtjksJd��|j|j|jd�}zt|dd|f||�\}}W|��n|��wt	||j|�|fS)zP
154          Create a new shared object; return the token and exposed tuple
155          zserver not yet startedr�Nr])
156  r�r�r�r�r�r�r�rHr�r)r/r,rDrEr�r.r�rrr�_createYszBaseManager._createcCs2|jdur|j�|�|j��sd|_dSdSdS)zC
157          Join the manager process (if it has been spawned)
158          N)r�r��is_alive�r/�timeoutrrrr�es
159  
160  
161  �zBaseManager.joincC�4|j|j|jd�}zt|dd�W|��S|��w)zS
162          Return some info about the servers shared objects and connections
163          r�Nr`�r�r�r�rHr�r�rrr�_debug_infon�zBaseManager._debug_infocCr�)z5
164          Return the number of shared objects
165          r�Nrar�r�rrr�_number_of_objectsxr�zBaseManager._number_of_objectscCsf|jjtjkr|��|jjtjkr1|jjtjkrtd��|jjtjkr(td��td�|jj���|S)NzUnable to start serverr�r�)	r�r�r�r�r�r�rr�rOr1rrr�	__enter__�s�zBaseManager.__enter__cC�|��dSr)r\�r/�exc_type�exc_val�exc_tbrrr�__exit__��zBaseManager.__exit__cCs�|��rYt�d�z|||d�}zt|dd�W|��n|��wWn	ty,Ynw|jdd�|��rYt�d�t|d�rYt�d	�|��|jdd�|��rYt�d
166  �t	j
167  |_ztj
|=WdStynYdSw)zQ
168          Shutdown the manager process; will be registered as a finalizer
169          z#sending shutdown message to managerr�Nr\g�?)r�zmanager still alive�	terminatez'trying to `terminate()` manager processz#manager still alive after terminate)r�rr�rHr�r�r��hasattrrr�r�r�r�_address_to_localr�)rr-rlr5r�r�rrrr��s2
170  �
171  
172  
173  
174  �zBaseManager._finalize_managercC�|jSr)r�r1rrrr-�szBaseManager.addressTc
175  s�d|jvr|j��|_�durt�|pt�dd�}|p t�dd�}|rFt|���D]\}}t|�tus9Jd|��t|�tusEJd|��q)|||�f|j�<|rc��fdd�}	�|	_	t
176  |�|	�dSdS)z9
177          Register a typeid with the manager type
178          r�N�	_exposed_�_method_to_typeid_z%r is not a stringcsft�d��|j�g|�Ri|��\}}�||j||j|d�}|j|j|jd�}t|dd|jf�|S)Nz)requesting creation of a shared %r object��managerrlr�r�rd)	rr�r�r�r�r�r-rHr.)r/rDrEr��exp�proxyr��r�r,rrrV�s�z"BaseManager.register.<locals>.temp)�__dict__r��copy�	AutoProxyrr&r#rrMr8�setattr)
179  r�r,rTr�r�r��
create_method�keyr�rVrrr�register�s&
180  
181  �
182  �
183  �zBaseManager.register)NNr�Nrhr)NNNNT)r8r:r;r<r�r[r�r0r�r�r��classmethodr�r�r�r�r�rr�staticmethodr��propertyr-rrrrrr�s6
184  �
185  	+�
186  	
187  
188  

189  
190  �rc@�eZdZdd�Zdd�ZdS)�ProcessLocalSetcCst�|dd��dS)NcS�|��Sr)�clearr'rrr�<lambda>�sz*ProcessLocalSet.__init__.<locals>.<lambda>)r�register_after_forkr1rrrr0�rzProcessLocalSet.__init__cCst|�dfSrh)rr1rrr�
191  __reduce__�rzProcessLocalSet.__reduce__N)r8r:r;r0r#rrrrr��rc@s�eZdZdZiZe��Z		ddd�Zdd�Z	d	ifd
192  d�Z
193  dd
�Zdd�Ze
dd��Zdd�Zdd�Zdd�Zdd�Zdd�ZdS)rz.
194      A base for proxies of shared objects
195      NTFc	Cs�tj�!tj�|jd�}|durt��t�f}|tj|j<Wd�n1s'wY|d|_|d|_	||_
196  |j
197  j|_||_
||_t|d|_||_|durYt�|�|_n|j
durd|j
j|_nt��j|_|rp|��t�|tj�dS)Nrr)r�_mutexr
198  r�r-r�ForkAwareLocalr�_tls�_idset�_tokenr.�_id�_managerr�rmr��_owned_by_managerrrkr�r{rl�_increfr"�_after_fork)	r/r�rurrlr�rc�
manager_ownedZ	tls_idsetrrrr0�s.��
199  
200  
201  
202  zBaseProxy.__init__cCsdt�d�t��j}t��jdkr|dt��j7}|j|jj	|j
203  d�}t|dd|f�||j_
dS)Nzmaking connection to manager�
204  MainThread�|r�r^)rr�rr{r rrr�r�r)r-r�rHr'r	)r/r r�rrr�_connects
205  
206  zBaseProxy._connectrcCs�z|jj}Wnty t�dt��j�|��|jj}Ynw|�	|j
207  |||f�|��\}}|dkr7|S|dkrm|\}}|jj
|jd}	|jj|_|	||j|j|j|d�}
208  |j|j|jd�}t|dd|jf�|
209  St||��)	zV
210          Try to call a method of the referent and return a copy of the result
211          z#thread %r does not own a connectionr>r������rr�Nrd)r'r	r�rr�rrr�r r2r?r*r@r+r�r,r)r-r�r�r�rHr.rA)r/rCrDrEr�rFrGr�r�r�rrrr�_callmethod%s2��
212  
213  �
214  zBaseProxy._callmethodcC�
215  |�d�S)z9
216          Get a copy of the value of the referent
217          r��r4r1rrr�	_getvalueCs
218  zBaseProxy._getvaluec	Cs�|jr
t�d|jj�dS|j|jj|jd�}t|dd|j	f�t�d|jj�|j
219  �|j	�|jo5|jj
}tj|tj|j|j||j|j
220  |jfdd�|_dS)Nz%owned_by_manager skipped INCREF of %rr�rcz	INCREF %r�
221  r�)r,rr�r)r.r�r-r�rHr*r(�addr+r�r�r�_decrefr'�_close)r/r�r5rrrr-Is
222  ��zBaseProxy._increfc
223  Cs�|�|j�|dus|jtjkrBzt�d|j�||j|d�}t|dd|jf�Wnt	yA}zt�d|�WYd}~nd}~wwt�d|j�|sbt
224  |d�rdt�dt��j
�|j��|`dSdSdS)Nz	DECREF %rr�rdz... decref failed %sz%DECREF %r -- manager already shutdownr	z-thread %r has no more proxies so closing conn)�discardr.r�r�r�rr�r-rHr�r	rrr�r r	r�)r�rlr5�tlsZidsetr�r�r�rrrr:]s$���
225  �zBaseProxy._decrefc
226  CsJd|_z|��WdSty$}zt�d|�WYd}~dSd}~ww)Nzincref failed: %s)r+r-r�rr�)r/r�rrrr.vs��zBaseProxy._after_forkcCsZi}t�dur|j|d<t|dd�r!|j|d<tt|j|j|ffStt|�|j|j|ffS)Nrl�_isautoFr�)	rr�rr�RebuildProxyrr)r�r�r/rErrrr#~s
227  
228  
229  ��zBaseProxy.__reduce__cCrr)r7)r/�memorrr�__deepcopy__�r�zBaseProxy.__deepcopy__cCsdt|�j|jjt|�fS)Nz<%s object, typeid %r at %#x>)rr8r)r,r.r1rrrr9�s�zBaseProxy.__repr__cCs4z|�d�WStyt|�dd�dYSw)zV
230          Return representation of the referent (or a fall-back if that fails)
231          r9Nr3z; '__str__()' failed>)r4r�r�r1rrrrR�s
232  �zBaseProxy.__str__�NNNTF)r8r:r;r<r
233  r�ForkAwareThreadLockr%r0r2r4r7r-rr:r.r#rBr9rRrrrrr�s$
234  �)	
235  
rcCs�tt��dd�}|r*|j|jkr*t�d|�d|d<|j|jvr*|j|j|j|j<|�	dd�o8tt��dd�}|||fd|i|��S)	z5
236      Function used for unpickling proxy objects.
237      r|Nz*Rebuild a proxy owned by manager, token=%rTr/rc�_inheritingF)
238  rrr{r-rr�r.rqro�pop)rWr�rurEr�rcrrrr?�s
239  
240  ��r?cCsnt|�}z|||fWStyYnwi}|D]}td||f|�qt|tf|�}||_||||f<|S)zB
241      Return a proxy type whose methods are given by `exposed`
242      zOdef %s(self, /, *args, **kwds):
243          return self._callmethod(%r, args, kwds))r�r��execrrr)r r��_cache�dic�meth�	ProxyTyperrr�
MakeProxyType�s"���rLcCs�t|d}|dur%||j|d�}zt|dd|f�}W|��n|��w|dur0|dur0|j}|dur9t��j}td|j	|�}	|	||||||d�}
244  d|
245  _
246  |
247  S)z*
248      Return an auto-proxy for `token`
249      rNr�r_z
AutoProxy[%s])rrlrcr/T)rmr-rHr�r�rr{rlrLr,r>)r�rurrlr�rcr/r�r�rKrrrrr�s 
250  
251  �rc@r)�	NamespacecKs|j�|�dSr)r�updater@rrrr0�r3zNamespace.__init__cCsZt|j���}g}|D]\}}|�d�s|�d||f�q|��d|jjd�|�fS)NrYz%s=%rz%s(%s)z, )	r&rr#�
252  startswithrUr�r7r8r�)r/r#rVr r�rrrr9�s
253  �zNamespace.__repr__N)r8r:r;r0r9rrrrrM�r$rMc@s8eZdZddd�Zdd�Zdd�Zdd	�Zeee�Zd
254  S)�ValueTcC�||_||_dSr)�	_typecode�_value)r/rr��lockrrrr0��
255  zValue.__init__cCrr�rSr1rrrr��sz	Value.getcCs
256  ||_dSrrV�r/r�rrrr���
257  z	Value.setcCsdt|�j|j|jfS)Nz
258  %s(%r, %r))rr8rRrSr1rrrr9�szValue.__repr__N�T)	r8r:r;r0r�r�r9rr�rrrrrP�s
259  rPcCst�||�Sr)r)r�sequencerTrrr�Array�rr[c@s8eZdZdZdd�Zdd�Zdd�Zdd	�Zd
260  d�ZdS)
�
IteratorProxy)�__next__r?�throwr�cC�|Srrr1rrr�__iter__r�zIteratorProxy.__iter__cG�|�d|�S)Nr]r6�r/rDrrrr]
261  rzIteratorProxy.__next__cGra)Nr?r6rbrrrr?rzIteratorProxy.sendcGra)Nr^r6rbrrrr^rzIteratorProxy.throwcGra)Nr�r6rbrrrr�rzIteratorProxy.closeN)	r8r:r;rr`r]r?r^r�rrrrr\sr\c@s2eZdZdZddd�Zdd�Zdd	�Zd
262  d�ZdS)
�
AcquirerProxy)�acquire�releaseTNcCs"|dur|fn||f}|�d|�S�Nrdr6)r/�blockingr�rDrrrrdszAcquirerProxy.acquirecCr5�Nrer6r1rrrrerXzAcquirerProxy.releasecCr5rfr6r1rrrrrXzAcquirerProxy.__enter__cCr5rhr6rrrrrrXzAcquirerProxy.__exit__)TN)r8r:r;rrdrerrrrrrrcs
263  rcc@s6eZdZdZddd�Zd
dd�Zdd	�Zdd
264  d�ZdS)�ConditionProxy)rdrer��notify�
265  notify_allNcC�|�d|f�S�Nr�r6r�rrrr�#r*zConditionProxy.waitrcCrl)Nrjr6)r/�nrrrrj%r*zConditionProxy.notifycCr5)Nrkr6r1rrrrk'rXzConditionProxy.notify_allcCsj|�}|r|S|durt��|}nd}d}|s3|dur)|t��}|dkr)	|S|�|�|�}|r|S)Nr)�time�	monotonicr�)r/�	predicater�rG�endtime�waittimerrr�wait_for)s"
266  ��zConditionProxy.wait_forr)r)r8r:r;rr�rjrkrtrrrrri!s
267  
268  ric@s2eZdZdZdd�Zdd�Zdd�Zdd	d
269  �ZdS)�
270  EventProxy)r�r�r r�cCr5)Nr�r6r1rrrr�>rXzEventProxy.is_setcCr5�Nr�r6r1rrrr�@rXzEventProxy.setcCr5)Nr r6r1rrrr BrXzEventProxy.clearNcCrlrmr6r�rrrr�Dr*zEventProxy.waitr)r8r:r;rr�r�r r�rrrrru<sruc@sNeZdZdZddd�Zdd�Zdd�Zed	d
271  ��Zedd��Z	ed
d��Z
272  dS)�BarrierProxy)�__getattribute__r��abort�resetNcCrlrmr6r�rrrr�Jr*zBarrierProxy.waitcCr5)Nryr6r1rrrryLrXzBarrierProxy.abortcCr5)Nrzr6r1rrrrzNrXzBarrierProxy.resetcC�|�dd�S)Nrx)�partiesr6r1rrrr|P�zBarrierProxy.partiescCr{)Nrx)�	n_waitingr6r1rrrr~Sr}zBarrierProxy.n_waitingcCr{)Nrx)�brokenr6r1rrrrVr}zBarrierProxy.brokenr)r8r:r;rr�ryrzrr|r~rrrrrrwHs
273  
274  
275  rwc@s(eZdZdZdd�Zdd�Zdd�ZdS)	�NamespaceProxy)rx�__setattr__�__delattr__cCs0|ddkrt�||�St�|d�}|d|f�S)NrrYr4rx)�objectrx�r/r�
276  callmethodrrr�__getattr__]�zNamespaceProxy.__getattr__cCs4|ddkr
t�|||�St�|d�}|d||f�S)NrrYr4r�)r�r�rx)r/rr�r�rrrr�bszNamespaceProxy.__setattr__cCs0|ddkrt�||�St�|d�}|d|f�S)NrrYr4r�)r�r�rxr�rrrr�gr�zNamespaceProxy.__delattr__N)r8r:r;rr�r�r�rrrrr�[s
277  r�c@s4eZdZdZdd�Zdd�Zeee�Zee	j
278  �ZdS)�
279  ValueProxy)r�r�cCr5)Nr�r6r1rrrr�prXzValueProxy.getcCrlrvr6rWrrrr�rr*zValueProxy.setN)r8r:r;rr�r�rr�r�types�GenericAlias�__class_getitem__rrrrr�ns
280  r��
BaseListProxy)�__add__�__contains__�__delitem__�__getitem__�__len__�__mul__�__reversed__�__rmul__�__setitem__rU�count�extend�index�insertrF�remove�reverser��__imul__c@r)�	ListProxycC�|�d|f�|S)Nr�r6rWrrr�__iadd__��zListProxy.__iadd__cCr�)Nr�r6rWrrrr��r�zListProxy.__imul__N)r8r:r;r�r�rrrrr�sr��	DictProxy)r�r�r�r`r�r�r rr�r#r$rF�popitem�
281  setdefaultrNr%r`�Iterator�
282  ArrayProxy)r�r�r��	PoolProxy)�apply�apply_asyncr��imap�imap_unorderedr��map�	map_async�starmap�
starmap_asyncr�AsyncResult)r�r�r�r�r�c@r)r�cCr_rrr1rrrr�r�zPoolProxy.__enter__cCrr)rrrrrr�rzPoolProxy.__exit__N)r8r:r;rrrrrrr��r$c@seZdZdZdS)ra(
283      Subclass of `BaseManager` which supports a number of shared object types.
284  
285      The types registered are those intended for the synchronization
286      of threads, plus `dict`, `list` and `Namespace`.
287  
288      The `multiprocessing.Manager()` function creates started instances of
289      this class.
290      N)r8r:r;r<rrrrr�sr�Queue�
JoinableQueueryrs�RLock�	Semaphore�BoundedSemaphore�	Condition�Barrier�Poolr&r�)r�r)rc@sLeZdZdZgfdd�Zdd�Zdd�Zdd	�Zd
291  d�Zdd
�Z	dd�Z
292  dS)�_SharedMemoryTrackerz+Manages one or more shared memory segments.cCrQr�Zshared_memory_context_name�
segment_names)r/r r�rrrr0�rUz_SharedMemoryTracker.__init__cCs(t�d|�dt����|j�|�dS)z6Adds the supplied shared memory block name to tracker.zRegister segment � in pid N)rr�rr�rU�r/�segment_namerrr�register_segment�sz%_SharedMemoryTracker.register_segmentcCsBt�d|�dt����|j�|�t�|�}|��|��dS)z�Calls unlink() on the shared memory block with the supplied name
293              and removes it from the list of blocks being tracked.zDestroy segment r�N)	rr�rr�r�r�SharedMemoryr��unlink)r/r��segmentrrr�destroy_segment�s
294  
295  z$_SharedMemoryTracker.destroy_segmentcCs"|jdd�D]}|�|�qdS)z<Calls destroy_segment() on all tracked shared memory blocks.N)r�r�r�rrrr��s�z_SharedMemoryTracker.unlinkcCs(t�d|jj�dt����|��dS)NzCall z.__del__ in )rr�r7r8rr�r1rrr�__del__�sz_SharedMemoryTracker.__del__cCs|j|jfSrr�r1rrrr2�rz!_SharedMemoryTracker.__getstate__cCs|j|�dSr)r0r4rrrr6�r*z!_SharedMemoryTracker.__setstate__N)r8r:r;r<r0r�r�r�r�r2r6rrrrr��s	r�c@sJeZdZejgd�Zdd�Zdd�Zdd�Zdd	�Zd
296  d�Z	dd
�Z
297  dS)�SharedMemoryServer)�
track_segment�release_segment�
list_segmentscOs`tj|g|�Ri|��|j}t|t�rt�|�}td|�dt����|_	t
298  �dt����dS)NZshm_rYz"SharedMemoryServer started by pid )r[r0r-rLri�os�fsdecoder�r�shared_memory_contextrr�)r/rD�kwargsr-rrrr0�s
299  
300  �zSharedMemoryServer.__init__cOs:t|j|dd�r|j|d<tj|||g|�Ri|��S)z�Create a new distributed-shared object (not backed by a shared
301              memory block) and return its id to be used in a Proxy Object.r3Z_shared_memory_proxyr�)r	rjr�r[r])r/rBr,rDr�rrrr]s
302  zSharedMemoryServer.createcCs|j��t�||�S)zACall unlink() on all tracked shared memory, terminate the Server.)r�r�r[r\r�rrrr\s
303  zSharedMemoryServer.shutdowncC�|j�|�dS)z?Adds the supplied shared memory block name to Server's tracker.N)r�r��r/rBr�rrrr�sz SharedMemoryServer.track_segmentcCr�)z�Calls unlink() on the shared memory block with the supplied name
304              and removes it from the tracker instance inside the Server.N)r�r�r�rrrr�sz"SharedMemoryServer.release_segmentcCs|jjS)zbReturns a list of names of shared memory blocks that the Server
305              is currently tracking.)r�r�r�rrrr�sz SharedMemoryServer.list_segmentsN)r8r:r;r[r�r0r]r\r�r�r�rrrrr��s�
306  
307  r�c@s<eZdZdZeZdd�Zdd�Zdd�Zdd	�Z	d
308  d�Z
309  dS)
ra�Like SyncManager but uses SharedMemoryServer instead of Server.
310  
311          It provides methods for creating and returning SharedMemory instances
312          and for creating a list-like object (ShareableList) backed by shared
313          memory.  It also provides methods that create and return Proxy Objects
314          that support synchronization across processes (i.e. multi-process-safe
315          locks and semaphores).
316          cOsTtjdkrddlm}|��tj|g|�Ri|��t�|j	j
317  �dt����dS)N�posixr)�resource_trackerz created by pid )r�r �r��ensure_runningrr0rr�r7r8r)r/rDr�r�rrrr0/s
318  
319  zSharedMemoryManager.__init__cCst�|jj�dt����dS)Nz.__del__ by pid )rr�r7r8rr1rrrr�;szSharedMemoryManager.__del__cCsd|jjtjkr&|jjtjkrtd��|jjtjkrtd��td�|jj���|�|j	|j
320  |j|j�S)z@Better than monkeypatching for now; merge into Server ultimatelyz"Already started SharedMemoryServerz!SharedMemoryManager has shut downr�)
r�r�r�r�r�rr�rOr�r�r�r�r�r1rrrr�?s��zSharedMemoryManager.get_servercCs�|j|j|jd��/}tjdd|d�}zt|dd|jf�Wnty/}z|��|�d}~wwWd�|S1s;wY|S)zoReturns a new SharedMemory instance with the specified size in
321              bytes, to be tracked by the manager.r�NT)r]�sizer�)	r�r�r�rr�rHr �
BaseExceptionr�)r/r�r�Zsmsr�rrrr�Ls���
322  ��z SharedMemoryManager.SharedMemorycCs�|j|j|jd��.}t�|�}zt|dd|jjf�Wnty.}z|j�	�|�d}~wwWd�|S1s:wY|S)z�Returns a new ShareableList instance populated with the values
323              from the input sequence, to be tracked by the manager.r�Nr�)
324  r�r�r�r�
ShareableListrH�shmr r�r�)r/rZr��slr�rrrr�Xs
325  
326  ���
327  ��z!SharedMemoryManager.ShareableListN)r8r:r;r<r�r�r0r�r�r�r�rrrrr#s	
rCrY)U�__all__r�rrr�r�queueror�r�rr�rr�r	�contextr
328  rrr
rrrr�ImportError�	HAS_SHMEMrUrr�
329  view_typesr&r)�	view_typer�rrHrAr�rPrXrZr[r�rvrw�XmlListener�	XmlClientrmrr�rrr?rLrrMrPr[r\rcrirurwr�r�r�r�r�r
r��
BasePoolProxyr�rr�ryrsr�r�r�r�r�r�r�r�r�rrrrr�<module>s�
330  �
331  
332  
333  P
334  
335  �	w
336  4
337  �
338  

339  
340  	�
341  
342  �
343  
344  �%-�