Your IP : 216.73.216.196


Current Path : /opt/alt/python310/lib64/python3.10/test/__pycache__/
Upload File :
Current File : //opt/alt/python310/lib64/python3.10/test/__pycache__/_test_multiprocessing.cpython-310.pyc

o

0�i��@s@	ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z e�!d	�Z"e�#�ddl$Z$ddl%Z&ddl'Z&ddl(Z&ddl)Z&ddl*Z&ddl+Z&dd
l&m,Z,zddl&m-Z-e-j.Z/Wne0y�dZ/Ynwzdd
l1m2Z2m3Z3dZ4Wne0y�dZ4Ynwz
ddl&m5Z5dZ6Wne0y�dZ6Ynwzddl7Z7Wne0�ydZ7Ynwej8dd��re�9d��dd�Z:dd�Z;dd�Z<e	j=dk�r5ddl&m>Z>dd�Z?e,j@ZAdZBdZCeC�rEd\ZDZEZFnd\ZDZEZFeGe"dd�ZHejId kZJdd!l%mKZKd"d#�ZLze	�Md$�ZNWnd%ZNYd&d'gZOzdd(lPmQZQmRZRmSZSmTZTWne0�y�eUZQdZRZSZTYnwd)d*�ZVGd+d,�d,eU�ZWGd-d.�d.eU�ZXd/d0�ZYGd1d2�d2�ZZGd3d4�d4eX�Z[Gd5d6�d6e&j\�Z]Gd7d8�d8eX�Z^d9d:�Z_d;d<�Z`Gd=d>�d>eX�ZaGd?d@�d@eX�ZbGdAdB�dBeX�ZcGdCdD�dDeX�ZdGdEdF�dFeX�ZeGdGdH�dHeU�ZfdIdJ�ZgGdKdL�dLeU�ZhGdMdN�dNeU�ZiGdOdP�dPeX�ZjGdQdR�dReX�ZkGdSdT�dTeX�ZlGdUdV�dVeX�Zmd�dXdY�ZndZd[�Zod\d]�Zpd^d_�ZqGd`da�daeU�ZrGdbdc�dces�Ztddde�ZuGdfdg�dgeX�Zvdhdi�Zwdjdk�ZxGdldm�dmeX�ZyGdndo�doeX�Zzddpl)m{Z{m|Z|m}Z}Gdqdr�dreU�Z~dsdt�ZGdudv�dve|�Z�Gdwdx�dxe{�Z�e�j�dye~dz�e�j�d{e~d|d}�e�j�dtee�d~�Gdd��d�eX�Z�e���Z�d�d��Z�Gd�d��d�e{�Z�e�j�d�e�dz�Gd�d��d�e{�Z�e���d��d�Z�Gd�d��d�eX�Z�e��d��Gd�d��d�eX��Z�e:d��Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�e��e/d��e��d��Gd�d��d�eX���Z�Gd�d��d�eX�Z�Gd�d��d�eQ�Z�Gd�d��d�eX�Z�e��e6d��e��d��Gd�d��d�eX���Z�Gd�d��d�eX�Z�Gd�d��d�ej��Z�Gd�d��d�eX�Z�Gd�d��d�eX�Z�Gd�d��d�ej��Z�e��d��Gd�d��d�ej���Z�d�d��Z�e��d��Gd�d��d�ej���Z�d�d��Z�d�d��Z�d�d��Z�d�d��Z�Gd�d��d�eU�Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�d��d�ej��Z�Gd�dÄd�ej��Z�Gd�dńd�ej��Z�Gd�dDŽd�ej��Z�Gd�dɄd�ej��Z�Gd�d˄d�ej��Z�Gd�d̈́d�ej��Z�Gd�dτd�ej��Z�e��ejId kdСGd�d҄d�ej���Z�Gd�dԄd�ej��Z�Gd�dքd�ej��Z�e��d��Gd�d؄d�ej���Z�Gd�dڄd�ej��Z�Gd�d܄d�ej��Z�Gd�dބd�eU�Z�Gd�d�d�e��Z�Gd�d�d�e��Z�Gd�d�d�e��Z�d�d�Z�e��e�e"d�d�e��ejId�kd�Gd�d�d�ej����Z�dS)��N)�support)�hashlib_helper)�
import_helper)�	os_helper)�
socket_helper)�threading_helper)�warnings_helper�_multiprocessing)�util)�	reductionF)�Value�copyT)�
shared_memory)�addressz(libasan has a pthread_create() dead lockcC�
|�d�S)N�latin)�encode)�s�r�A/opt/alt/python310/lib64/python3.10/test/_test_multiprocessing.pyrS�
rcCs&t|tjj�r|��|��dSdS�N)�
isinstance�multiprocessing�queues�Queue�close�join_thread��queuerrr�close_queueWs�r cCst�|�dSr)rr)�processrrr�join_process]sr"�posix)�resource_trackercCstj||�dSr)r$�_CLEANUP_FUNCS)�name�rtyperrr�_resource_unlinkf�r(皙�����?)g=
ףp=�?gffffff�?gffffff�?)r*r*r*ZHAVE_BROKEN_SEM_GETVALUE�win32��waitcCs |dur
|dkr
d}t|g|�S)N�r,)Zhandle�timeoutrrr�wait_for_handle�sr0�SC_OPEN_MAX��__main__z$test.test_multiprocessing_forkserver)�	Structure�c_int�c_double�
c_longlongc	CsNd}zt�d�}WnttfyYdSw|dks||kr dSt�d|��)zACheck that the system supports enough semaphores to run the test.r2�SC_SEM_NSEMS_MAXN���zHThe OS doesn't support enough semaphores to run the test (required: %d).)�os�sysconf�AttributeError�
ValueError�unittest�SkipTest)Z	nsems_minZnsemsrrr�check_enough_semaphores�s��r@c@�eZdZdd�Zdd�ZdS)�
TimingWrappercC�||_d|_dSr)�func�elapsed)�selfrDrrr�__init__��
zTimingWrapper.__init__cOs:t��}z|j|i|��Wt��||_St��||_wr)�time�	monotonicrDrE)rF�args�kwds�trrr�__call__�s zTimingWrapper.__call__N��__name__�
__module__�__qualname__rGrNrrrrrB�srBc@s,eZdZdZdd�Zdd�Zdd�ZeZdS)	�BaseTestCase)�	processes�manager�threadscCstr|�||d�dSdS�N�)�
CHECK_TIMINGS�assertAlmostEqual�rF�a�brrr�assertTimingAlmostEqual�s�z$BaseTestCase.assertTimingAlmostEqualcGs.z||�}Wn
tyYdSw|�||�Sr)�NotImplementedError�assertEqual)rF�valuerDrK�resrrr�assertReturnsIfImplemented�s�z'BaseTestCase.assertReturnsIfImplementedcG�td��)Nz#shouldn't try to pickle a test case)r_)rFrKrrr�
__reduce__��zBaseTestCase.__reduce__N)rPrQrR�
ALLOWED_TYPESr^rcre�
__reduce_ex__rrrrrS�s
rScCsZz|��WSty,z|jWYSty+z|jWYYSty*t�wwwr)�	get_valuer<Z_Semaphore__valueZ_valuer_�rFrrrri�s
���ric@�eZdZdd�ZdS)�
DummyCallablecCst|t�sJ�|�d�dS�N�)rrl�put)rF�q�crrrrN�szDummyCallable.__call__N)rPrQrRrNrrrrrl��rlc@s�eZdZdZdd�Zdd�Zedd��Zdd	�Zed
d��Z	dd
�Z
edd��Zedd��Zdd�Z
e�ejd�dd��Zedd��Zedd��Zedd��Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zed'd(��Zd)d*�Zed+d,��Zd-d.�ZedPd1d2��Zd3d4�Z d5d6�Z!d7d8�Z"ed9d:��Z#d;d<�Z$ed=d>��Z%d?d@�Z&eifdAdB��Z'dCdD�Z(dEdF�Z)edQdHdI��Z*dJdK�Z+dLdM�Z,dNdO�Z-d0S)R�_TestProcess�rTrVcCs�|jdkr|�d�|j��|��}|j}|�|���|�|j�|�|t	�|�t
|�dk�|�|jt
���|�|jd�dS)NrV�test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenr`Zidentr:�getpid�exitcode)rF�currentrzrrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|�d�|j��|j|jd�}|�|j|��j�|j|jdd�}|�|j�|j|jdd�}|�	|j�dS)NrVru��targetT�r�r}F)
rvrwrx�Process�_testr`r}ryr{�assertFalse)rFZproc0Zproc1�proc2rrr�test_daemon_arguments
z!_TestProcess.test_daemon_argumentcOsV|��}|�|�|�|�|�|j�|jdkr)|�t|j��|�|j�dSdS)NrV)ryror&rvrrz�pid)�clsrprKrLr�rrrr�
s


�z_TestProcess._testcCs�|jdkr|�d�|j��|�|���|jdd�\}}|j|j|fd�}|��|�	�|�
�\}}|�||��j
�|�|t���|�||��j�dS)NrVruF�Zduplex�r�rK)rvrwrx�assertIsNone�parent_process�Piper��_test_send_parent_process�start�join�recvr`ryr�r:r�r&)rF�rconn�wconn�pZ
parent_pid�parent_namerrr�test_parent_process_attributess
z+_TestProcess.test_parent_process_attributescCs&ddlm}|�|�j|�jg�dS)Nr�r�)�multiprocessing.processr��sendr�r&�r�r�r�rrrr�&sz&_TestProcess._test_send_parent_processcCs�|jdkr|�d�|j��|jdd�\}}|j|j|fd�}|��|jtj	d�s.t
d��|��}|�|d�|�
�|��|jtj	d�sKt
d��|��}|�|d	�dS)
NrVruFr�r��r/z(Could not communicate with child process�alive�	not alive)rvrwrxr�r��_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�r`�	terminater�)rFr�r�r�Zparent_process_statusrrr�test_parent_process+s"
�z _TestProcess.test_parent_processcCs(|j|j|fd�}|��t�d�dS)Nr�i,)r��_test_report_parent_statusr�rI�sleep)r�r�r�rrrr�Dsz,_TestProcess._test_create_grandchild_processcCsVddlm}|�|���rdnd�|�jtjd�|�|���r&d�dSd�dS)Nrr�r�r�r�)r�r�r�r|r�r�
SHORT_TIMEOUTr�rrrr�Js"z'_TestProcess._test_report_parent_statuscCs�|�d�}|��}|ddf}ddd�}d}|j|j|||d�}d|_|��}|jd	kr3|�|j|j�|�|�	�d
�|�|jd�|�
||���|�t
|���tu�|�|jd�|��|�|jd�|�|�	�d�|�||���|�|��|dd��|�|��|�|�|��|j�|jd	kr�|�|��|j�|�|��|j�|��|�|jd�|�|�	�d
�|�
||���t|�dS)NrX��gR���Q@)�helloZbyeZSomeProcess)r�rK�kwargsr&TrVFr)r�Eventr�r�r}ryrvr`rzr|�assertNotIn�active_childrenr{�type�listr�r��assertIn�getr&r�r�r )rFrp�erKr�r&r�r�rrr�test_processQs@



�

z_TestProcess.test_processzneeds native_idcCsr|jdkr|�d�|j��t��j}|�d�}|j|j|fd�}|�	�|�
�}|��t|�|�
||�dS)NrVrurXr�)rvrwrx�	threading�main_thread�	native_idrr��"_test_process_mainthread_native_idr�r�r�r �assertNotEqual)rFZcurrent_mainthread_native_idrpr�Zchild_mainthread_native_idrrr�!test_process_mainthread_native_idys


z._TestProcess.test_process_mainthread_native_idcCst��j}|�|�dSr)r�r�r�ro)r�rpZmainthread_native_idrrrr���
z/_TestProcess._test_process_mainthread_native_idcC�t�d�dS)N�d�rIr��r�rrr�_sleep_some��z_TestProcess._sleep_somecCst�|�dSrr�)r��delayrrr�_test_sleep�r�z_TestProcess._test_sleepc
s�|jdkr|�d�|j��|j|jd��d�_���|����d�|�	�|�
��|��jd�t�j
�}|�|d�d�|�|jd�|����d�|�|d�d�|�|jd�|����d�t�d�|��ttd	�r��fd
d�}t�tj|�}zt�d�|�|�d�Wt�d�t�tj|�nt�d�t�tj|�w|�|�d�|�|jd�|����d
�|��|�
����
��jS)NrVrur�Trr.r9rX�alarmcstd���)Nzjoin took too long: %s��RuntimeError�rK�r�rr�handler��z+_TestProcess._kill_process.<locals>.handler�
F)rvrwrxr�r�r}r�r`r|r�r�r�rBr�r^rErIr��hasattr�signal�SIGALRMr�r�)rFZmethr�r�Zold_handlerrr�r�
_kill_process�sB






�z_TestProcess._kill_processcC�0|�tjj�}tjdkr|�|tj�dSdS�N�nt)	r�rr�r�r:r&r`r��SIGTERM�rFr�rrr�test_terminate��
�z_TestProcess.test_terminatecCr�r�)	r�rr��killr:r&r`r��SIGKILLr�rrr�	test_kill�r�z_TestProcess.test_killcCsHzt��}Wntyd}Ynw|�t|�tu�|�|dk�dSrW)r�	cpu_countr_r{r��int)rFZcpusrrr�test_cpu_count�s�z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS�Nr�T)
r`r�r�r�r�rIr��DELTAr�r}r�r�r��rFr�rrr�test_active_children�sz!_TestProcess.test_active_childrencCsV|�|�t|�dkr'td�D]}|j|j|||gfd�}|��|��qdSdS)Nr�r�)r�r��ranger��_test_recursionr�r�)r�r��id�ir�rrrr��s
�
�z_TestProcess._test_recursioncCs~|jdd�\}}|�|g�t�t�g}|��r$|�|���|��sgdgddgddgdgddgddgg}|�||�dS)NFr�rrX)	r�r�rIr�r�r��appendr�r`)rFr�r��result�expectedrrr�test_recursion�s 
��	z_TestProcess.test_recursioncC�|�d�dS)N�$@r,�r��eventrrr�_test_sentinelr�z_TestProcess._test_sentinelcCs�|jdkr|�d�|j��|��}|j|j|fd�}|�t��|jWd�n1s.wY|�	�|�
|j�|j}|�|t
�|�t|dd��|��|��|�t|dd��dS)NrVrur�r.r�rX)rvrwrxr�r�r��assertRaisesr=�sentinelr��
addCleanupr�r~r�r�r0�setr{)rFr�r�r�rrr�
test_sentinels
�z_TestProcess.test_sentinelrNcCs|dur|��t�|�dSr)r��sys�exit)r��rcrprrr�_test_closesz_TestProcess._test_closecCs�|jdkr|�d�|j��|��}|j|jd|id�}d|_|��|�|�	�d�|�
t��|��Wd�n1s?wY|�
d�|��|�|�	�d�|�|jd�|��|�
t��|�	�Wd�n1stwY|�
t��|��Wd�n1s�wY|�
t��|��Wd�n1s�wY|��t�|�}~t��|�|�d�t|�dS)NrVrurp)r�r�TFr)rvrwrxrr�r�r}r�r`r|r�r=rror�r�r��weakref�ref�gc�collect�assertIsr )rFrpr��wrrrr�
test_close"s<

�

�
�
�
z_TestProcess.test_closecs(�jdkr��d��j��t��}|dkrdnd}�fdd�t|�D�}|D]}|��q'|D]}t|�q0|D]	}��|j	d�q9�fd	d�t|�D�}|D]}|��qPt
�d
�|D]}|��q^|D]}t|�qgt
jdkr�tjg}tjdkr�|�tj�|D]}��|j	|�q�dSdS)
NrVru�spawnrnr�csg|]
}�j�jdd��qS))�{�G�z�?r�)r�r���.0r�rjrr�
<listcomp>Js�z4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]	}�j�jd��qS)r�)r�r�rrjrrrSs����MbP?r��darwin)rvrwrxr�get_start_methodr�r�r"r`r�rIr�r�r:r&r�r�r��platformr�r�r�)rF�sm�N�procsr�Z	exitcodesrrjr�test_many_processesBs>

�


�






�z _TestProcess.test_many_processescCsnt�}t�|�}|��}|j|||fd�}~|��|��t��|�	|�d�|�
|��d�t|�dS)Nr�rn)
rlr�r�rr�r�r�r�r�rr`r�r )rFrqrrpr�rrr�test_lose_target_refes
z!_TestProcess.test_lose_target_refcCs|�t���|��dSr)rorZfd_countr-)rF�evtrprrr�_test_child_fd_inflationr�z%_TestProcess._test_child_fd_inflationc	s��jdkr��d��j��t��}|dkr��d�|��d}�����������fdd�t|�D�}|D]}|��q7z*�fdd�t|�D�}��	t
t|��d|�W���|D]}|��q\t
��dS���|D]}|��qot
��w)	NrVru�forkrncs g|]}�j�j��fd��qS�r�)r�rr�rrprFrrr�s�z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c�g|]}����qSr�r�r�rprrr��rX)rvrwrxrr
r�rr�r�r`r�r�r�r )rFrr
rr�Z	fd_countsrrr�test_child_fd_inflationws0
�

�

z$_TestProcess.test_child_fd_inflationcs>�fdd�}�fdd�}tj|d���tj|dd���dS)Nc�t�d����dS)N��?�rIr�r�r�rrr�func1��
z2_TestProcess._test_wait_for_threads.<locals>.func1cr)N�)rIr��clearrrrr�func2�r!z2_TestProcess._test_wait_for_threads.<locals>.func2r�Tr�)r��Threadr�)rFrr r$rrr�_test_wait_for_threads�sz#_TestProcess._test_wait_for_threadscCsX|jdkr|�d�|j��|��}|j|j|fd�}|��|��|�|�	��dS)NrVrur�)
rvrwrxr�r�r&r�r�r{�is_set)rFr�procrrr�test_wait_for_threads�s
z"_TestProcess.test_wait_for_threadscCsT|��D]\}}|dkrt��}|��n|dksJ�d}tt|d�q|��dS)Nr�remove)�items�io�StringIOr�setattrr�r�)rFrZbreak_std_streams�stream_name�action�streamrrr�_test_error_on_stdio_flush�s
z'_TestProcess._test_error_on_stdio_flushcCs�t��dg}|d��dD]D}|D]?}tt|�}tt||�z+|��}|j|j|fd�}|�	�|�
�|�|���|�
|jd�Wtt||�qtt||�wqdS)Nr��stdout�stderrr�)r,r-r�getattrr�r.r�r�r2r�r�r{r'r`r�)rFZstreamsr/r1�
old_streamrr(rrr�test_error_on_stdio_flush_1�s$
���z(_TestProcess.test_error_on_stdio_flush_1cCs�dD]A}dD]<}tt|�}z.|��}|j|j|||ifd�}|��|��|�|���|�	|j
d�Wtt||�qtt||�wqdS)Nr3)rr*r�r)r6r�r�r�r2r�r�r{r'r`r�r.)rFr/r0r7rr(rrr�test_error_on_stdio_flush_2�s

���z(_TestProcess.test_error_on_stdio_flush_2r.cCst�|�|��dSrr)rFrr�rrr�_sleep_and_set_event��
z!_TestProcess._sleep_and_set_eventc
Cs|jdkr|�d�|j��t��}|dkr|�d�|��ddlm}|��d}|��}|j	|j
||fd�}|��|j}t
�||�t�|d�|��}|j	|j
|fd�}	|	��|	��|�|���|�|	jd�|��|�|���|�|jd	�dS)
NrVru�
forkserverr)�_forkserverrr��@)r�)rvrwrxrr
Zmultiprocessing.forkserverr=�ensure_runningr�r�r:r�Z_forkserver_pidr:r�rIr�r�r{r'r`r�r�)
rF�signumrr=r�rr(r�Zevt2r�rrr�check_forkserver_death�s.
z#_TestProcess.check_forkserver_deathcCs|�tj�dSr)rBr��SIGINTrjrrr�test_forkserver_sigint
�z#_TestProcess.test_forkserver_sigintcCstjdkr
|�tj�dSdSr�)r:r&rBr�r�rjrrr�test_forkserver_sigkills
�z$_TestProcess.test_forkserver_sigkill)rN�r.).rPrQrRrgr�r��classmethodr�r�r�r�r�r�r�r>�
skipUnlessr�Z_HAVE_THREAD_NATIVE_IDr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr&r)r2r8r9r:rBrDrFrrrrrs�sl
	


(



3


 #

&rsc@�,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dSr)rr�rGr��
child_conn�parent_connrjrrrrGsz_UpperCaser.__init__cCs<|j��t|jjd�D]
}|j�|���q|j��dSr)rMr�iterrLr�r��upper�rFrrrr�runs
z_UpperCaser.runcCs&t|�tusJ�|j�|�|j��Sr)r��strrMr�r�rPrrr�submit$s
z_UpperCaser.submitcCs$|j�d�|j��|j��dSr)rMr�rrLrjrrr�stop)s
z_UpperCaser.stopN)rPrQrRrGrQrSrTrrrrrKs
rKc@s@eZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)
�_TestSubclassingProcess�rTcCsLt�}d|_|��|�|�d�d�|�|�d�d�|��|��dS)NTr�ZHELLOZworldZWORLD)rKr}r�r`rSrTr�)rFZ
uppercaserrrr�test_subclassing2sz(_TestSubclassingProcess.test_subclassingcCs�|jdkr|�d�|j��tj}|�tj|�|j|j|fd�}|�	�|�
�t|dd��}|��}|�
d|�|�
d|�|�
d|�Wd�dS1sQwYdS)	NrVrur��utf-8��encoding�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rvrwrxr�TESTFNr��unlinkr��_test_stderr_flushr�r��open�readr�)rF�testfnr(�f�errrrr�test_stderr_flush;s
"�z)_TestSubclassingProcess.test_stderr_flushcCs8t�|tjtjBtjB�}t|dddd�t_dddS)N�wrXF�rZ�closefdrXr)r:r_�O_WRONLY�O_CREAT�O_EXCLr�r5)r�ra�fdrrrr^Lsz*_TestSubclassingProcess._test_stderr_flushcCs:t�|tjtjBtjB�}t|dddd�t_t�|�dS)NrerXFrf)r:r_rhrirjr�r5r�)r��reasonrarkrrr�_test_sys_exitSsz&_TestSubclassingProcess._test_sys_exitc		CsF|jdkr|�d�|j��tj}|�tj|�gd�dfD]G}|j|j||fd�}d|_	|�
�t|�|�|j
d�t|dd	��}|��}Wd�n1sQwY|�|��t|��t�|�qgd
�}|D]4\}}|j|d��"|jtj|d�}d|_	|�
�t|�|�|j
|�Wd�n1s�wYqldS)NrVru)rXr��zignore thisr�TrXrXrY)))TrX)�Fr))�rp)rr)rrr�)rvrwrxrr\r�r]r�rmr}r�r"r`r�r_r`�rstriprRr:�subTestr�r�)	rFrarlr�rbZcontent�casesrKr�rrr�
test_sys_exitYs8
�
����z%_TestSubclassingProcess.test_sys_exitN)
rPrQrRrgrWrdrHr^rmrtrrrrrU.s	

rUcCst|d�r	|��S|��dkS)N�emptyr)r�ru�qsizerrrr�queue_empty��
rwcCst|d�r	|��S|��|kS)N�full)r�ryrv)rp�maxsizerrr�
queue_full�rxr{c@s�eZdZedd��Zdd�Zedd��Zdd�Zed	d
��Zdd�Z	d
d�Z
edd��Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�ZdS)�
_TestQueuecCs*|��td�D]}|��q|��dS)N�)r-r�r�r�)r�r�child_can_start�parent_can_continuer�rrr�	_test_put�s
z_TestQueue._test_putcCs�d}|j|d�}|��}|��}|j|j|||fd�}d|_|��|�t|�d�|�t||�d�|�	d�|�	dd�|�	ddd�|�	d	d�|�	d
dd�|�
d�t�t
�|�t|�d�|�t||�d�t|j	�}t|j
�}|�tj|dd�|�|jd�|�tj|ddd�|�|jd�|�tj|d�|�|jd�|�tj|ddt�|�|jt�|�tj|ddt�|�|jd�|jtj|ddtd
�|�|jt�|��|��|�t|�d�|�t||�d�|��t|�dS)Nr}�rzr�TFrXr�rn�rn�rr�)rr�r�r�r}r�r`rwr{ro�
put_nowaitrIr�r�rBr��pyqueueZFullr^rE�TIMEOUT1�TIMEOUT2�TIMEOUT3r�r-r�r )rFZMAXSIZErr~rr(ror�rrr�test_put�sR�




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)Nr�rnr�rn)r-ror��r�rr~rrrr�	_test_get�s



z_TestQueue._test_getcCs�|��}|��}|��}|j|j|||fd�}d|_|��|�t|�d�|��|�	�t
�t�|�t|�d�|�|�
dd�d�|�|�
d�d�|�|j
dd�d�|�|��d	�|�t|�d�t|j
�}t|j�}|�tj|d�|�|jd
�|�tj|dd�|�|jd
�|�tj|�|�|jd
�|�tj|dt�|�|jt�|�tj|dt�|�|jd
�|jtj|td�|�|jt�|��t|�dS)Nr�TFr�rnrXr�r�rnr)rr�r�r�r}r�r`rwr�r-rIr�r�r��
get_nowaitrBr�r��Emptyr^rEr�r�r�r�r )rFrr~rr(r�r�rrr�test_get�sF�


z_TestQueue.test_getcCstdd�D]}|�|�qdS)Nr�r")r�ro)r�rr�rrr�
_test_forks�z_TestQueue._test_forkcCs�|��}td�D]}|�|�qt�t�|j|j|fd�}d|_|�	�td�D]
}|�
|��|�q)|�t
j|jd�|��t|�dS)Nr�r�Tr"F)rr�rorIr�r�r�r�r}r�r`r�r�r�r�r�r )rFrr�r�rrr�	test_forks
z_TestQueue.test_forkcCs�|��}z
|�|��d�Wnty|�d�Ynw|�d�|�|��d�|�d�|�|��d�|��|�|��d�|��|�|��d�t|�dS)Nrzqsize method not implementedrXrnr�)rr`rvr_rwror�r �rFrprrr�
test_qsize:s�

z_TestQueue.test_qsizecCs(t|jd�D]}t�t�|��qdSr)rNr�rIr�r�Z	task_done)r�rp�objrrr�_test_task_doneJs

�z_TestQueue._test_task_donecs�������fdd�td�D�}|D]	}d|_|��qtd�D]}��|�q ���|D]}��d�q.|D]}|��q8t��dS)Ncsg|]}�j�j�fd��qSr)r�r�r�rrFrrrSs�z-_TestQueue.test_task_done.<locals>.<listcomp>r�Tr�)�
JoinableQueuer�r}r�ror�r )rFZworkersr�r�rr�r�test_task_donePs�

z_TestQueue.test_task_donec
Cs�t���^d}t|dddd��
}|�d�Wd�n1s wYt�t����zt|�Wnt	j
yB|�d�YnwWd�n1sMwYWd�dSWd�dS1sewYdS)NZimported_by_an_imported_modulez.pyrerXrYz�if 1:
                    import multiprocessing

                    q = multiprocessing.Queue()
                    q.put('knock knock')
                    q.get(timeout=3)
                    q.close()
                    del q
                z?Probable regression on import lock contention; see Issue #22853)rZtemp_cwdr_�writerZ
DirsOnSysPathr:�getcwd�
__import__r�r��fail)rFZmodule_namerbrrr�test_no_import_lock_contentionfs 
�����
"�z)_TestQueue.test_no_import_lock_contentioncCsHt��}t��}|�tj|jdd�t��|}|�|d�t	|�dS)NTg�������?r*)
rrrIrJr�r�r�r��assertGreaterEqualr )rFrpr��deltarrr�test_timeout{sz_TestQueue.test_timeoutc	Cs4|jdkr|�d�|j��Gdd�dt�}tj���%|��}|�|��|�d�|�	|j
tjd��t|�Wd�n1sCwYtj���C|jdd�}|�|��|�d�z
|�
|��d�Wn	tyrYnw|�	|j
tjd��|�	|���t|�Wd�dS1s�wYdS)	NrTruc@rk)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecS�t�r)r<rjrrrre��zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N�rPrQrRrerrrr�NotSerializable�rrr�Tr�rXr�)rvrwrx�object�testr�captured_stderrrror{r�r�r r`rvr_ru)rFr�rprrr�"test_queue_feeder_donot_stop_onexc�s.


�
�
"�z-_TestQueue.test_queue_feeder_donot_stop_onexccs�|jdkr|�d�|j��Gdd�dt��G�fdd�dtjj�}��}tj�	��#|t�
�d�}|�|�|�d�|�|j
tjd	��Wd�n1sPwY|�|j�|�|j�dS)
NrTruc@� eZdZdZdd�Zdd�ZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializablezMock unserializable objectcSsd|_d|_dS�NF)�reduce_was_called� on_queue_feeder_error_was_calledrjrrrrG�rHzT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__cSs
d|_t��NT)r�r<rjrrrre�szV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rPrQrR�__doc__rGrerrrrr��sr�cs eZdZdZe�fdd��ZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueuez1Queue with overloaded _on_queue_feeder_error hookcs&t|t�rt|��rd|_dSdSdSr�)rr<r�)r�r��r�rr�_on_queue_feeder_error�s

�
�z\_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.SafeQueue._on_queue_feeder_errorN)rPrQrRr��staticmethodr�rr�rr�	SafeQueue�sr�)�ctxTr�)rvrwrxr�rrrr�rr��get_contextror{r�r�r�r�)rFr�Znot_serializable_objrprr�r�'test_queue_feeder_on_queue_feeder_error�s



�	z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc	Cs�t��t��fD];}|��|�td��
|�d�Wd�n1s$wY|�td��|��Wd�n1s>wYqdS)Nz	is closed�foo)rrr�r�assertRaisesRegexr=ror�r�rrr�$test_closed_queue_put_get_exceptions�s�
���z/_TestQueue.test_closed_queue_put_get_exceptionsN)rPrQrRrHr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr|�s&
;
	5

 &r|c@�$eZdZdd�Zdd�Zdd�ZdS)�	_TestLockcCsR|��}|�|��d�|�|�d�d�|�|��d�|�ttjf|j�dS)NTF)�Lockr`�acquire�releaser�r=r�ZThreadError�rF�lockrrr�	test_lock�s
z_TestLock.test_lockcCs~|��}|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�ttf|j�dSr�)�RLockr`r�r�r�r�r�r�rrr�
test_rlock�sz_TestLock.test_rlockcCs.|���	Wd�dS1swYdSr�r�rjrrr�test_lock_context�s
"�z_TestLock.test_lock_contextN)rPrQrRr�r�r�rrrrr��s
r�c@rJ)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�TrXrF)rcrir`r�r��rF�semrrr�_test_semaphore�sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�rnr�)�	Semaphorer�r`r�rcrir�rrr�test_semaphore�s

z_TestSemaphore.test_semaphorecCs|�d�}|�|�dS�Nr�)�BoundedSemaphorer�r�rrr�test_bounded_semaphore�
z%_TestSemaphore.test_bounded_semaphorecCs�|jdkr|�d�|j��|�d�}t|j�}|�|d�d�|�|jd�|�|dd�d�|�|jd�|�|dt	�d�|�|jd�|�|dt
�d�|�|jt
�|�|td�d�|�|jt�dS)NrTrurFr.Tr�)rvrwrxr�rBr�r`r^rEr�r�r�)rFr�r�rrrr�s


z_TestSemaphore.test_timeoutN)rPrQrRr�r�r�r�rrrrr��s

r�c@s�eZdZeddd��Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
edd��Ze�
ed�dd��Zedd��Ze�
ed�dd��Zedd��Zdd�ZdS)�_TestConditionNcCs.|��|��|�|�|��|��dSr)r�r�r-)r��cond�sleeping�wokenr/rrrrb's

z_TestCondition.fc	Cs\td�D]}z
|�|krWnWn
tyYnwt�t�qt�t�|�||�dS�Nr�)r�r_rIr�r�rc)rFrDrar�rrr�assertReachesEventually/s
��
z&_TestCondition.assertReachesEventuallycCs\|jdkr,z|j��|j��}|�|d�|�|j��d�WdSty+YdSwdS)NrTr)rvZ_sleeping_countriZ_woken_countr`Z_wait_semaphorer_)rFr�Zsleepersrrr�check_invariant:s
���z_TestCondition.check_invariantcCs|��}|�d�}|�d�}|j|j|||fd�}d|_|��|�|j�tj	|j|||fd�}d|_|��|�|j�|�
�|�
�t�t
�|�dt|�|�
�|��|��t�t
�|�dt|�|�
�|��|��t�t
�|�dt|�|�|�|��dS)Nrr�TrXr�)�	Conditionr�r�rbr}r�r�r�r�r%r�rIr�r�rcri�notifyr�r�)rFr�r�r�r�rrr�test_notifyEs6





z_TestCondition.test_notifycs�|��}|�d�}|�d��td�D]4}|j|j||�tfd�}d|_|��|�|j	�t
j|j||�tfd�}d|_|��|�|j	�qtd�D]}|��qKtd�D]}���qV|�
dt��|�|�td�D]2}|j|j||�fd�}d|_|��|�|j	�t
j|j||�fd�}d|_|��|�|j	�qmtd�D]}|��q�t�t�|�
dt��|��|��|��|��fdd�d�|�|�dS)Nrrnr�Tr}c�t��Sr�rir�r�rr�<lambda>��z0_TestCondition.test_notify_all.<locals>.<lambda>)r�r�r�r�rbr�r}r�r�r�r�r%r�rcrir�rIr�r�Z
notify_allr�r��rFr�r�r�r�rMrr�r�test_notify_allrsP


�
�




z_TestCondition.test_notify_allcsP|��}|�d�}|�d��td�D]2}|j|j||�fd�}d|_|��|�|j�t	j
|j||�fd�}d|_|��|�|j�qtd�D]}|��qIt�
t�|�dt��|��|jdd�|��|��fdd	�d�|��|jd
d�|��|��fdd	�d�|��|jdd�|��|�dt��|�|�dS)Nrrnr�Tr}r�)�ncr�rr�rr�rrr��r�z._TestCondition.test_notify_n.<locals>.<lambda>r�cr�rr�rr�rrr��r�)r�r�r�r�rbr}r�r�r�r�r%r�rIr�r�rcrir�r�r�r�r�rr�r�
test_notify_n�s:



z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dSr�)	r�rBr-r�r�r�r`r^rE)rFr�r-rbrrrr��s
z_TestCondition.test_timeoutcsr|�-d�_|��|��fdd��}|r�jdkr't�d�Wd�dSWd�dS1s2wYdS)Nrc�
�jdkS�Nr��rar��staterrr���
z0_TestCondition._test_waitfor_f.<locals>.<lambda>r�rX)rar��wait_forr�r�)r�r�r�r�rr�r�_test_waitfor_f�s�"�z_TestCondition._test_waitfor_fzneeds sharedctypesc	s�|��}|�dd��|j|j|�fd�}d|_|��|�|��fdd��}|�|�|��j	d�Wd�n1s=wYt
d�D]$}t�d	�|��j	d
7_	|�
�Wd�n1sewYqFt|�|�|jd�dS)Nr�r9r�Tcr��Nrr�rr�rrr��r�z-_TestCondition.test_waitfor.<locals>.<lambda>rr�rrX)r�rr�r�r}r�r�r{r`rar�rIr�r�r"r�)rFr�r�r�r�rr�r�test_waitfor�s&
�

��z_TestCondition.test_waitforcs�|��|�Md}t��}|j�fdd�|d�}t��|}|s;|d|kr.|dkrKnnd|_Wd�dSWd�dSWd�dSWd�dS1sVwYdS)Nr*cr�r�r�rr�rrr�r�z8_TestCondition._test_waitfor_timeout_f.<locals>.<lambda>r�g333333�?r�T)r�rIrJr�ra)r�r�r��successr�r��dtr�rr�r�_test_waitfor_timeout_fs$���"�z&_TestCondition._test_waitfor_timeout_fc	Cs�|��}|�dd�}|�dd�}|�d�}|j|j||||fd�}d|_|��|�|jt	j
d��td�D]$}t�
d�|�|jd	7_|��Wd�n1sUwYq6t|�|�|j�dS)
Nr�rFr�Tr�rnrrX)r�rr�r�r�r}r�r{r�rr�r�rIr�rar�r")rFr�r�r�r�r�r�rrr�test_waitfor_timeouts&

�

��z#_TestCondition.test_waitfor_timeoutcCsT|�|��Wd�n1swYt�d�|dur(t�|tj�dSdSrW)r�rIr�r:r�r�rC)r�rqr�rrr�_test_wait_result0s
�
�z _TestCondition._test_wait_resultcCs�t|t�rtjdkrt��}nd}|��}|�?|�|�d��|�|�d��|j	|j
||fd�}|��|�|�d��|durJ|�
t|jd�|��Wd�dS1sYwYdS)Nr+rr*r��<)r�ProcessesMixinr�rr:r�r�r�r-r�r�r�r{r��KeyboardInterruptr�)rFr�rqr�rrr�test_wait_result8s

"�z_TestCondition.test_wait_resultr)rPrQrRrHrbr�r�r�r�r�r�r�r>rI�HAS_SHAREDCTYPESr�r�r�r�r�rrrrr�%s(->2	






r�c@� eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dSr)rIr�r�r�r�rrr�_test_eventOr;z_TestEvent._test_eventcCs�|��}t|j�}|�|��d�|�|d�d�|�|jd�|�|t�d�|�|jt�|��|�|��d�|�|�d�|�|jd�|�|t�d�|�|jd�|�	�|j
|j|fd�}d|_|�
�|�|�d�|��dS)NFr.Tr�)r�rBr-r`r'r^rEr�r�r#r�r�r}r�r�)rFr�r-r�rrr�
test_eventTs&
z_TestEvent.test_eventN)rPrQrRrHr�r�rrrrr�Ms
r�c@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tj�t�d��}t��}|�||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�structZcalcsizer��__setstate__�
_lengthbuf)rF�wrapperr�rrrrG�sz_DummyList.__init__cCs"|\|_|_|j���d�|_dS)Nr�)�_wrapper�_lockZcreate_memoryview�castr�)rFr�rrrr��sz_DummyList.__setstate__cCs|j|jfSr)rrrjrrr�__getstate__�r�z_DummyList.__getstate__cCs>|j�|jdd7<Wd�dS1swYdS�NrrX�rr�)rF�_rrrr��s"�z_DummyList.appendcCs4|j�
|jdWd�S1swYdSr�rrjrrr�__len__�s$�z_DummyList.__len__N)rPrQrRrGr�rr�rrrrrr��sr�cCr�)Nrr�rrrr�_wait�r�rc@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)�Bunchz
    A bunch of threads.
    Fc
Cs�||_||_||_|��|_|��|_|��|_|s|j��g}t	|�D]}|j
|jd�}d|_|�
�|�|�q%dd�}	t�||	|�|_dS)z�
        Construct a bunch of `n` threads running the same function `f`.
        If `wait_before_exit` is True, the threads won't terminate until
        do_finish() is called.
        r�TcSs|D]}|��qdSr)r�)rVr�rrr�finalize�s
�z Bunch.__init__.<locals>.finalizeN)rbrKr��	DummyList�started�finishedr��	_can_exitr�r�r��taskr}r�r�r�r
�
_finalizer)
rF�	namespacerbrKr�Zwait_before_exitrVr�r�r
rrrrG�s 



zBunch.__init__c	Csvt��}|j�|�z|j|j�W|j�|�|j�d�|j�	�s%J�dS|j�|�|j�d�|j�	�s:J�w)N�)
r:r�rr�rbrKr
rr-r'�rFr�rrrr�s�z
Bunch.taskcC�.t|j�|jkrt�t|j�|jksdSdSr)r�rr�rrjrrr�wait_for_started���zBunch.wait_for_startedcCrr)r�r
r�rrjrrr�wait_for_finished�rzBunch.wait_for_finishedcCs|j��dSr)rr�rjrrr�	do_finish��zBunch.do_finishcCs|��dSr)rrjrrrr�r�zBunch.closeNro)
rPrQrRr�rGrrrrrrrrrr	�s

r	c@rA)�
AppendTruecCs
||_dSr)r�)rFr�rrrrG�rzAppendTrue.__init__cCs|j�d�dSr�)r�r�rjrrrrN��zAppendTrue.__call__NrOrrrrr��rc@s�eZdZdZdZdZdd�Zdd�Zdd	�Zd
d�Z	e
dd
��Zd6dd�Zdd�Z
e
dd��Zdd�Ze
dd��Zdd�Ze
dd��Zdd�Ze
dd ��Zd!d"�Ze
d#d$��Zd%d&�Ze
d'd(��Zd)d*�Ze
d+d,��Zd-d.�Zd/d0�Ze
d1d2��Zd3d4�Zd5S)7�_TestBarrierz$
    Tests for Barrier objects.
    rng>@cCs|j|j|jd�|_dS)Nr�)�Barrierr
�defaultTimeout�barrierrjrrr�setUp�sz_TestBarrier.setUpcCs|j��d|_dSr)r �abortrjrrr�tearDown�s

z_TestBarrier.tearDowncCs(|jdkrgS|jdkr|j��St�S)NrVrU)rvrUr�r�rjrrrr�s



z_TestBarrier.DummyListcCs>t||||jd�}z||�|��W|��dS|��wrW)r	r
rr)rFrbrKr]rrr�run_threads�s

z_TestBarrier.run_threadscCs�|j}||jks
J�t|�D]2}|d�d�t|d�||ks#J�|��|d�d�t|d�|d|ks<J�|��qz	|jdksIJ�Wn	tySYnw|jrYJ�dS)NrTrX)	�partiesr
r�r�r�r-�	n_waitingr_�broken)r�r �resultsr��mr�rrr�	multipass�s
�z_TestBarrier.multipassrXcCs*|��|��g}|�|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)rr$r*r )rF�passesr(rrr�test_barriersz_TestBarrier.test_barriercCr)zC
        Test that a barrier works for 10 consecutive runs
        r�)r,rjrrr�test_barrier_10s
z_TestBarrier.test_barrier_10cCs|��}|�|�dSr)r-ro)r�r rrbrrr�_test_wait_return_f�z _TestBarrier._test_wait_return_fcsR|���|�|j|j�f��fdd�t|j�D�}|�|�d�d�t��dS)z9
        test the return value from barrier.wait
        crrrrrrrr#rz1_TestBarrier.test_wait_return.<locals>.<listcomp>rrXN)	rr$r.r r�r
r`�countr �rFr(rrr�test_wait_returns
z_TestBarrier.test_wait_returncCs|��t|�dkrt�dSrW)r-r�r�)r�r r(rrr�_test_action_f's�z_TestBarrier._test_action_fcCsB|��}|j|jt|�d�}|�|j||f�|�t|�d�dS)z,
        Test the 'action' callback
        )r0rXN)rrr
rr$r3r`r�)rFr(r rrr�test_action-sz_TestBarrier.test_actioncCsnz|��}||jdkrt�|��|�d�WdStjy)|�d�YdSty6|��YdSw�Nr�T)r-r
r�r�r��BrokenBarrierErrorr")r�r �results1�results2r�rrr�
_test_abort_f6s�z_TestBarrier._test_abort_fcCs^|��}|��}|�|j|j||f�|�t|�d�|�t|�|jd�|�|jj�dS)zK
        Test that an abort will put the barrier in a broken state
        rrXN)	rr$r9r r`r�r
r{r')rFr7r8rrr�
test_abortCs
�z_TestBarrier.test_abortcCs�|��}||jdkr%|j|jdkr t�d�|j|jdks|��nz|��|�d�Wntjy?|�d�Ynw|��|�d�dS)Nr�rXrT)	r-r
r&rIr��resetr�r�r6)r�r r7r8�results3r�rrr�
_test_reset_fOs
�
�z_TestBarrier._test_reset_fcCsl|��}|��}|��}|�|j|j|||f�|�t|�d�|�t|�|jd�|�t|�|j�dS)zL
        Test that a 'reset' on a barrier frees the waiting threads
        rrXN)rr$r=r r`r�r
)rFr7r8r<rrr�
test_resetas�z_TestBarrier.test_resetcCs�z|��}||jdkrt�|��|�d�Wntjy'|�d�Yn
ty3|��Ynw|��|jdkrA|��|��|��|�d�dSr5)r-r
r�r�r�r6r"r;)r�r �barrier2r7r8r<r�rrr�_test_abort_and_reset_fns �z$_TestBarrier._test_abort_and_reset_fcCsz|��}|��}|��}|�|j�}|�|j|j||||f�|�t|�d�|�t|�|jd�|�t|�|j�dS)zF
        Test that a barrier can be reset after being broken.
        rrXN)rrr
r$r@r r`r�)rFr7r8r<r?rrr�test_abort_and_reset�s�z!_TestBarrier.test_abort_and_resetcCsR|��}||jdkrt�d�z|�d�WdStjy(|�d�YdSw)Nr���?rT)r-r
rIr�r�r6r��r�r r(r�rrr�_test_timeout_f�s
�z_TestBarrier._test_timeout_fcCs4|��}|�|j|j|f�|�t|�|jj�dS)z$
        Test wait(timeout)
        N)rr$rDr r`r�r%r1rrrr��sz_TestBarrier.test_timeoutcCsT|�|j�}||jdkrt�d�z|��WdStjy)|�d�YdSw)Nr�rBT)r-rr
rIr�r�r6r�rCrrr�_test_default_timeout_f�s
�z$_TestBarrier._test_default_timeout_fcCs@|j|jdd�}|��}|�|j||f�|�t|�|j�dS)z4
        Test the barrier's default timeout
        rr�N)rr
rr$rEr`r�r%)rFr r(rrr�test_default_timeout�sz!_TestBarrier.test_default_timeoutcCs|�d�}|��|��dSrW)rr-)rFr]rrr�test_single_thread�s
z_TestBarrier.test_single_threadc	CsHt|�D]}|��|�
|�|�Wd�n1swYqdSr)r�r-r�)r�r r+�connr�r�rrr�_test_thousand_f�s���z_TestBarrier._test_thousand_fcCs�|jdkr|�d�|j��d}|��}|�d�\}}t|j�D]}|j|j|j	|||fd�}|�
�|�|j�q t|�D]}t|j�D]
}|�
|��|�qEq>dS)NrUru��Fr�)rvrwrxr�r�r�r
r�rIr r�r�r�r`r�)rFr+r�rHrL�jr�r�rrr�
test_thousand�s 
���z_TestBarrier.test_thousandN)rX)rPrQrRr�r
rr!r#rr$rHr*r,r-r.r2r3r4r9r:r=r>r@rArDr�rErFrGrIrLrrrrr�sJ




	






	
rc@sZeZdZdZddddded�ed�fgZd	d
�Zedd��Zddd�Z	dd�Z
dd�ZdS)�
_TestValuerV)r�i�i�^)�dg
@g�)�hi�����)rp��rq�x�ycC�ts	|�d�dSdS�Nz%requires multiprocessing.sharedctypes�r�rwrjrrrr!���z_TestValue.setUpcCs$t||j�D]	\}}|d|_qdSr�)�zip�codes_valuesra)r��values�sv�cvrrrr��s�z_TestValue._testFcs�|r
�fdd��jD�}n
�fdd��jD�}t|�j�D]
\}}��|j|d�q�j�j|fd�}d|_|��|��t|�j�D]
\}}��|j|d�qEdS)Nc�g|]\}}}��||��qSr)�RawValue�r�coderarrjrrr���z)_TestValue.test_value.<locals>.<listcomp>cr^r)rr`rjrrr�rbrXr�Tr�)	rZrYr`rar�r�r}r�r�)rF�rawr[r\r]r(rrjr�
test_value�s 
�
��z_TestValue.test_valuecC�|jdd�dS�NT)rc)rdrjrrr�
test_rawvaluerz_TestValue.test_rawvaluec
Cs�|�dd�}|��}|��}|jdddd�}|��}|��}|��}|jdd|d�}|��}	|��}
|�||	�|jdddd�}|�t|d��|�t|d��|jt|jdddd�|�	dd�}|�t|d��|�t|d��dS)Nr�rn�r�F�get_lock�get_objZnavalue)
rrirjr�r`r�r�r�r<r_)
rFZval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlocks$z_TestValue.test_getobj_getlockNro)rPrQrRrgrrZr!rHr�rdrgrsrrrrrM�s�

rMc@s~eZdZdZedd��Ze�edud�ddd��Z	e�edud�d	d
��Z
e�edud�dd��Ze�edud�d
d��ZdS)�
_TestArrayrVcCs0tdt|��D]}||||d7<qdSrW)r�r�)r��seqr�rrrrb$s�z_TestArray.fNzrequires _ctypesFcCs�gd�}|r
|�d|�}n|�d|�}|�t|�t|��|�|d|d�|�t|dd��t|dd���t�dgd��|dd�<|dd�<|�t|dd��|�|�|�|j|j|fd	�}d
|_|�	�|�
�|�t|dd��|�dS)N)
i�iri�i5���i$i�i�i?r�rnr�r�)rXr�rnr�r�rpr�T)�RawArray�Arrayr`r�r��arrayrbr�r}r�r�)rFrcru�arrr�rrr�
test_array)s$$
z_TestArray.test_arraycCsrd}td�D]0}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qdS)Nr�rnr�r)r�ryr`r�r�)rF�sizerr{rrr�test_array_from_sizeBs�z_TestArray.test_array_from_sizecCrerf)r|rjrrr�
test_rawarrayQrEz_TestArray.test_rawarrayc
Cs
|�dttd���}|��}|��}|jdttd��dd�}|��}|��}|��}|jdttd��|d�}|��}	|��}
|�||	�|jdtd�dd�}|�t|d��|�t|d��|j	t
|jdtd�dd�|�dtd��}|�t|d��|�t|d��dS)Nr�r�rhFrirjZnotalock)ryr�r�rirjr�r`r�r�r�r<rx)
rFZarr1rkrlZarr2rmrnr�Zarr3rorprqrrrrr�test_getobj_getlock_objUs(�z"_TestArray.test_getobj_getlock_objro)
rPrQrRrgrHrbr>�skipIfr5r|r~rr�rrrrrt s


rtc@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�_TestContainers�rUcCs^|�ttd���}|�|dd�ttd���|��}|�|dd�g�|�ttd���|�|dd�ttd���|�|dd�|�|dd�gd��|d9}|�|dd�gd��|�|ddggd��|�|dd�ttd���||g}|�|�}|�dd	�|D�gd
�gd�g�|�|g�}|�d�|�|ddd�gd
��dS)Nr�rnr�)r�rnr�)
rrXr�rnr�rrXr�rnr�r})rrXr�rnr�rrXr�rnr�rnr}cS�g|]}|dd��qSrr)rZelementrrrr��z-_TestContainers.test_list.<locals>.<listcomp>)
rrXr�rnr�rnr}r�rp�	r�r)rrXr�rnr�rnr}r�rpr�r�)r�r�r`�extendr�)rFr\r]rNr�rbrrr�	test_listws*
�
 z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r�r)r�r�rNr`�next)rFr\�itrrr�test_list_iter�sz_TestContainers.test_list_itercs����fdd�td�D��}��dd�|D�gd�gd�d|dd<��|ddd�gd	��td
d�D]}��||dd�gd��q7��|d
��d���t|d
�d�tddd�D]}��t||�d�qb~���}|�|�~dS)Ncsg|]	}��td���qS)rn)r�r�)rZ_irjrrr��z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rncSr�rr)r�innerrrrr�r�)rrXr��7rr9)rrXr�rXr�)r�r�r`�popr�r�)rFr\r�r]rrjr�test_list_proxy_in_list�s 
z'_TestContainers.test_list_proxy_in_listcCs�|��}ttdd��}|D]}t|�||<q
|�|��tdd�|D���|�t|���|�|�t|���dd�|D��|�t|�	��dd�|D��dS)N�A�Fcss�|]	}|t|�fVqdSr��chrrrrr�	<genexpr>�s�z,_TestContainers.test_dict.<locals>.<genexpr>cS�g|]}t|��qSrr�rrrrr�rz-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSrr�rrrrr�r�)
�dictr�r�r�r`r
�sorted�keysr[r+)rFrN�indicesr�rrr�	test_dict�s"z_TestContainers.test_dictcCsv|��}ttdd��}|D]}t|�||<q
t|�}|�t|�|�|�t|�g�t|�}|��|�tt	|�dS)Nr�r�)
r�r�r�r�rNr`r#r�r�r�)rFrNr�r�r�rrr�test_dict_iter�sz_TestContainers.test_dict_itercCs�|jddd�}|jddd�}|j||d�}|�|dd�|�|d	dd�d
|d	d<|�|dd
�|�|d	dd
�d|d	d<|�|dd�|�|d	dd�~~|�|d
dd�d|d	d<|�|d	dd�|d
}|d	}d|d<|�|dd�|�|d	dd�|��|�t|�d�|�|dd�|�|dd�|�||g�}d|dd<|�|dd�|�|ddd�~~|�|ddd�|�ddg|g�}|�|dt�|�|dddd�dS)Nr�r�)�ferrets�hamstersr�rn)�water�feed)�pets�suppliesr�r�rnZblanketsr�r�r��rr�rXZmarmots�X�cr9r�)r�r`r#r�r�r~)rFr�r�rN�lZouterrrr�test_dict_proxy_nested�sFz&_TestContainers.test_dict_proxy_nestedcCsr|��}|�|���|d�d�|�|d��d�|��}|��|d<|d�d�|�|d��d�dS)Nr�{��)r�r�rror`r�r�r[rrr�test_nested_queue�sz!_TestContainers.test_nested_queuecCsh|��}d|_d|_d|_|�|j|jfd�|`|�t|�d�|�t|d��|�t|d��dS)N�Bob�BuilderZhidden)r�r�zNamespace(name='Bob')r&�job)�	Namespacer&r�Z_hiddenr`rRr{r�)rFr�rrr�test_namespace	sz_TestContainers.test_namespaceN)rPrQrRrgr�r�r�r�r�r�r�r�rrrrr�ss


.
r�r.cCst�|�||Srr�)rSr-rrr�sqr	s
r�cCs||Srr�rSrTrrr�mul	rfr�cCst�|�tdd��)NrSi)rIr�r=r,rrr�raise_large_valuerror	r!r�cC�|Srr�rSrrr�identity	r�r�c@r�)�
CountedObjectrcCs|jd7_t�|�SrW)�n_instancesr��__new__r�rrrr�#	s
zCountedObject.__new__cCst|�jd8_dSrW)r�r�rjrrr�__del__'	szCountedObject.__del__N)rPrQrRr�r�r�rrrrr� 	sr�c@�eZdZdS)�SayWhenErrorN�rPrQrRrrrrr�*	sr�ccs:�|dkr	td��t|�D]
}||krtd��|Vq
dS)Nr9zSomebody said when)r�r�)�totalZwhenr�rrr�exception_throwing_generator,	s��r�cseZdZe�fdd��Ze�fdd��Zdd�Zdd�Zd	d
�Zdd�Z	d
d�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zed+d,��Zd-d.�Zed/d0��Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Z �Z!S);�	_TestPoolcst���|�d�|_dSr�)�super�
setUpClass�Pool�poolr���	__class__rrr�7	s
z_TestPool.setUpClasscs(|j��|j��d|_t���dSr)r�r�r�r��
tearDownClassr�r�rrr�<	s

z_TestPool.tearDownClasscCs@|jj}|�|td�td��|�|tdddi�tdd��dS)N)rnrnrrSrnr�)r��applyr`r�)rFZpapplyrrr�
test_applyC	s"z_TestPool.test_applyc	Csh|jj}|�|tttd���tttttd�����|�|tttd��dd�tttttd�����dS)Nr�r�r"�Z	chunksize)r��mapr`r�r�r�)rFZpmaprrr�test_mapH	s
,�z_TestPool.test_mapcCs�|jj}tttd�tddd���}|�|t|�tt�t|���tttd�tddd���}|�|t|dd�tt�t|���dS)Nr�r�r9r�r�r"r�)r��starmapr�rYr�r`r��	itertools)rFZpsmap�tuplesrrr�test_starmapN	s��z_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr�r�r9)
r�rYr�r`r�Z
starmap_asyncr�r�r�r�)rFr�rrr�test_starmap_asyncW	s�z_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dSr�)r`r��	map_asyncr�r�r�r�r�rjrrr�test_map_async\	s�z_TestPool.test_map_asynccCs�|jdkr
|j��ng}|jjtdg|j|jd���|�dt	|��|�dg|d�|jjtdg|j|jd���|�dt	|��|�
|dt�dS)NrU�1)�callback�error_callbackrXrr\r�)rvrUr�r�r�r�r�r-r`r�r~r=)rFZ	call_argsrrr�test_map_async_callbacks`	s��z"_TestPool.test_map_async_callbackscCsr|jdkr|�d�|j��Gdd�dt�}|�t��|j�t|�gd�Wd�dS1s2wYdS)NrVruc@rk)z*_TestPool.test_map_unplicklable.<locals>.AcSrd)Nz
cannot pickler�rjrrrrer	rfz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr�rrrr�Aq	rrr�r�)	rvrwrxr�r�r�r�r�r�)rFr�rrr�test_map_unplicklablem	s
"�z_TestPool.test_map_unplicklablecCsBz|jjtgdd�jtd�WdStjy |�d�YdSw)NrXr�r�z2pool.map_async with chunksize stalled on null list)r�r�r�r�r�r�TimeoutErrorr�rjrrr�test_map_chunksizew	s
 �z_TestPool.test_map_chunksizecCsh|jdkr|�d�|j��|�t��|j�ttdd�d�Wd�n1s)wY|�t��|j�ttdd�d�Wd�n1sIwY|�t��|j�ttdd�d�Wd�n1siwYGdd�d�}|�t��|j�t|�d�Wd�n1s�wY|�t��|j�t|�d�Wd�dS1s�wYdS)	NrUrurXr9r�rnc@r�)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSr�rrrjrrr�__iter__�	r�zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSr�r)r�rjrrr�__next__�	r�zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cS�dSrWrrjrrrr�	r�zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rPrQrRr�r�rrrrr�SpecialIterable�	�r�)	rvrwrxr�r�r�r�r�r�)rFr�rrr�"test_map_handle_iterable_exception}	s$
����"�z,_TestPool.test_map_handle_iterable_exceptioncCs<|j�tdtf�}t|j�}|�|�d�|�|jt�dS)Nr��1)	r��apply_asyncr�r�rBr�r`r^rE�rFrbr�rrr�
test_async�	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nr}rBr�)r�r�r�r�rBr�r�rr�r^rEr�rrr�test_async_timeout�	s
z_TestPool.test_async_timeoutc	Cs�|j�tttd���}|�t|�tttttd�����|j�tttd���}td�D]}|�t|�||�q+|�t	|j
�|jjtttd��dd�}td�D]}|�t|�||�qP|�t	|j
�dS�Nr�rJr�r�)r��imapr�r�r�r`r�r�r��
StopIterationr��rFr�r�rrr�	test_imap�	s"z_TestPool.test_imapcCs:|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||�qA|�t|j	�|j�ttdd�d	�}t
d
�D]}|�t|�||�qd|�t|j	�|j�ttdd�d�}t
d�D]}|�t|�||�q�|�t|j	�dS)NrUrurXr9r�rnr"r�r�r}r�)
rvrwrxr�r�r�r�r�r�r�r�r`r�r�rrr�#test_imap_handle_iterable_exception�	s$
z-_TestPool.test_imap_handle_iterable_exceptionc	Csx|j�tttd���}|�t|�tttttd�����|jjtttd��dd�}|�t|�tttttd�����dSr�)r��imap_unorderedr�r�r�r`r�r�)rFr�rrr�test_imap_unordered�	s"&z_TestPool.test_imap_unorderedcCsn|jdkr|�d�|j��|j�ttdd�d�}|�t|j	�|j�ttdd�d�}|�t|j	�|j�ttdd�d�}t
ttt
td����}|�t��td�D]}t
|�}|�||�|�|�qRWd�n1snwY|j�ttdd�d	�}t
ttt
td����}|�t��td�D]}t
|�}|�||�|�|�q�Wd�dS1s�wYdS)
NrUrurXr9r�rnr"r�r�)rvrwrxr�r�r�r�r�r�r�r�r�r�r�r�r*)rFr�Zexpected_valuesr�rarrr�-test_imap_unordered_handle_iterable_exception�	sH
�������"�z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCs�|jdkrtnt}|�||jd�|�||jd�|jdkrA|�d�}z|�dt|j��W|��|�	�dS|��|�	�wdS)NrUr9rrn)
rv�RemoteErrorr=r�r�r`r��_poolrr�)rFZexpected_errorr�rrr�test_make_pool�	s�

�
�z_TestPool.test_make_poolcCsP|jjtjdd�td�D�dd�}|j��t|jj�}|�|�|j	d�dS)NcSsg|]}d�qS)r*rrrrrr
�z,_TestPool.test_terminate.<locals>.<listcomp>i'rXr�r>)
r�r�rIr�r�r�rBr��
assertLessrE)rFr�r�rrrr�
s�
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dSrW)r�r`r�r�r�r�r�r�r�rr�r�rrr�test_empty_iterable
s
z_TestPool.test_empty_iterablecCs�|jdkrDttd��}dd�|D�}|�d��}|�t|�}|�|��|�Wd�n1s0wY|��|�	t
|jt|�dSdS)NrTr�cSr�r)r�rrrrr
rz*_TestPool.test_context.<locals>.<listcomp>r�)rvr�r�r�r�r�r`r�r�r�r=)rF�Lr�r��rrrr�test_context
s
��z_TestPool.test_contextcCrd)Nr�r�r�rrr�_test_traceback%
�z_TestPool._test_tracebackcCs�|jdkr�|�d��*}z|�|j�Wnty'}z|}WYd}~n
d}~ww|�d�Wd�n1s7wY|��|�t|�t	�|�
|jd�|j}|�t|�t
jj�|�d|j�tj���}z|�t	y{tjt���YnwWd�n1s�wY|�d|���|�d��=}z|�ttdd�d�Wnty�}z|}WYd}~n
d}~ww|�d�|�t|�t�|�|jd�Wd�n1s�wY|��dSdS)NrTrXzexpected RuntimeError)r�z&raise RuntimeError(123) # some commentr9zexpected SayWhenError)rvr�r�r��	Exceptionr�r�rr�r�r`rK�	__cause__rr�ZRemoteTracebackr��tbr�rr�r��
excepthook�exc_info�getvaluer�r�r�r�)rFr�r��exc�cause�f1rrr�test_traceback)
sR
��
�������
�	�z_TestPool.test_tracebackcCrd)Nr�r�r�rrr�_test_wrapped_exceptionO
r�z!_TestPool._test_wrapped_exceptionc	Csl|�d��#}|�t��|�|j�Wd�n1swYWd�n1s+wY|��dSrW)r�r�r�r�rr�r�rrr�test_wrapped_exceptionS
s���z _TestPool.test_wrapped_exceptioncCs�t��}|�t��C|�d��.}z|�tddg�Wt�d�|��|�	�nt�d�|��|�	�wWd�n1s@wYWd�n1sOwY|�
t��|d�dS)Nr�rrXrg�������?)rIrJr�r=r�r�r�r�rr��
assertGreater)rFZt_startr�rrr�test_map_no_failfastZ
s


����
z_TestPool.test_map_no_failfastcCspdd�td�D�}dd�|D�}|j�t|�~t��t�t�|�	t
dd�|D��dh�|�	tjd�dS)NcSsg|]}t��qSr)r�rrrrrq
�z4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}t�|��qSr)r�r�)r�orrrrr
scss�|]}|�VqdSrr)rrrrrr�x
��z3_TestPool.test_release_task_refs.<locals>.<genexpr>r)
r�r�r�r�r�r�rIr�r�r`r�r�r�)rFZobjsZrefsrrr�test_release_task_refsn
s
z _TestPool.test_release_task_refsc	Cs�|jdkr
|�d�|�d�}|�Wd�n1swY|�t��|�Wd�n1s4wYWd�n1sCwY|��dS)NrU�test not applicable to managerrX)rvrwr�r�r=r��rFr�rrr�
test_enter}
s


����z_TestPool.test_entercCsx|jdkr
|�d�|�d�}|��|��tjj|_t	�
dtf��d}t�
�Wd�dS1s5wYdS)NrUr
rXz%unclosed running multiprocessing pool)rvrwr�r�r�rr�ZRUNZ_staterZcheck_warnings�ResourceWarningr�
gc_collectrrrr�test_resource_warning�
s



�
"�z_TestPool.test_resource_warning)"rPrQrRrHr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr�
__classcell__rrr�rr�5	sD	

$


&
r�cCrd)N�key)�KeyErrorrrrr�raising�
rfrcCsdd�S)NcSr�)N�*rrrrrr��
sz%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result�
rfrc@r�)�_TestPoolWorkerErrorsrVcsjt�d�}dg��fdd�}|jt|d�}|�t|j�|��d�|��dt�|�	�|�
�dS)Nr�c�|�d<dSr�r�r�Z
scratchpadrr�errback�
r�z@_TestPoolWorkerErrors.test_async_error_callback.<locals>.errback�r�r)rr�r�rr�rr�r{r~rr�)rFr�rrbrrr�test_async_error_callback�
s
z/_TestPoolWorkerErrors.test_async_error_callbackcs�ddlm}t�d�}td�D]6}dg��fdd�}|jt|d�}|�||j��d}|�	|�|�
�d|�|�|j�|�|j
�q|��|��dS)Nr)�MaybeEncodingErrorr�r"crr�rrrrrr�
r�z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr)�multiprocessing.poolr rr�r�r�rr�r�r{r~ZassertIsNotNonerrarr�)rFr r�Z	iterationrrb�wrappedrrr�test_unpickleable_result�
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)rPrQrRrgrr#rrrrr�
src@�0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestPoolWorkerLifetimerVc	Cstjddd�}|�dt|j��dd�|jD�}g}td�D]}|�|�t|f��qt	|�D]\}}|�|�
�t|��q/|��d}|retdd	�|jD��se|d
8}t
�t�|retdd	�|jD��rPdd�|jD�}|�d|�|�d|�|�t|�t|��|��|��dS)Nrnr��ZmaxtasksperchildcS�g|]}|j�qSr�r��rrerrrr�
r	zE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r��2cs��|]}|��VqdSr�r|r)rrrr��
��zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rXcSr'rr(r)rrrr�
r	)rr�r`r�r�r�r�r�r��	enumerater�Z_repopulate_pool�allrIr�r�r�r�r�rr�)	rFr�Zorigworkerpidsr(r�rKrbZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime�
s(
�z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd�}g}td�D]
}|�|�t|df��q
|��|��t|�D]\}}|�	|�
�t|��q'dS)NrnrXr&r}g333333�?)rr�r�r�r�r�rr�r.r`r�)rFr�r(r�rKrbrrr�%test_pool_worker_lifetime_early_close�
s�z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec	CsFdD]}|�t��tjd|d�Wd�n1swYqdS)N)rr9rZ12rnr&)r�r=rr�)rFrarrr�"test_pool_maxtasksperchild_invalid�
s���z:_TestPoolWorkerLifetime.test_pool_maxtasksperchild_invalidcCs*d}tjj�d|�\}}}|�|d�dS)Na�if 1:
            from multiprocessing import Pool
            problem = None
            class A:
                def __init__(self):
                    self.pool = Pool(processes=1)
            def test():
                global problem
                problem = A()
                problem.pool.map(float, tuple(range(10)))
            if __name__ == "__main__":
                test()
        �-cr)r�r�
script_helper�assert_python_okr`�rF�cmdr��outrcrrr�>test_worker_finalization_via_atexit_handler_of_multiprocessing�
s
zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rPrQrRrgr0r1r2r9rrrrr%�
s
r%)�BaseManager�	BaseProxyr�c@r�)�FooBarcCr�)N�f()rrjrrrrbr�zFooBar.fcCr�r)r=rjrrr�gr�zFooBar.gcCr�)N�_h()rrjrrr�_hr�z	FooBar._hN)rPrQrRrbr>r@rrrrr<r�r<ccs�td�D]}||VqdSr�)r�)r�rrr�bazs��rAc@r�)�
IteratorProxy)r�cCr�rrrjrrrr�#r�zIteratorProxy.__iter__cCr)Nr�)�_callmethodrjrrrr�%rzIteratorProxy.__next__N)rPrQrRZ	_exposed_r�r�rrrrrB!srBc@r�)�	MyManagerNr�rrrrrD(�rD�Foo)�callable�Bar)rbr@)rGZexposed)rGZ	proxytypec@r$)�_TestMyManagerr�cCs<t�}|��|�|�|��|�|jjdtjf�dSr�)	rDr��common�shutdownr��_processr�r�r��rFrUrrr�test_mymanager4s

z_TestMyManager.test_mymanagercCsLt��
}|�|�Wd�n1swY|�|jjdtjf�dSr�)rDrJr�rLr�r�r�rMrrr�test_mymanager_context?s�z%_TestMyManager.test_mymanager_contextcCsPt�}|��|�
|�|�Wd�n1swY|�|jjd�dSr�)rDr�rJr`rLr�rMrrr�!test_mymanager_context_prestartedGs�z0_TestMyManager.test_mymanager_context_prestartedcs|���|���|��}�fdd�dD�}�fdd�dD�}|�|ddg�|�|ddg�|����d�|�t�j�|���d�d�|�t	�jd�|����d�|���
�d	�|���d�d�|���d�d	�|�t|�d
d�td�D��dS)Nc�g|]	}t�|�r|�qSr�r��rr&)r�rrrSr�z)_TestMyManager.common.<locals>.<listcomp>)rbr>r@crQrrRrS)�barrrrTr�rbr>r@r=r?cSsg|]}||�qSrrrrrrrcrr�)
rFrHrAr`rbr�r=r>rCr�r@r�r�)rFrUrAZfoo_methodsZbar_methodsr)rTr�rrJNs "z_TestMyManager.commonN)rPrQrRrgrNrOrPrJrrrrrI0srIcCstSr)�_queuerrrr�	get_queuekr�rVc@�eZdZdZdS)�QueueManagerz$manager class used by server processN�rPrQrRr�rrrrrXn�rXc@rW)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNrYrrrrr[rrZr[Z	xmlrpclibc@s8eZdZdZgd�Zedd�Zedd��Zdd�ZdS)�_TestRemoteManagerr�)�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNcCs2t||td�}|��|��}|�t|j��dS)N�rrzZ
serializer)r[�
SERIALIZER�connectrVro�tupler[�r�rrzrUrrrr�_putter�s�z_TestRemoteManager._puttercCs�t�d�}ttjdf|td�}|��|�|j�|j	|j
|j|fd�}d|_|��t
|j|td�}|��|��}|�|��|j�|�t|jtj�~dS)N� rr_r�T)r:�urandomrXr�HOSTr`r�r�rKr�rdrr}r[rarVr`r�r�r�r�rorIr�)rFrzrUr�Zmanager2rrrr�test_remote�s"
��z_TestRemoteManager.test_remote)	rPrQrRrgr[r�rHrdrhrrrrr\ys
	r\�md5c@r�)�_TestManagerRestartcCs,t||td�}|��|��}|�d�dS)Nr_r])rXr`rarVrorcrrrrd�s�z_TestManagerRestart._putterc
CsFt�d�}ttjdf|td�}z;|��}|j}|j�	�|�
�|j|j|j|fd�}|�
�|�
�|��}|�|��d�~Wt|d�rJ|��nt|d�rU|��wwt||td�}z
|�
�|�|j�WdSty�}z,|jtjkry�t�d�t||td�}t|d�r�|�|j�WYd}~dSWYd}~dSd}~ww)Nrerr_r�r]rKrB)r:rfrXrrgr`Z
get_serverr�listenerrr�r�rdr�rVr`r�r�rKr��OSError�errnoZ
EADDRINUSErIr�)rFrzrUZsrvr�addrr�rr�rrr�test_rapid_restart�sN
�

�
�
��
�
���z&_TestManagerRestart.test_rapid_restartN)rPrQrRrHrdrorrrrrj�s
rj�c@s�eZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	edd
��Z
ed$dd��Ze�
ed�dd��Ze�
ed�e�ejdkd�e�edkd�e�
eed�d�dd�����Zedd��Ze�
ed�e�ejdkd�dd ���Zd!d"�Zd#S)%�_TestConnectionrtcCs(t|jt�D]}|�|�q|��dSr)rN�
recv_bytes�SENTINEL�
send_bytesr)r�rH�msgrrr�_echo�sz_TestConnection._echoc
CsL|��\}}|j|j|fd�}d|_|��gd�}td�}|d}t�dttd���}|j	dkr;|�
t|���t
�|�
|�|�d�|�
|��|�|�
|�|�d�|�
|��|�|j	dk�rt�dd	gd�}t|�d	gdt|�}	|�
|�|�d�|�
|�|�t|�|j�|�
t|�|	�t�dd	gd�}d	gd
t|�d	gdt|�}	|�
|�|�d�|�
|�|d
|j�t|�|j�|�
t|�|	�ttd��}|�
|�|�d�z|�|�}
Wntj�y}z|�
|j|f�WYd}~nd}~ww|�d
|
�t|j�}|�
|�d�|�|jd	�|�
|d�d�|�|jd	�|�
|t�d�|�|jt�|�d�t� d�|�
|t�d�|�|jd	�|�
|��d�td�d}
|�|
�|�
|��|
�|�t!�|�"�|j	dk�r�|�
|j#d�|�
|j$d�|�%t&|j�|�%t&|j�|�'�dS)Nr�T)rXr^Nr]r�r�r�rTrrnr�z(                                        zexpected BufferTooShort, got %sFr9r*�Xi)(r�r�rvr}r�rrzr�r�rvr`r��filenor�r�r�rtrrr�Zrecv_bytes_into�itemsize�	bytearrayrZBufferTooShortrKr�rBr�r^rEr�rIr�rsr�readable�writabler��EOFErrorr�)rFrHrLr�ruruZlongmsgr{�bufferr�rbr�r�Zreally_big_msgrrr�test_connection�sz
�$���




z_TestConnection.test_connectioncCs�|jdd�\}}|�|�d�d�|�|��d�|jdkrR|�|jd�|�|jd�|�|jd�|�|jd�|�t|jd�|�t|j�|�t|j	�dSdS)NFr�rXrTTr�)
r�r`r�r�rvr{r|r�rlr�)rF�reader�writerrrr�test_duplex_false:s
�z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)Nr�Tr�)r�r�rvr}r�rrrtr`rrrsr�)rFrHrLr�rurrr�test_spawn_closeGs

z _TestConnection.test_spawn_closecCs:|jdkr|�d�|j��td�}|��\}}|�|�|�|��|�|�|d�|�|��|dd��|�|dd�|�|��|dd��|�|d�|�|��td	��|�|dd
�|�|��td	��|�t	|j|d�|�t	|j|dd�|�t	|j|dd
�|�t	|j|d�|�t	|j|dd�dS)NrTruZabcdefghijklmnopqrstuvwxyzrnr�rp��rpr��rXr9r�)
rvrwrxrr�rtr`rrr�r=)rFrur\r]rrr�test_sendbytes\s&

z_TestConnection.test_sendbytesc
CsFzt�|�WdSty"}z|jtjkrWYd}~dS�d}~ww)NFT)r:�fstatrlrm�EBADF)r�rkr�rrr�_is_fd_assigned|s���z_TestConnection._is_fd_assignedFcCsd|rtdd�D]}|�|�st�|��|�qt�|�}tr%t�|tj	�}t�
||�t�|�dS)Nrr2)r�r�r:�dup2rxr�recv_handle�msvcrtZopen_osfhandlerhr�r)r�rH�dataZcreate_dummy_fdsr�rkrrr�_writefd�s
�
z_TestConnection._writefd�$test needs multiprocessing.reductioncCs�|jdkr
|�d�|jdd�\}}|j|j|dfd�}d|_|��|�tj	tj
�ttj
d��}|��}t
r=t
�|�}t�|||j�Wd�n1sOwY|��ttj
d��}|�|��d�Wd�dS1srwYdS)	NrT�only makes sense with processesTr�sfoor��wb�rb)rvrwr�r�r�r}r�r�rr]r\r_rxr�Z
get_osfhandler�send_handler�r�r`r`)rFrHrLr�rbrkrrr�test_fd_transfer�s"


�"�z _TestConnection.test_fd_transferr+�*test semantics don't make sense on Windowsr2z)largest assignable fd number is too smallr�ztest needs os.dup2()c
Cs6|jdkr
|�d�|jdd�\}}|j|j|ddfd�}d|_|��|�tj	tj
�ttj
d��<}|��}t
dt�D]	}|�|�sEnq<|�d	�t�||�zt�|||j�Wt�|�nt�|�wWd�n1sqwY|��ttj
d
��}|�|��d�Wd�dS1s�wYdS)NrTr�Tr�sbarr�r�r2z2could not find an unassigned large file descriptorr�)rvrwr�r�r�r}r�r�rr]r\r_rxr��MAXFDr�r�r:r�rr�r�rr�r`r`)rFrHrLr�rbrkZnewfdrrr�test_large_fd_transfer�s.
	

�
�"�z&_TestConnection.test_large_fd_transfercCst�|��d�dS)N�)r:r�rx�rFrHrrr�_send_data_without_fd��z%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs`|jdkr
|�d�|jdd�\}}|j|j|fd�}d|_|��|�tt	j
|�|��dS)NrTr�Tr�r�)rvrwr�r�r�r}r�r�r�rr�r��rFrHrLr�rrr�test_missing_fd_transfer�s

z(_TestConnection.test_missing_fd_transferc	Cs�|��\}}|�8|�&|�d�|�|��d�|jdkr*|�|j�|�|j�Wd�n1s4wYWd�n1sCwY|jdkri|�|j�|�|j�|�t	|j�|�t	|j�dSdS�N�rT)
r�r�r`r�rvr��closedr{r�rlr[rrrr��s"

���
�z_TestConnection.test_contextNro)rPrQrRrgrHrvrr�r�r�r�r�r>rI�
HAS_REDUCTIONr�r�r�rr�r�r:r�r�r�r�rrrrrq�s>
O
 




�
��


rqc@s6eZdZdZdd�Zdd�Ze�ej	d�dd��Z
d	S)
�
_TestListenerrVcCsB|jjD]}|jj|d�}|�|j�|�t|jj|j|�qdS)N��family)�
connection�families�Listenerr�rr�rlr)rFr�r�rrr�test_multiple_bind�s��z _TestListener.test_multiple_bindc
Cs�|j���@}|j�|j��)}|���}|�d�|�|��d�Wd�n1s*wYWd�n1s9wYWd�n1sHwY|jdkr[|�	t
|j�dSdSr��r�r��Clientr�acceptr�r`r�rvr�rl)rFr�rqrNrrrr��s

�����
�z_TestListener.test_contextz"test needs abstract socket supportc
Cs�|j�d��@}|j�|j��)}|���}|�d�|�|��d�Wd�n1s+wYWd�n1s:wYWd�n1sIwY|jdkr\|�	t
|j�dSdS)Nz
somethingr�rTr�)rFrk�clientrNrrr�test_abstract_socket�s

�����
�z"_TestListener.test_abstract_socketN)rPrQrRrgr�r�r>rIr
Zabstract_sockets_supportedr�rrrrr��s
�r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClientrtcCs"|j�|�}|�d�|��dS)Nr�)r�r�r�r)r�rrHrrrr�
s
z_TestListenerClient._testcCsj|jjD].}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��qdS)Nr�r�Tr�)
r�r�r�r�r�rr}r�r�r`r�r�r)rFr�r�r�rHrrr�test_listener_client
s
�z(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)Nr�TrXr�)r�r�r�r�rr}r�rIr�r�r`r�rr�)rFr�r�rHrrr�test_issue14725!
s

z#_TestListenerClient.test_issue14725cCsh|jjD]-}|jj|d�}|j�|j�}|��}|�d�|�|�d��|�	�|�	�|�	�qdS)Nr��hellorX)
r�r�r�r�rr�rtr{r�r)rF�famr�rqr\rrr�test_issue169551
s

�z#_TestListenerClient.test_issue16955N)	rPrQrRrgrHr�r�r�r�rrrrr�
s
r�c@sTeZdZdZdd�Zedd��Zdd�Zedd	��Zd
d�Z	edd
��Z
dd�ZdS)�	_TestPollrtcCsJ|��\}}|�|��d�|�d�|�|��d�|�|��d�dS)NF�T)r�r`r�rtr[rrr�test_empty_string@
s

z_TestPoll.test_empty_stringcCs*|D]}t�d�|�|�q|��dS�Nr*)rIr�rtr)r�rH�stringsrrrr�_child_stringsG
s
z_TestPoll._child_stringscCsrd}|��\}}|j|j||fd�}|��|D]}td�D]	}|�d�r'nq|��}|�||�q|��dS)N)r�r��a�br�sbyer�slopr���r)	r�r�r�r�r�r�rrr`r�)rFr�r\r]r�rr�rSrrr�test_stringsN
s
�z_TestPoll.test_stringscCr�rm)r�)r�r�rrr�_child_boundaries]
sz_TestPoll._child_boundariescCsr|�d�\}}|j|j|fd�}|��t�d�ddg}|D]}|�|�q|��|��|�	|�
�|�dS)NFr�r�sfirstssecond)r�r�r�r�rIr�rtrr�r�rr)rFr�rer�r�r�rrr�test_boundariese
s
z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nr�r��cd)rt)r�r]rrr�_child_dont_mergeq
s

z_TestPoll._child_dont_mergecCs�|��\}}|�|�d�d�|�|�d�d�|j|j|fd�}|��|�|��d�|�|�d�d�|�|�d�d�|�|��d�|�|�d�d�|�|�d�d�|�|�d�d�|�|��d	�|��dS)
Nr.Fr*r�r�rBTr�r�)r�r`r�r�r�r�rrr�)rFr\r]r�rrr�test_dont_mergew
sz_TestPoll.test_dont_mergeN)rPrQrRrgr�rHr�r�r�r�r�r�rrrrr�<
s


r�r�c@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsrVcCsddlm}|jtjd�dS)Nr)�resource_sharerr�)rr�rTrr�)r�r�rrrr��
sz&_TestPicklingConnections.tearDownClasscCs�|D] }|jj|d�}|�|j�|��}|�|�|��|��qt�tj	df�}|�|�
��|��\}}|�|�|��|��|��dS)Nr�r)r�r�r�rr�r�socket�
create_serverrrg�getsocknamer�)r�rHr�r�r��new_connrnrrr�	_listener�
s


z"_TestPicklingConnections._listenercCsxt|jd�D]\}}|j�|�}|�|���|��q|��\}}t��}|�|�|�	|���|��|��dSr)
rNr�r�r�r�rOrr�ra�sendall)r�rHrrur�rrr�_remote�
s

z _TestPicklingConnections._remotecCs^|jj}|��\}}|j|j||fd�}d|_|��|��|��\}}|j|j|fd�}d|_|��|��|D]"}d|�	d�}	|�
�}
|�|
|	f�|�
�}|�|�
�|	�
��q;|�d�td�}	|�
�}
|�|
|	f�|�
�}g}	|�
d�}
|
s�n|�|
�qyd�|�}|�||	�
��|��|�d�|��|��|��|��dS)Nr�TzThis connection uses family %s�asciiz$This connection uses a normal socketr�r�)r�r�r�r�r�r}r�rr�rr�r�r`rOrr�r�)rFr�ZlconnZlconn0Zlpr�Zrconn0Zrpr�rurr��bufrrrr�
test_pickling�
sJ


�

z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)N�all is wellr�)r�r�r)r�rHrer�rurrr�child_access�
s
z%_TestPicklingConnections.child_accesscCs�|��\}}|j|j|fd�}d|_|��|��|jdd�\}}|�|�|��|�|��d�|��|jdd�\}}|�|�|��|�d�|��|�|��d�|�	�dS)Nr�TFr�r�ZfoobarZfoobarfoobar)
r�r�r�r}r�rr�r`r�r�)rFrHrLr�r�rerrr�test_access�
s"


z$_TestPicklingConnections.test_accessN)rPrQrRrgrHr�r�r�r�r�r�rrrrr��
s


.
r�cs<eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Z�ZS)
�	_TestHeaprVcs*t���tjjj|_tj��tjj_dSr)r�r!rr�r��_heap�old_heapZHeaprjr�rrr!s
z_TestHeap.setUpcs|jtjj_t���dSr)r�rr�r�r�r�r#rjr�rrr# �z_TestHeap.tearDownc
Csbd}d}g}tjjj}d|_t|�D]&}tt�dd�d�}tj�|�}|�	|�t
|�|kr7t�|�}||=~q|j��g}d}	d}
t
|j���D] }|D]\}}
}|�	|j�|�|
|||
df�|	||
7}	qNqJ|j��D]!\}}|D]\}
}|�	|j�|�|
|||
df�|
||
7}
qvqp|�|	|
tdd	�|jD���|��tt
|�d�D]5}||dd
�\}}
}||ddd
�\}}}||kr�|�||j|j�|�|d�q�|�||�q�Wd�n1s�wYt�|�|�r|��|s�|�|j|j�|�t
|j�d�|�t
|j�d�|�t
|j�d|j�|�t
|j�d�dS)N�r*rrXrJ�free�occupiedcss�|]}|jVqdSr�r})r�arenarrrr�Jrz&_TestHeap.test_heap.<locals>.<genexpr>rn)rr�r�r�Z_DISCARD_FREE_SPACE_LARGER_THANr�r��randomZlognormvariater�r�Z	randrangerr�Z_len_to_seqr[Z_arenas�indexZ_allocated_blocksr+r`�sum�sortr}Zshuffler�Z_n_freesZ
_n_mallocsZ_pending_free_blocks)rFZ
iterationsZ	maxblocksZblocksr�r�r}r]r/r�r�r�r�r�rTZarena_blocksZnarenaZnstartZnstoprrr�	test_heap$sj


����
���
"�z_TestHeap.test_heapcCsxt��st��|�tj�t��}|jtjg|�R�t�d�td�D]}tj	�
d�}tj	�
d�}||_||_q%dS)Nr�r�rX)r�Z	isenabledZenabler�Zdisable�
get_threshold�
set_thresholdr�rr�r�Zbuddy)rFZ
thresholdsr�r\r]rrr�test_free_from_gcds
�z_TestHeap.test_free_from_gc)	rPrQrRrgr!r#r�r�rrrr�rr�s@r�c@s"eZdZdefdefdefgZdS)�_FoorSrT�zN)rPrQrRr5r6r7Z_fields_rrrrr�~s
�r�c@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesrVcCrUrVrWrjrrrr!�rXz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|��D]
}||d9<q0dSr�)rarSrTr�r�)r�rSrTr�r�r{�stringr�rrr�_double�s�z_TestSharedCTypes._doubleFc
Cstdd|d�}ttd|d�}ttd|d�}ttdd|d�}|jdttd	��|d�}|jd
d|d�}td�|_|j	|j
||||||fd
�}d|_|��|�
�|�|jd�|�|jd�|�|jd�|�|jd�|�|jd�td	�D]}	|�||	|	d�qv|�|jtd��dS)Nr�r�rhgUUUUUU�?rQrnr�rNr�rqr"r�r�T�gUUUUUU�?rRr}�@Z
hellohello)rr6r7r�ryr�r�rrar�r�r}r�r�r`rZrSrT)
rFr�rSrTr�r�r{r�r�r�rrr�test_sharedctypes�s&
z#_TestSharedCTypes.test_sharedctypescCre)NTrh)r�rjrrr�test_synchronize�rz"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nr��@rQr)r�r
rSrTr�r`rZ)rFr�rTrrr�	test_copy�sz_TestSharedCTypes.test_copyNro)
rPrQrRrgr!rHr�r�r�r�rrrrr��s


r�z&requires multiprocessing.shared_memoryc@s�eZdZdZedd��Zdd�Zdd�Zdd	�Zd
d�Z	dd
�Z
dd�Zdd�Ze
�ejdkd�dd��Ze
�ejdkd�dd��Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#S)$�_TestSharedMemoryrVcCs8t|t�rt�|�}n|}||jdt|��<|��dSr)rrRr�SharedMemoryr�r�r)Zshmem_name_or_objZbinary_dataZ	local_smsrrr�!_attach_existing_shmem_then_write�s

z3_TestSharedMemory._attach_existing_shmem_then_writecCs|tt���Sr)rRr:r�)rF�prefixrrr�
_new_shm_name�sz_TestSharedMemory._new_shm_namec	sp|�d�}tj|ddd�}|�|j�|�|j|�|�|jd�|�t	|j
�|j�|�|jt|��|�t|j�t|��d|j
d<|�|j
dd�t�|�}|�|j
dd�|�
�tj|d|jd�}|�|jd|j�|�
�|�t��tjdd	d�Wd�n1s�wY|�t��tjd
d�Wd�n1s�wYtj�d��P}tj�|�d
�|�d�g}�fdd�|D�}||_tjddd�}|�|j�|�|j|d�||_tjddd�}|�|j�|�|j|d�Wd�n	1�swYtj�rX|�d�}	tj|	ddd�}
|�t��,z|�|
jd�t�|	�}|��|�
�|
�
�W|
��n|
��wWd�n	1�sSwY|�t��tj|ddd�}Wd�n	1�sqwYtj�r�Gdd�dtj�}
|
|�}|�|j|j�|�
�|�t��t�d�}|��Wd�n	1�s�wY|�
�dS)NZtest01_tsmbT���creater}rrr"r����F�r��,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fnc�g|]}�|�qSrrrS�ZNAME_PREFIXrrr�rz?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rXZtest01_dblunlinkr�c@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rPrQrRr:ri�O_RDWRZ_flagsrrrr�OptionalAttachSharedMemory4�r�Ztest01_notthere)r�rr�r�r]r`r&r�r}r�r�r�rRrr�r�r=r>�mock�patch�_SHM_NAME_PREFIX�side_effect�_nameZ
_USE_POSIX�FileNotFoundError�FileExistsError)rFZ	name_tsmb�smsZalso_smsZsame_sms�mock_make_filename�names�shm1�shm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsr�Zok_if_exists_smsZnonexisting_smsrr�r�test_shared_memory_basics�s�


����
�

���	

�z+_TestSharedMemory.test_shared_memory_basicscs�tj�d��Q}tj�|�d�|�d�g}�fdd�|D�}||_tjddd�}|�|j	�|�
|j|d	�||_tjddd�}|�|j	�|�
|j|d�Wd�dS1sZwYdS)
Nr�Z	test03_fnZ	test04_fncr�rrrSr�rrrLrzA_TestSharedMemory.test_shared_memory_recreate.<locals>.<listcomp>TrXr�r)r>rrrrr�rr�r�r]r`r)rFrr	r
rrr�r�test_shared_memory_recreateBs �"�z-_TestSharedMemory.test_shared_memory_recreatecCs�|�t��tjddd�}Wd�n1swY|�t��tjddd�}Wd�n1s3wY|�t��tjdd�}Wd�dS1sOwYdS)NTr9r�rr�)r�r=rr�)rFZsms_invalidrrr�"test_invalid_shared_memory_crationXs��"�z4_TestSharedMemory.test_invalid_shared_memory_crationc	CsZttjd�D]�}|j|d���tjddd�}|�|j�d|jdd�<tj	||d	�}t�
|�}|�|tj�|�|j
|j
�|�t|jdd��d�|�t|jdd��d�d
|jdd�<|�t|jdd��d
�|�t|jdd��d
�d|jdd�<|�t|jdd��d�|�t|jdd��d�Wd�n1s�wYqdS)NrX��protoTr�r��picklerr}�Zprotocolsnewvalsoldval)r��pickle�HIGHEST_PROTOCOLrrrr�r�r]r��dumps�loadsr~r`r&r)rFrr�pickled_smsZsms2rrr�"test_shared_memory_pickle_unpicklees(
���z4_TestSharedMemory.test_shared_memory_pickle_unpicklec
Cs�ttjd�D]O}|j|d��?tjddd�}d|jdd�<tj||d	�}|��|�	�|�
t��
t�|�Wd�n1sBwYWd�n1sQwYqdS)
NrXrTr�r�rrr}r)
r�rrrrrr�r�rrr]r�rr)rFrrrrrr�.test_shared_memory_pickle_unpickle_dead_objects�����z@_TestSharedMemory.test_shared_memory_pickle_unpickle_dead_objectcCs�tjddd�}|�|j�|j|j|jdfd�}d|_|��|�	�|�
t|jdd��d�|j|j|dfd�}d|_|��|�	�|�
t|jdd��d�|�
�dS)NTr�r�showdyr�rnsHELLO)rr�r�r]r�r�r&r}r�r�r`rr�r)rFrr�rrr�#test_shared_memory_across_processes�s&��z5_TestSharedMemory.test_shared_memory_across_processesr#z#not feasible in non-posix platformscCs�tj��}|��|�td��}t�|jj	t
j�|�td��}|�t
��t�t��t
j�Wd�n1s9wY|��dSr�)r�managers�SharedMemoryManagerr��
ShareableListr�r:r�rLr�r�rCr�r�r�rK)rF�smm�slZsl2rrr�4test_shared_memory_SharedMemoryServer_ignores_sigint�s
�zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlycCs(d}tjj�d|�\}}}|�|�dS)Nz�if 1:
            from multiprocessing.managers import SharedMemoryManager


            smm = SharedMemoryManager()
            smm.start()
            sl = smm.ShareableList(range(10))
            smm.shutdown()
        r3)r�rr4r5r�r6rrr�>test_shared_memory_SharedMemoryManager_reuses_resource_tracker�s	zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackercs�tj���|�t���jdd�Wd�n1swY����fdd�tdd�D�}�fdd�tdd	d
�D�}tj	|dj
jd�}|�t
|�d�tj|djd�}|�t
|j�d�|dj}���tjd
kr�|�t��tj|d�}Wd�n1s�wYtj���}|�	d�}|jd	d�}	|j
j}Wd�n1s�wYtjd
kr�|�t��tj	|d�}
Wd�dS1s�wYdSdS)Nr�r�csg|]	}��t|���qSr)rr�r�Zsmm1rrr�r�zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rnr�csg|]}�j|d��qS)r�)r�)rrKr"rrr�r�re��r�r&r+�howdy)rrrr�r=r�r�r�rr�shmr&r`r�r�r�rKr�rr)rFZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2rr'Z	absent_slrr"r�-test_shared_memory_SharedMemoryManager_basics�s6
�

�

�
"��z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc	Cs�t�gd��}|�|jj�|�|jjt|��|�tt|��t|��|�	t
��|dWd�n1s8wY|�	t
��d|d<Wd�n1sQwY|�d�}d|d<|�||�d��|�|j
d�|�t|�d�t���0t�d�|�	t��
|�d�Wd�n1s�wY|�|�d	�d
�Wd�n1s�wY|�|dd�|�|dd�|�t|�d�d
|d
<|�|d
d
�d|d<|�|dd�|�|j
d�|�td��d|d<Wd�n1s�wY|�|dd�d|d<|�|dd�|�|dd�|�td��d|d<Wd�n	1�s6wY|�|dd�|�td��d|d<Wd�n	1�sYwY|�|dd�t���(t�d�|�|�d
�d�|�|�d�d�|�|�d�d�Wd�n	1�s�wY|�d�}tj||d�}zD|�|jj|jj�|�||jj�|�t|�t|��|�|j
|j
�d|d<|�|dd�|�|dd�|j��W|j��n|j��wtj|jjd�}|�|jj|jj�d|d<|�|dd�|j��|j��t��}z@|�t|�d�|�|j
d�|�|�d�d�|�	t��
|�d�Wd�n	1�sMwY|j��W|j��dS|j��w) N)r&�HoWdYgX9��vq�r�NTrr�r�rr&z8s8sdqxxxxxx?xxxxxxxx?q�ignoreZ100r�rnr�TrZsomer�z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésrXr)u	encodéess	123456789sadiosZtest03_duplicater%�Mr9iprp�any)rrr�r'r]r�r&rRr�r��
IndexErrorZ_get_packing_formatr`rxr��warnings�catch_warnings�simplefilterr=r�rbr�r0r�r�r)rFrZcurrent_formatZname_duplicateZsl_copyZsl_tetheredZempty_slrrr�'test_shared_memory_ShareableList_basics�s��
�
�


����
��
��
�

�


�z9_TestSharedMemory.test_shared_memory_ShareableList_basicsc	Cs.ttjd�D]�}|j|d��}t�td��}|�|jj�tj	||d�}t�
|�}|�|tj�|�|dd�|�
||�d|d<|�|dd�d	|d
<|�|d
d	�t�td��}|�|jj�tj	||d�}|�t|�t|��|j��|j��|j��Wd�n1s�wYqdS)NrXrr�rr9r�Zchangedr�Znewvaluerni�)r�rrrrrrr�r'r]rrr~r`ZassertIsNotr�r)rFrr�
serialized_slZdeserialized_slZ	larger_slZserialized_larger_slrrr�)test_shared_memory_ShareableList_picklingfs2
�

���z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc
Cs�ttjd�D]J}|j|d��:t�td��}tj||d�}|j��|j�	�|�
t��
t�|�Wd�n1s=wYWd�n1sLwYqdS)NrXrr�r)
r�rrrrrrrr'rr]r�rr)rFrrr2rrr�5test_shared_memory_ShareableList_pickling_dead_object�s

�����zG_TestSharedMemory.test_shared_memory_ShareableList_pickling_dead_objectc	Cs d}tjtjdd|gtjtjd��u}|j������}|�	�|�
�t��t
j}d}t��|krWt�|�t|dd�}z	tj|dd	�}Wn	tyPYnwt��|ks2td
��tjdkr~t�d|��d
�|j����}|�d|�Wd�dSWd�dS1s�wYdS)NaXif 1:
            import os, time, sys
            from multiprocessing import shared_memory

            # Create a shared_memory segment, and send the segment name
            sm = shared_memory.SharedMemory(create=True, size=10)
            sys.stdout.write(sm.name + '\n')
            sys.stdout.flush()
            time.sleep(100)
        �-Er3r3r*r�rnFr�zJA SharedMemory segment was leaked after a process was abruptly terminated.r#�/rz[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)�
subprocess�Popenr��
executable�PIPEr4�readline�strip�decoder�r-rIrJrr�r��minrr�rr�r:r&r$�
unregisterr5r`r�)rFr7r�r&�deadlinerMrrcrrr�4test_shared_memory_cleaned_after_process_termination�s>
�
��
��"�zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rPrQrRrgr�r�r�rr
rrrrr>r�r:r&r r!r(r1r3r4rArrrrr��s(
p


qr�c@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
_TestFinalizerVcCstj��|_tj��dSr)r
�_finalizer_registryr
�registry_backupr#rjrrrr!�r�z_TestFinalize.setUpcCs&t��|�tj�tj�|j�dSr)r�r�r�r
rC�updaterDrjrrrr#�sz_TestFinalize.tearDowncCs&Gdd�dt�}|�}tj||jdd�~t��|�}tj||jdd�}|�|�~t��|�}tj||jdd�|�}tj||jddd	�|�}tj||jd
dd	�|�}	tj|	|jddd	�|�}
tj|
|jd
dd	�tjd|jddd	�tjd|jddd	�t��|��t�	d�dS)Nc@r�)z)_TestFinalize._test_finalize.<locals>.FooNr�rrrrrF�rErF)r\r�)r])rq)�d10rX)rK�exitpriority)�d01r)�d02)�d03�r�i����)�STOPi����)
r�r
�Finalizer�r�r�Z_exit_functionrr:�_exit)r�rHrFr\r]Zclose_brqrFrHrIrJrrr�_test_finalize�s4z_TestFinalize._test_finalizecCs^|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|gd��dS)Nr�TcSsg|]}|�qSrr)rr�rrrrr�z/_TestFinalize.test_finalize.<locals>.<listcomp>rL)r\r]rFrJrIrHr�)	r�r�rOr}r�r�rNr�r`)rFrHrLr�r�rrr�
test_finalize�sz_TestFinalize.test_finalizec	sdd��G�fdd�dt��d�d���fdd�}���fdd	�}t��}t��}zKt�d
�t�ddd�tj|d�tj|d�g}t	�
|��t�d
�d�Wd�n1sYwY�durd��Wt�|�tj|�t�
�dSt�|�tj|�t�
�w)NcS�dSrrrrrr�cbr�z,_TestFinalize.test_thread_safety.<locals>.cbcseZdZ�fdd�ZdS)z-_TestFinalize.test_thread_safety.<locals>.Foocs"||_tj|�t�dd�d�dS)NrXr�)rG)r�r
rMr�Zrandintrj�rRrrrGsz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rPrQrRrGrrSrrrF
r�rFFc
sX�s*t�t��d�zt��Wnty%}z|�WYd}~nd}~ww�rdSdSr�)rIr�r�r
Z_run_finalizersr�rK)r�finishrr�run_finalizerss���z8_TestFinalize.test_thread_safety.<locals>.run_finalizersc
sji}�s3z�fdd�td�D�|t�d�<Wnty.}z|�|��WYd}~nd}~ww�rdSdS)Ncsh|]}���qSrrr)rFrr�	<setcomp>%r	zL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rn)r�r�Zgetrandbitsr�r#)rNr�)rFrrTrr�make_finalizerss$���z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rnr�r�T)r�r��getswitchintervalr�r��setswitchintervalr�r�r%rZ
start_threadsrIr�r�)rFrUrWZold_intervalZ
old_thresholdrVr)rFrRrrTr�test_thread_safetys6


�
��


�

z _TestFinalize.test_thread_safetyN)
rPrQrRrgr!r#rHrOrPrZrrrrrB�s
'rBc@rA)�_TestImportStarcCshddl}tj�tj�}tj�|�|�d�}|�|�}dd�|D�}dd�|D�}|�d�|�	d�|S)Nrz*.pycSs(g|]}tj�tj�|�d�d�qS)rXr)r:�path�splitext�split)rrbrrrrGs(z4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)rr)rrrrHrzmultiprocessing.__init__r)
�globr:r\�dirnamer�__file__r��escaper*r�)rFr_Zfolder�pattern�files�modulesrrr�get_module_namesBs


z _TestImportStar.get_module_namescCs�|��}tjdkr|�d�|�d�|�d�n|�d�ts%|�d�tdur.|�d�|D]'}t|�tj|}|�t	|d�|�|j
D]}|�t	||�d||f�qGq0dS)	Nr+zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes�__all__z%r does not have attribute %r)rfr�rr*r�r5r�rer{r�rg)rFrer&�mod�attrrrr�test_importMs*








���z_TestImportStar.test_importN)rPrQrRrfrjrrrrr[@sr[c@s,eZdZdZdd�Zedd��Zdd�ZdS)	�_TestLoggingrVcCsDt��}|�tj�|�|du�|�d�|�d�|�t�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr
�
SUBWARNINGr{�debug�info�	LOG_LEVEL)rF�loggerrrr�test_enable_loggingos

z _TestLogging.test_enable_loggingcCst��}|�|���dSr)rrlr�ZgetEffectiveLevel)r�rHrrrrr�_test_levelwsz_TestLogging._test_levelc	Cs�d}d}t��}t��}|j}tjdd�\}}|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�tj�|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�|�|jtd�dS)Nre�%Fr�r�)�level)rrl�loggingZ	getLoggerrvr�rmr�rtr�r`r�r�rZNOTSETrq)	rFZLEVEL1ZLEVEL2rrZroot_loggerZ
root_levelr�r�r�rrr�
test_level|s*


z_TestLogging.test_levelN)rPrQrRrgrsrHrtrxrrrrrkks
rkc@s6eZdZdZedd��Ze�ee	d�d�dd��Z
dS)	�_TestPollEintrrVcCst�d�t�|tj�dSr�)rIr�r:r�r��SIGUSR1)r�r�rrr�_killer�s
z_TestPollEintr._killerrz�requires SIGUSR1c
s�dg��fdd�}t��}t�tj|�}zA|j|j|fd�}|��z|jtjdd�}|��|�	�W|�	�n|�	�w|�
�d�|�|jd�Wt�tj|�dSt�tj|�w)NFcsd�d<dS)NTrrr��Z
got_signalrr�record�r�z._TestPollEintr.test_poll_eintr.<locals>.recordr�)r�r)
r:r�r�rzr�r{r�rIr�r�r{r`r�)rFr~r�Z
oldhandlerZkillerr�rr}r�test_poll_eintr�s
"z_TestPollEintr.test_poll_eintrN)rPrQrRrgrHr{r>rIr�r�rrrrrry�s
ryc@s eZdZe�ed�dd��ZdS)�TestInvalidHandle�skipped on Windowsc	Cs^tj�d�}zz|��WnttfyYnwWd|_nd|_w|�ttftjjd�dS)Ni�M�r9)rr�Z
Connectionr�r=rlZ_handler�r�rrr�test_invalid_handles�s��
�z&TestInvalidHandle.test_invalid_handlesN)rPrQrRr>r��WIN32r�rrrrr��s
r�c@rA)�	OtherTestcC�,Gdd�dt�}|�tjtjj|�d�dS)Nc@rA)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSr�)N�something bogusr�rFr}rrrrr�r�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSrQrr�rFr�rrrrt�r�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rPrQrRrrrtrrrr�_FakeConnection�rr��abc)r�r�r�AuthenticationErrorr�Zdeliver_challenge�rFr�rrr�#test_deliver_challenge_auth_failure�s
�z-OtherTest.test_deliver_challenge_auth_failurecCr�)Nc@r�)zEOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnectioncS�
d|_dSr�)r0rjrrrrG�rzNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkrtjjS|jdkrdSdS)NrXr�r�r�)r0rr�Z	CHALLENGEr�rrrrr�s

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSrQrrr�rrrrt�r�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rPrQrRrGrrrtrrrrr��sr�r�)r�r�rr�r�Zanswer_challenger�rrr�"test_answer_challenge_auth_failure�s
�z,OtherTest.test_answer_challenge_auth_failureN)rPrQrRr�r�rrrrr��s
r�cCs|jd7_dSrW)r�)�nsrrr�initializerr)r�c@rJ)
�TestInitializerscCs"t��|_|j��|_d|j_dSr�)r�Manager�mgrr�r�r�rjrrrr!s
zTestInitializers.setUpcCs|j��|j��dSr)r�rKr�rjrrrr#r�zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dSrW)rr�SyncManagerr��	TypeErrorr�r�r�r`r�rKr�)rFr)rrr�test_manager_initializers
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)NrX)r�)
r�r�rr�r�r�rr�r`r�r�rrr�test_pool_initializers
z&TestInitializers.test_pool_initializerN)rPrQrRr!r#r�r�rrrrr�
s
r�cCs*z	|jdd�}WdStjyYdSw)NF)�block)r�r�r�)rp�itemrrr�_this_sub_process)s
�r�cCs2t��}tjt|fd�}d|_|��|��dSr�)rrr�r�r}r�r�)rZsubProcrrr�
_test_process/s
r�cCs||Srrr�rrr�_afunc6rfr�cCs0tjdd�}|�tgd��}|��|��dS)Nr�rV)rXr�rnr�rnr}r�)rr�r�r�rr�)r�rSrrr�pool_in_process9sr�c@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCrCr)�	_delegate�_pid)rFZdelegaterrrrG@rHz_file_like.__init__cCs$t��}||jkr||_g|_|jSr)r:r�r��_cacherrrr�cacheDs

z_file_like.cachecCs|j�|�dSr)r�r�r�rrrr�Mrz_file_like.writecCs|j�d�|j��g|_dS)Nrp)r�r�r�r�r�rjrrr�flushPs
z_file_like.flushN)rPrQrRrG�propertyr�r�r�rrrrr�?s
r�c@r�)�TestStdinBadfiledescriptorcC� tjtd�}|��|��dS�Nr�)rr�r�r�r�)rFr(rrr�test_queue_in_processV�z0TestStdinBadfiledescriptor.test_queue_in_processcCr�r�)rr�r�r�r�r�rrr�test_pool_in_process[r�z/TestStdinBadfiledescriptor.test_pool_in_processcsJt��}t|����d�tj�fdd�d�}���|��dks#J�dS)Nr�cs���Sr)r�r�Zflikerrr�dr�z:TestStdinBadfiledescriptor.test_flushing.<locals>.<lambda>r�)r,r-r�r�rr�r�r)rFZsior(rr�r�
test_flushing`s
z(TestStdinBadfiledescriptor.test_flushingN)rPrQrRr�r�r�rrrrr�Tsr�c@sleZdZedd��Zddd�Zedd��Zddd	�Zd
d�Zdd
�Z	dd�Z
edd��Zdd�Zdd�Z
dS)�TestWaitcCsBtd�D]}|rt�t��d�|�|t��f�q|��dS)Nr�r*)r�rIr�r�r�r:r�r)r�re�slowr�rrr�_child_test_waitks
zTestWait._child_test_waitFc	sddlm}g}g�g}td�D]/}tjdd�\}}tj|j||fd�}d|_|��|�	�|�
|���
|�|�|j�q|ri||�D] }z|�
�}	Wnty`|�|�|�	�YqFw|�
|	�qF|sB|��t�fdd	�td
�D��}
|�||
�dS)Nrr,r�Fr�r�Tc3s$�|]
}�D]}||jfVqqdSrr()rr�r��rrrr��s�"z%TestWait.test_wait.<locals>.<genexpr>r�)�multiprocessing.connectionr-r�rr�r�r�r}r�rr�r�r�r�r}r*r�r�r`)rFr�r-�readersZmessagesr�r�rer�rur�rr�r�	test_waitss4


��
zTestWait.test_waitcCsVt��}|�|�td�D]}|rt�t��d�|�d|�d��q
|��dS)Nr�r*�%s
r�)	r�rar�rIr�r�r�rr)r�rr�rr�rrr�_child_test_wait_socket�s
z TestWait._child_test_wait_socketcCs2ddlm}t�tjdf�}|��}g}g}i}td�D]}tj	|j
||fd�}	d|	_|	��|�
|	�|�|	j�qtd�D]}|��\}
}|�
|
�g||
<q?|��|rx||�D]}
|
�d�}|sn|�|
�|
��q[||
�
|�q[|sWd�dd	�td
�D���d�}
|��D]}|�d�|�|
�q�dS)
Nrr,r�r�Trerpcss�|]}d|VqdS)r�Nrrrrrr��r-z,TestWait.test_wait_socket.<locals>.<genexpr>r�r�r�)r�r-r�r�rrgr�r�rr�r�r}r�r�r�r�r�rr�r*rr[r`)rFr�r-r�rnr�rZdicr�r�r�rrur��vrrr�test_wait_socket�s>�





�	�zTestWait.test_wait_socketcC�|�d�dSr�)r�rjrrr�test_wait_slow�rzTestWait.test_wait_slowcCr�r�)r�rjrrr�test_wait_socket_slow�rzTestWait.test_wait_socket_slowcCs�ddlm}d}t��\}}t��}|||g|�}t��|}|�|g�|�||d�|�||d�|�	d�t��}|||gd�}t��|}|�||g�|�|d�dS)Nrr,rnr�rr"皙�����?)
r�r-rr�rIrJr`r�rr�)rFr-r�r\r]r�rbr�rrr�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|��t�|�dSr)r�rIr�)r�r�Zperiodrrr�signal_and_sleep�r/zTestWait.signal_and_sleepcCs�ddlm}d}dd�}t�d�}t��\}}tj|j||fd�}|��|�|j	t
�|�|jdd��t
��}|||j	|g|d�}	t
��|}
|�|	|j	g�|�|
|d	�|�|
|d	�|�d�t
��}|||j	|gd�}	t
��|}
|�||	�||j	|g��|�|
d
�|�d�t
��}|||j	|gd�}	t
��|}
|�||	�|||j	|g��|�|
d
�|��|��dS)Nrr,rncSst|dd�d�S)NcSst|�Sr)r�r�rrrr��r�z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r)r�)r�rrrr��r�z,TestWait.test_wait_integer.<locals>.<lambda>r�r"r�r�r�)r�r-rr�r�r�r�r�r~r�r�r{r�rIrJr`r�rr�r�r�)rFr-r�Zsorted_r�r\r]r�r�rbr�rrr�test_wait_integer�s>
�

zTestWait.test_wait_integercCsfddlm}t��\}}t��}||gdd�}t��|}|�|g�|�|d�|��|��dS)Nrr,r9r�rX)	r�r-rr�rIrJr`r�r)rFr-r\r]rMrbrrr�test_neg_timeoutszTestWait.test_neg_timeoutNro)rPrQrRrHr�r�r�r�r�r�r�r�r�r�rrrrr�is



	#
+r�c@s4eZdZe�ed�dd��Ze�ed�dd��ZdS)�TestInvalidFamilyr�cC�<|�t��tj�d�Wd�dS1swYdS)Nz\\.\test�r�r=rr�r�rjrrr�test_invalid_family�"�z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCr�)Nz/var/test.piper�rjrrr�test_invalid_family_win32!r�z+TestInvalidFamily.test_invalid_family_win32N)	rPrQrRr>r�r�r�rIr�rrrrr�s



r�c@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dSr)r�rbr��flags�r�rHrrr�run_in_grandchild+r�zTestFlags.run_in_grandchildcCsrddl}tjdd�\}}tj|j|fd�}|��|��}|��|��|��t	t
j�|f}t|�
|��dS)NrFr�r�)�jsonrr�r�r�r�r�r�rrbr�r��printr)r�r�r�rer��grandchild_flagsr�rrr�run_in_child/szTestFlags.run_in_childcCsHddl}d}t�tjdddd|g�}|�|�d��\}}|�||�dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()r5z-Sz-Or3r�)r�r7Zcheck_outputr�r9rr=r`)rFr��progr�Zchild_flagsr�rrr�
test_flags<s�zTestFlags.test_flagsN)rPrQrRrHr�r�r�rrrrr�*s

r�c@r�)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)NrXr�r�)rIr�r�rrr�r�)r��childrrHrrr�
_test_timeoutKs


zTestTimeouts._test_timeoutc	Cs�t��}zSt�d�tjdd�\}}tjjdd�}tj|j||j	fd�}|�
�|��|�|�
�d�|��|��}|�|�
�d�|��|��t|�Wt�|�dSt�|�w)	Nr*Tr��AF_INETr�r�r�r�)r�ZgetdefaulttimeoutZsetdefaulttimeoutrr�r�r�r�r�rr�rr`r�r�r")rFZold_timeout�parentr�r�r�rHrrrr�Ts$
�
zTestTimeouts.test_timeoutN)rPrQrRrHr�r�rrrrr�Js
r�c@rk)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkr,tjj	�
||�\}}}|�|d�|�d|�dStjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyrr�sRuntimeErrors123)rr
r:r\r�r`rar�rr4Zassert_python_failurer`r�r5rq)rFrr&r�r8rcrrr�test_noforkbombmszTestNoForkBomb.test_noforkbombN)rPrQrRr�rrrrr�lrrr�c@r�)�TestForkAwareThreadLockcCsV|dkrtj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)NrXr�)
rr�r�r�rr"r�r�r
�_afterfork_registry)r�r�rHr�rrrr��s
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrnr�)
rr�r
ZForkAwareThreadLockr�r�r�r�r�rr�r"ZassertLessEqual)rFr�rer�Zold_sizer�Znew_sizerrrr��s
z!TestForkAwareThreadLock.test_lockN)rPrQrRrHr�r�rrrrr�}s

r�c@s0eZdZdd�Zdd�Zedd��Zdd�Zd	S)
�TestCloseFdscCs\trt����St����}g}|dkr"|�|�t�|�}|dks|D]}t�|�q$|S)Nr*)r�r��detachr�r:�dupr)rFrkZto_closerSrrr�get_high_socket_fd�s

�zTestCloseFds.get_high_socket_fdcCs.trtjtjtj|d���dSt�|�dS)N)rx)r�r�r��SOCK_STREAMrr:)rFrkrrrr�szTestCloseFds.closec
Cs^zt�|tjtj�}Wnty#}z|�|�WYd}~dSd}~ww|��|�d�dSr)r�Zfromfdr�r�r�r�r)r�rHrkrr�rrr�_test_closefds�s��zTestCloseFds._test_closefdsc	Cs�tst�d��t��\}}|��}z)tj|j||fd�}|��|�	�|�
�}t|�W|�	|�|�	�|�	�n|�	|�|�	�|�	�wt��dkrW|�
|d�dSd}|�|t�|�|jtjkpk|j|k|�dS)Nzrequires fd picklingr�ri6')r�r>r?rr�r�r�r�r�rr�r"r
rr~rlr{rmr�Zwinerror)rFr�r�rkr�r�ZWSAENOTSOCKrrr�test_closefd�s2
�



�

�zTestCloseFds.test_closefdN)rPrQrRr�rrHr�r�rrrrr��s
	r�c@sfeZdZeejej�Zedd��Z	e
�ee
d�d�dd��Zedd��Ze
�ee
d�d�d	d
��ZdS)�TestIgnoreEINTRcCsFdd�}t�tj|�|�d�|��}|�|�|�d|j�dS)NcSrQrr�rA�framerrrr��r�z-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�rzr�r�rt�
CONN_MAX_SIZE)r�rHr�rSrrr�_test_ignore�s

zTestIgnoreEINTR._test_ignorerzr|cCs�t��\}}zctj|j|fd�}d|_|��|��|�|��d�t	�
d�t�|j
tj�t	�
d�|�d�|�|��d�t	�
d�t�|j
tj�|�|��d|j�t	�
d�|��W|��dS|��w)Nr�Tr�r*i�r�)rr�r�r�r}r�rr`r�rIr�r:r�r�r�rzr�rrr�r�r�rrr�test_ignore�s(�





zTestIgnoreEINTR.test_ignorecCsddd�}t�tj|�tj���}|�|j�|��}|�d�Wd�dS1s+wYdS)NcSrQrrr�rrrr�r�z6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�rzrr�r�r�rr�)r�rHr�r�r\rrr�_test_ignore_listeners"�z%TestIgnoreEINTR._test_ignore_listenercCs�t��\}}zCtj|j|fd�}d|_|��|��|��}t�	d�t
�|jt
j�t�	d�tj�|�}|�|��d�|��W|��dS|��w)Nr�Tr*r�)rr�r�r�r}r�rr�rIr�r:r�r�r�rzr�r�r`r�)rFrHrLr�rr�rrr�test_ignore_listeners �


z$TestIgnoreEINTR.test_ignore_listenerN)rPrQrR�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZEr�rHr�r>rIr�r�r�r�r�rrrrr��s
	

	r�c@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|�t���dSr)r�rr
r�rrr�_check_context"�zTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NFr�r�)	r�r�r�r�rr�r�r`r
)rFr�r�rer�Zchild_methodrrr�
check_context&szTestStartMethod.check_contextc	CszdD]8}zt�|�}Wn	tyYqw|�|��|�|�|��|�|�t|jd�|�t|jd�|�|�qdS)N�rrr<r)	rr�r=r`r
rr��set_start_methodr�)rF�methodr�rrrr�0s��zTestStartMethod.test_contextc
Cs�t�t�d}t��}zWdD]K}z	tj|dd�Wn	ty"Yqw|�t��|�t��}|�|��|�|�t	|�j
���|��|�|j
j
���|��|�t�|d7}qWtj|dd�ntj|dd�w|�|d�dS)Nrr�T�ZforcerX)r�set_forkserver_preload�PRELOADr
r�r=r`r�r{r�rP�lower�
startswithr�r�r�)rFr0Z
old_methodr�r�rrr�test_set_get<s,
��

� zTestStartMethod.test_set_getcCs^t��}tjdkr|�|dg�dS|�|ddgkp+|ddgkp+|gd�kp+|gd�k�dS)Nr+rrr�)rrr<)rZget_all_start_methodsr�rr`r{)rF�methodsrrr�test_get_allRs

�
�
�zTestStartMethod.test_get_allcCs�t��dkr|�d�tj�tj�t�d�}tj	j
�|�\}}}|��}|��}|�
�dks2|dkrAt|�t|�|�d�dSdS)Nr<z*test only relevant for 'forkserver' methodz
mp_preload.py�okrpz(failed spawning forkserver or grandchild)rr
rwr:r\r�r`rar�rr4r5r=rqr�r�)rFr&r�r8rcrrr�test_preload_resources\s
�z&TestStartMethod.test_preload_resourcesN)
rPrQrRrHr�r�r�r�r�r�rrrrr�!s


r�r�c@sPeZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zedd��Z	d
d�Z
dd�ZdS)�TestResourceTrackerc
Cs�d}tjD]�}|j|d���|dkr	Wd�qt��\}}tjtjdd|j	||d�g|gtj
d�}t�|�t|dd	d
��}|�
����d�}|�
����d�}Wd�n1s]wYt||�|��|��t��tj}	t��|	kr�t�d�zt||�Wnty�}
z|�|
jtjtjf�WYd}
~
nd}
~
wwt��|	ks|td
|�d���|j���d�}|j��d�	|�}|� ||�|� |d|�Wd�n1s�wYqdS)Na+if 1:
            import time, os, tempfile
            import multiprocessing as mp
            from multiprocessing import resource_tracker
            from multiprocessing.shared_memory import SharedMemory

            mp.set_start_method("spawn")
            rand = tempfile._RandomNameSequence()


            def create_and_register_resource(rtype):
                if rtype == "semaphore":
                    lock = mp.Lock()
                    return lock, lock._semlock.name
                elif rtype == "shared_memory":
                    sm = SharedMemory(create=True, size=10)
                    return sm, sm._name
                else:
                    raise ValueError(
                        "Resource type {{}} not understood".format(rtype))


            resource1, rname1 = create_and_register_resource("{rtype}")
            resource2, rname2 = create_and_register_resource("{rtype}")

            os.write({w}, rname1.encode("ascii") + b"\n")
            os.write({w}, rname2.encode("ascii") + b"\n")

            time.sleep(10)
        )r'Znoopr5r3)rer')Zpass_fdsr5r�T)rgr�rzA z= resource was leaked after a process was abruptly terminated.rXz8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r$r%rrr:�piper7r8r�r9rxr:rr_r;rqr=r(r�r-rIrJrr�r�rlr�rmZENOENTZEINVALr�r5r`ZassertRegex)
rFr7r'r�rer�rbZname1Zname2r@r�rcr�rrr�test_resource_trackerms^
���
�

���

�
�����z)TestResourceTracker.test_resource_trackerc
Csrddlm}|j}|durt�|tj�tj|tjd�t	�
��t	�d�|��Wd�n1s5wY|j}t�||�t
�d�t�d�}t	j
dd��\}t	�d	�|��}|��|��t�|�}~t��|�|��|r�|�t|�d
�|d}	|�t|	jt��|�dt|	j �v�n|�t|�d�Wd�dSWd�dS1s�wYdS)Nr��_resource_tracker)r�r*rBrT)r~�alwaysrXzresource_tracker: process died)!� multiprocessing.resource_trackerrr�r:r�r�r�rZwait_processr.r/r0r@rIr�rr�r�r�r�r�r�r�r�r�r`r�r{�
issubclass�category�UserWarningrR�message)
rFrAZ
should_dierr�r�Zall_warnr�rZthe_warnrrr�check_resource_tracker_death�sB


�



��"�z0TestResourceTracker.check_resource_tracker_deathcC�|�tjd�dSr�)r	r�rCrjrrr�test_resource_tracker_sigint�r�z0TestResourceTracker.test_resource_tracker_sigintcCr
r�)r	r�r�rjrrr�test_resource_tracker_sigterm�r�z1TestResourceTracker.test_resource_tracker_sigtermcCr
r�)r	r�r�rjrrr�test_resource_tracker_sigkill�r�z1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}|��|jd|fv}||��M}|�|�dS)Nrr)rrr@r�Z_check_aliver�)rHr�rZreusedrrr�_is_resource_tracker_reused�s
z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}|��|j}tjdd�\}}tj|j||fd�}|��|�	�}|�
�|��|��|�|�dS)NrrFr�r�)
rrr@r�rr�r�rr�r�r�rr{)rFrr�r�rer�Zis_resource_tracker_reusedrrr�test_resource_tracker_reused�s�z0TestResourceTracker.test_resource_tracker_reusedcCsPd}ddt|�}|�t��t�||�Wd�dS1s!wYdS)Nrr\r�)r�r�r=r$�register)rFr'Ztoo_long_name_resourcerrr�test_too_long_name_resources
"�z/TestResourceTracker.test_too_long_name_resourceN)rPrQrRrr	rrr
r�rrrrrrrr�isJ%
	r�c@s8eZdZedd��Zdd�Zdd�Zejj	dd��Z
d	S)
�TestSimpleQueuecCs>|��z|�|���|�|���W|��dS|��wr)r-rorur�r�rrr�_test_emptys
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)Nr�TF)r�SimpleQueuer�r�rr}r�r{rur�r-r�r`r�r�)rFrr~rr(rrr�
test_emptys"�zTestSimpleQueue.test_emptycCst��}|��|��dSr)rrr�rFrrrrr1szTestSimpleQueue.test_closecCs0t��}|��|�|jj�|�|jj�dSr)rrrr{Z_readerr�Z_writerrrrr�test_closed8szTestSimpleQueue.test_closedN)rPrQrRrHrrrr�rZcpython_onlyrrrrrr
s
	rc@rk)�TestPoolNotLeakOnFailurecs�d�g�G��fdd�d�}|�td��tjjdtjj|d�d�}|��|�	�Wd�n1s4wY|�
tdd	��D���dS)
Nrncs<eZdZ�fdd�Z�fdd�Zdd�Zdd�Zd	d
�ZdS)zRTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcesscs d|_d|_d|_��|�dS)NzFake Process)r&r�r�r�)rFr�)�forked_processesrrrGIsz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__cs"�dkrtd���d8�d|_dS)Nr�Manually induced OSErrorrXr)rlr�rj)�will_fail_inrrr�Os
zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startcSr�)N�stoppingr�rjrrrr�Vrz\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatecSs|jdkr
d|_dSdS)NrZstoppedr�rjrrrr�Ys

�zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joincSs|jdkp	|jdkS)Nrrr�rjrrrr|]sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rPrQrRrGr�r�r�r|r�rrrr�FailingForkProcessHsrrrn)r�)�contextcsr+rr,)rr!rrrr�fr-zITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r�rlrr�r�r>rZ	MagicMockrr�r�r,)rFrr�rrr�test_release_unused_processesBs
�
��z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rPrQrRr rrrrr@src@sdeZdZdZejjZdd�Zdd�Z	e
dd��ZeZdd	�Z
d
d�Ze
dd
��Zdd�Ze
dd��ZdHdd�Ze
dd��ZdHdd�Ze
dd��ZdIdd�Zdd�Ze
d d!��Zd"d#�Ze
d$d%��Zd&d'�Ze
d(d)��Zd*d+�Ze
d,d-��ZdJd/d0�Zd1d2�Z e
d3d4��Z!d5d6�Z"e
d7d8��Z#d9d:�Z$e
d;d<��Z%d=d>�Z&e
d?d@��Z'dAdB�Z(e
dCdD��Z)dEdF�Z*dGS)K�TestSyncManagerTypesa}Test all the types which can be shared between a parent and a
    child process by using a manager which acts as an intermediary
    between them.

    In the following unit-tests the base type is created in the parent
    process, the @classmethod represents the worker process and the
    shared object is readable and editable between the two.

    # The child.
    @classmethod
    def _test_list(cls, obj):
        assert obj[0] == 5
        assert obj.append(6)

    # The parent.
    def test_list(self):
        o = self.manager.list()
        o.append(5)
        self.run_worker(self._test_list, o)
        assert o[1] == 6
    cCs|��|_|j��d|_dSr)�
manager_classrUr�r(rjrrrr!�s


zTestSyncManagerTypes.setUpcCsB|jdur|j��r|j��|j��|j��d|_d|_dSr)r(r|r�r�rUrKrjrrrr#�s



zTestSyncManagerTypes.tearDowncCst��dSr)rZ
reap_childrenr�rrrr���zTestSyncManagerTypes.setUpClasscCs�t|j�t��}d}tt���dkrDt�|�|d9}t��|}|dkr:dtj	_
t	�dt���d|�d��dStt���dksdSdS)	NrrXr�r�T�"multiprocessing.Manager still has � active children after � seconds)r"r(rIrJr�rr�r�r�r�environment_altered�
print_warning)rF�
start_timerMr�rrr�wait_proc_exit�s 

�
��z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)Nr�Tr)rr�r(r}r�r*r`r�)rFZworkerr�rrr�
run_worker�s

zTestSyncManagerTypes.run_workercCs*|��sJ�|��|��|�d�dS�Nr)r'r-r#�r�r�rrrr��sz TestSyncManagerTypes._test_eventcCs:|j��}|��|�|j|�|��rJ�|�d�dSr,)rUr�r�r+r�r'r-�rFr
rrrr��s

zTestSyncManagerTypes.test_eventcC�|��dSr�r�r-rrr�
_test_lock�r#zTestSyncManagerTypes._test_lockr�cCs6t|j|��}|�|j|�|��|�t|j�dSr)r6rUr+r1r�r�r��rFZlnamer
rrrr��szTestSyncManagerTypes.test_lockcC�|��|��dSr�r�r�r-rrr�_test_rlock��z TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dSr)r6rUr+r5r2rrrr���zTestSyncManagerTypes.test_rlockcCr/rr0r-rrrr��r#z$TestSyncManagerTypes._test_semaphorer�cCs(t|j|��}|�|j|�|��dSr)r6rUr+r�r�)rF�snamer
rrrr��sz#TestSyncManagerTypes.test_semaphorecCre)Nr�)r8)r�rjrrrr��rz+TestSyncManagerTypes.test_bounded_semaphorecCr3rr4r-rrr�_test_condition�r6z$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dSr)rUr�r+r9r.rrr�test_condition�s
z#TestSyncManagerTypes.test_conditioncCs|jdksJ�|��dSrm)r%r;r-rrr�
_test_barrier�rz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dSrm)rUrr+r;r.rrrr,�sz!TestSyncManagerTypes.test_barriercCs*|�	Wd�dS1swYdSrrr-rrr�
_test_pool�s"�zTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nr�rV)rUr�r+r<r.rrr�	test_pool�r7zTestSyncManagerTypes.test_poolcCsd|��dksJ�|��sJ�|��rJ�|��dksJ�|��r"J�|��dks*J�|��s0J�dS�Nr�rnr})rvryrur�r-rrr�_test_queue�sz TestSyncManagerTypes._test_queuercCsNt|j|�d�}|�d�|�d�|�|j|�|��sJ�|��r%J�dSr>)r6rUror+r?rury)rFZqnamer
rrr�
test_queues

zTestSyncManagerTypes.test_queuecCr�)Nr�)r@rjrrr�test_joinable_queue	rz(TestSyncManagerTypes.test_joinable_queuecCst|ddksJ�|�d�dksJ�|�d�dksJ�|��|��|D]}q$t|�dks/J�|�d�dks8J�dS)NrrnrX)r0r�r��reverser�r�)r�r�rSrrr�
_test_listszTestSyncManagerTypes._test_listcCs>|j��}|�d�|�|j|�|rJ�|�t|�d�dS)Nrnr)rUr�r�r+rCr`r�r.rrrr�s


zTestSyncManagerTypes.test_listcCs�t|�dksJ�|ddksJ�|�d�dksJ�t|���dgks$J�t|���dgks/J�t|���dgks:J�|��ddiksDJ�|��dksLJ�dS)NrXr�rn)r�rn)r�r�r�r+r�r[r
�popitemr-rrr�
_test_dictszTestSyncManagerTypes._test_dictcCs<|j��}d|d<|�|j|�|rJ�|�t|�d�dS)Nrnr�r)rUr�r+rEr`r�r.rrrr�*s

zTestSyncManagerTypes.test_dictcCs,|jdksJ�|��dksJ�|�d�dS)NrXr�)rar�r�r-rrr�_test_value1sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�rXr�)rUrr+rFr`rar�r.rrrrd7szTestSyncManagerTypes.test_valuecCsH|ddksJ�|ddksJ�t|�dksJ�t|�ddgks"J�dS)NrrXr�)r�r�r-rrr�_test_array=sz TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rrX)rUryr+rGr.rrrr|DszTestSyncManagerTypes.test_arraycCs |jdksJ�|jdksJ�dSrr�r-rrr�_test_namespaceHsz$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dSr)rUr�rSrTr+rHr.rrrr�Ms
z#TestSyncManagerTypes.test_namespaceNr�)r�)r)+rPrQrRr�rrr�r"r!r#rHr�r�r*r+r�r�r1r�r5r�r�r�r�r9r:r;r,r<r=r?r@rArCr�rEr�rFrdrGr|rHr�rrrrr!isf












	





r!c@rk)�TestNamedResourcecCsvtj}|�tj|�t|ddd��}|�t�d��Wd�n1s$wYtj	j
�|�\}}}|�|d�dS)NrerXrYa[                import multiprocessing as mp

                ctx = mp.get_context('spawn')

                global_resource = ctx.Semaphore()

                def submain(): pass

                if __name__ == '__main__':
                    p = ctx.Process(target=submain)
                    p.start()
                    p.join()
            r�)
rr\r�r]r_r��textwrap�dedentr�rr4r5r`)rFrarbr�r8rcrrr� test_global_named_resource_spawnUs�z2TestNamedResource.test_global_named_resource_spawnN)rPrQrRrLrrrrrITrrrIc@rk)�MiscTestCasecCstj|ttjddgd�dS)NZSUBDEBUGrn)ZextraZnot_exported)rZcheck__all__rrgrjrrr�test__all__rs
�zMiscTestCase.test__all__N)rPrQrRrNrrrrrMqrrrMc@s$eZdZedd��Zedd��ZdS)�	BaseMixincCstjj��tj��f|_dSr)rr!�	_danglingr
r��danglingr�rrrr�}s

�zBaseMixin.setUpClasscCs�tj��ttjj�t|jd�}|r dtj_t�	d|���d}tt
j�t|jd�}|r<dtj_t�	d|���d}dS)NrT�Dangling processes: rX�Dangling threads: )r�rrr�rr!rPrQr'r(r�)r�rTrVrrrr��s
zBaseMixin.tearDownClassN)rPrQrRrHr�r�rrrrrO|s

rOc@s�eZdZdZejZejZeej�Zeej	�Z	eej
�Z
eej�Zeej�Zeej
�Z
eej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�ZdS)r�rTN)rPrQrRrvrr�r�r�ryr�r�r�r�rr�r�r�r�r�r�r�rrryr_rxrrrrr��s,
















r�cs
eZdZdZejZee�d��Z	ee�d��Z
ee�d��Zee�d��Zee�d��Z
ee�d��Zee�d��Zee�d	��Zee�d
��Zee�d��Zee�d��Zee�d
��Zee�d��Zee�d��Zedd��Ze�fdd��Ze�fdd��Z�ZS)�ManagerMixinrUz
manager.Queuezmanager.JoinableQueuezmanager.Lockz
manager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionz
manager.Eventzmanager.Barrierz
manager.Valuez
manager.Arrayzmanager.listzmanager.dictzmanager.NamespacecOs|jj|i|��Sr)rUr�)r�rKrLrrrr��r�zManagerMixin.Poolcst���t��|_dSr)r�r�rr�rUr�r�rrr��r�zManagerMixin.setUpClasscs�t��}d}tt���dkr<t�|�|d9}t��|}|dkr4dtj_t�	dt���d|�d��ntt���dkst
��|j�
�d	krXdtj_t�	d
�t�	|j���|j��|j��d|_t���dS)NrrXr�r�Tr$r%r&rz5Shared objects which still exist at manager shutdown:)rIrJr�rr�r�r�rr'r(r�r�rUZ_number_of_objectsZ_debug_inforKr�r�r�)r�r)rMr�r�rrr��s0
�
��


zManagerMixin.tearDownClass)rPrQrRrvrr�r��operator�
attrgetterrr�r�r�r�r�r�r�rrryr�r�r�rHr�r�r�rrrr�rrT�s.
rTc@s�eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinrVN)rPrQrRrvrZdummyr�r�r�ryr�r�r�rr�r�r�r�r�r�r�rrryrrrrrW�s&rWc
sT|d}t�}hd�}|��D]z\}}t|t�sqt|t�rm|tur#qt|j�|ks/J|j��|jD]9}d|��|dd�}||��d}	Gdd�d||	t	j
�}
|dkr^t�d	�|
�}
||
_
|
_||
_|
||<q2qt|t	j
�r�Gd
d�d|t�}
||
_
|
_||
_|
||<qddg�dg����fdd�}��fd
d�}||d<||d<dS)NrP>rTrUrVZWithrX�Mixinc@r��z*install_tests_in_module_dict.<locals>.TempNr�rrrr�TemprErZrUric@r�rYr�rrrrrZrEcs�t�t�tj��tjj���d<tj���d<tjdd��d<z	tj	�dd�Wnt
y8t��d��wt
j�d�rRzt��}WntyQt�d��wt�t��t���t�dS)	NrrXT)Z
allow_noner�z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr�r�r!Z_cleanuprPr
r�r
r�r=r>r?r�rr�r�rlr@r
Zget_temp_dirrlrmrqrh�rQ�old_start_method�start_methodrr�setUpModule"s*

��
�z1install_tests_in_module_dict.<locals>.setUpModulecs�d}tj��tj�ddd�ttjj�t�d�}|r,d}dtj_t�	d|���d}tt
j�t�d�}|rId}dtj_t�	d|���d}|rRt�d�tj
��dS)	NFrTr�rRrXrSr)r�rrrr�r�r!rPr'r(r�rIr�r
Z_cleanup_tests)Z
need_sleeprTrV)rQr]rr�tearDownModule8s$

z4install_tests_in_module_dict.<locals>.tearDownModuler_r`)�globalsr+rr�rrSr�rg�
capitalizer>�TestCaser�requires_hashdigestrPrRrQr�)
Zremote_globsr^rQZlocal_globsZ	ALL_TYPESr&�baseZtype_ZnewnamerXrZr_r`rr\r�install_tests_in_module_dicts@



�
�rf�SemLockzSemLock not availabler[z
Linux onlyc@rk)�SemLockTestscCs>Gdd�dtj�}dt����}|ddd|d�}t�|�dS)Nc@r�)z3SemLockTests.test_semlock_subclass.<locals>.SemLockNr�rrrrrg^rErgztest_semlock_subclass-rXrr�F)r	rgr:r�Z
sem_unlink)rFrgr&rrrr�test_semlock_subclass]sz"SemLockTests.test_semlock_subclassN)rPrQrRrirrrrrhYsrhrG)�r>Z
unittest.mockrr�rJrIr,r�r�r:r�rmr�rzr�r�rwr7r�rUrr�r.Ztest.supportr�Ztest.support.script_helperrrrrrrr�
import_moduler	Z*skip_if_broken_multiprocessing_synchronizer�r�rZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr!Zmultiprocessing.queuesr
rZHAVE_SEND_HANDLEr��ImportErrorZmultiprocessing.sharedctypesrr
r�rZ	HAS_SHMEMr�Zcheck_sanitizerr?rr r"r&r$r(rnrqr�rYr�r�r�r6Z
HAVE_GETVALUErr�r-r0r;r�r�Zctypesr4r5r6r7r�r@rBrSrirlrsr�rKrUrwr{r|r�r�r�r�r�rr	rrrMrtr�r�r�r�r�r�r=r�r�r�rrrr%r:r;r�r<rArBrDrrIrrUrVrXr[r`r\rdrjrsrqr�r�r�rIr�r�r�r�r�rBrcr[rkryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr!rIrMrOr�rTrWrfr�rhrrrr�<module>s�

����

�
�-WG6*39FS
 
	j(H:
14"0
Rh
8
{+E"!2 "BCH�#3)k=W