HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.10/test/__pycache__/_test_multiprocessing.cpython-310.pyc
o

�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�7/usr/local/lib/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,)�handle�timeoutrrr�wait_for_handle�sr1�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.r3�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��rAc@�eZdZdd�Zdd�ZdS)�
TimingWrappercC�||_d|_dSr)�func�elapsed)�selfrErrr�__init__��
zTimingWrapper.__init__cOs:t��}z|j|i|��Wt��||_St��||_wr)�time�	monotonicrErF)rG�args�kwds�trrr�__call__�s zTimingWrapper.__call__N��__name__�
__module__�__qualname__rHrOrrrrrC�srCc@s,eZdZdZdd�Zdd�Zdd�ZeZdS)	�BaseTestCase)�	processes�manager�threadscCstr|�||d�dSdS�N�)�
CHECK_TIMINGS�assertAlmostEqual�rG�a�brrr�assertTimingAlmostEqual�s�z$BaseTestCase.assertTimingAlmostEqualcGs.z||�}Wn
tyYdSw|�||�Sr)�NotImplementedError�assertEqual)rG�valuerErL�resrrr�assertReturnsIfImplemented�s�z'BaseTestCase.assertReturnsIfImplementedcG�td��)Nz#shouldn't try to pickle a test case)r`)rGrLrrr�
__reduce__��zBaseTestCase.__reduce__N)rQrRrS�
ALLOWED_TYPESr_rdrf�
__reduce_ex__rrrrrT�s
rTcCsZz|��WSty,z|jWYSty+z|jWYYSty*t�wwwr)�	get_valuer=Z_Semaphore__value�_valuer`�rGrrrrj�s
���rjc@�eZdZdd�ZdS)�
DummyCallablecCst|t�sJ�|�d�dS�N�)rrn�put)rG�q�crrrrO�szDummyCallable.__call__N)rQrRrSrOrrrrrn��rnc@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�rUrWcCs�|jdkr|�d�|j��|��}|j}|�|���|�|j�|�|t	�|�t
|�dk�|�|jt
���|�|jd�dS)NrW�test not appropriate for {}r)�TYPE�skipTest�format�current_process�authkey�
assertTrue�is_alive�daemon�assertIsInstance�bytes�lenra�identr;�getpid�exitcode)rG�currentr|rrr�test_current�s
z_TestProcess.test_currentcCsz|jdkr|�d�|j��|j|jd�}|�|j|��j�|j|jdd�}|�|j�|j|jdd�}|�	|j�dS)NrWrw��targetT�r�rF)
rxryrz�Process�_testrarr{r}�assertFalse)rGZproc0Zproc1�proc2rrr�test_daemon_arguments
z!_TestProcess.test_daemon_argumentcOsV|��}|�|�|�|�|�|j�|jdkr)|�t|j��|�|j�dSdS)NrW)r{rqr&rxr�r|�pid)�clsrrrLrMr�rrrr�
s


�z_TestProcess._testcCs�|jdkr|�d�|j��|�|���|jdd�\}}|j|j|fd�}|��|�	�|�
�\}}|�||��j
�|�|t���|�||��j�dS)NrWrwF��duplex�r�rL)rxryrz�assertIsNone�parent_process�Piper��_test_send_parent_process�start�join�recvrar{r�r;r�r&)rG�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)
NrWrwFr�r��r0z(Could not communicate with child process�alive�	not alive)rxryrzr�r��_test_create_grandchild_processr��pollr�LONG_TIMEOUT�AssertionErrorr�ra�	terminater�)rGr�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�rJ�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)NrY��gR���Q@)�helloZbyeZSomeProcess)r�rL�kwargsr&TrWFr)r�Eventr�r�rr{rxrar|r~�assertNotIn�active_childrenr}�type�listr�r��assertIn�getr&r�r�r )rGrr�erLr�r&r�r�rrr�test_processQs@



�

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


z._TestProcess.test_process_mainthread_native_idcCst��j}|�|�dSr)r�r�r�rq)r�rrZmainthread_native_idrrrr���
z/_TestProcess._test_process_mainthread_native_idcC�t�d�dS)N�d�rJr��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)NrWrwr�Trr.r:rY�alarmcstd���)Nzjoin took too long: %s��RuntimeError�rL�r�rr�handler��z+_TestProcess._kill_process.<locals>.handler�
F)rxryrzr�r�rr�rar~r�r�r�rCr�r_rFrJr��hasattr�signal�SIGALRMr�r�)rG�methr�r�Zold_handlerrr�r�
_kill_process�sB






�z_TestProcess._kill_processcC�0|�tjj�}tjdkr|�|tj�dSdS�N�nt)	r�rr�r�r;r&rar��SIGTERM�rGr�rrr�test_terminate��
�z_TestProcess.test_terminatecCr�r�)	r�rr��killr;r&rar��SIGKILLr�rrr�	test_kill�r�z_TestProcess.test_killcCsHzt��}Wntyd}Ynw|�t|�tu�|�|dk�dSrX)r�	cpu_countr`r}r��int)rGZcpusrrr�test_cpu_count�s�z_TestProcess.test_cpu_countcCsp|�t|���t�|jtjtfd�}|�||���d|_	|�
�|�||���|��|�||���dS�Nr�T)
rar�r�r�r�rJr��DELTAr�rr�r�r��rGr�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�rrY)	r�r�rJr�r�r��appendr�ra)rGr�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)NrWrwr�r.r�rY)rxryrzr�r�r��assertRaisesr>�sentinelr��
addCleanupr�r�r�r�r1�setr})rGr�r�r�rrr�
test_sentinels
�z_TestProcess.test_sentinelrNcCs|dur|��t�|�dSr)r��sys�exit)r��rcrrrrr�_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)NrWrwrr)r�r�TFr)rxryrzrr�rrr�rar~r�r>rrqr�r�r��weakref�ref�gc�collect�assertIsr )rGrrr��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)
NrWrw�spawnrpr�csg|]
}�j�jdd��qS))�{�G�z�?r�)r�r���.0r�rlrr�
<listcomp>Js�z4_TestProcess.test_many_processes.<locals>.<listcomp>rcsg|]	}�j�jd��qS)r�)r�r�r
rlrrrSs����MbP?r��darwin)rxryrzr�get_start_methodr�r�r"rar�rJr�r�r;r&r�r�r��platformr�r�r�)rG�sm�N�procsr�Z	exitcodesrrlr�test_many_processesBs>

�


�






�z _TestProcess.test_many_processescCsnt�}t�|�}|��}|j|||fd�}~|��|��t��|�	|�d�|�
|��d�t|�dS)Nr�rp)
rnrrrr�r�r�rrrrar�r )rGrsrrrr�rrr�test_lose_target_refes
z!_TestProcess.test_lose_target_refcCs|�t���|��dSr)rqrZfd_countr-)rG�evtrrrrr�_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)	NrWrw�forkrpcs g|]}�j�j��fd��qS�r�)r�rr
�rrrrGrrr�s�z8_TestProcess.test_child_fd_inflation.<locals>.<listcomp>c�g|]}����qSr�r�r
�rrrrr��rY)rxryrzrrr�rr�r�rar�r�r�r )rGrrrr�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��?�rJr�r�r�rrr�func1��
z2_TestProcess._test_wait_for_threads.<locals>.func1cr!)N�)rJr��clearrr$rr�func2�r&z2_TestProcess._test_wait_for_threads.<locals>.func2r�Tr�)r��Threadr�)rGrr%r)rr$r�_test_wait_for_threads�sz#_TestProcess._test_wait_for_threadscCsX|jdkr|�d�|j��|��}|j|j|fd�}|��|��|�|�	��dS)NrWrwr�)
rxryrzr�r�r+r�r�r}�is_set)rGr�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�)rGrZbreak_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�)r1r2r�getattrr�r3r�r�r7r�r�r}r,rar�)rGZstreamsr4r6�
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)Nr8)rr/r�r)r;r�r�r�r7r�r�r}r,rar�r3)rGr4r5r<rr-rrr�test_error_on_stdio_flush_2�s

���z(_TestProcess.test_error_on_stdio_flush_2r.cCst�|�|��dSrr#)rGrr�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)
NrWrw�
forkserverr)�_forkserverr"r��@)r�)rxryrzrrZmultiprocessing.forkserverrB�ensure_runningr�r�r?r�Z_forkserver_pidr;r�rJr�r�r}r,rar�r�)
rG�signumrrBr�rr-r�Zevt2r�rrr�check_forkserver_death�s.
z#_TestProcess.check_forkserver_deathcCs|�tj�dSr)rGr��SIGINTrlrrr�test_forkserver_sigint
�z#_TestProcess.test_forkserver_sigintcCstjdkr
|�tj�dSdSr�)r;r&rGr�r�rlrrr�test_forkserver_sigkills
�z$_TestProcess.test_forkserver_sigkill)rN�r.).rQrRrSrhr�r��classmethodr�r�r�r�r�r�r�r?�
skipUnlessr��_HAVE_THREAD_NATIVE_IDr�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrr r+r.r7r=r>r?rGrIrKrrrrru�sl
	


(



3


 #

&ruc@�,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�_UpperCasercCs tj�|�t��\|_|_dSr)rr�rHr��
child_conn�parent_connrlrrrrHsz_UpperCaser.__init__cCs<|j��t|jjd�D]
}|j�|���q|j��dSr)rSr�iterrRr�r��upper�rGrrrr�runs
z_UpperCaser.runcCs&t|�tusJ�|j�|�|j��Sr)r��strrSr�r�rVrrr�submit$s
z_UpperCaser.submitcCs$|j�d�|j��|j��dSr)rSr�rrRrlrrr�stop)s
z_UpperCaser.stopN)rQrRrSrHrWrYrZrrrrrQs
rQc@s@eZdZdZdd�Zdd�Zedd��Zedd	��Zd
d�Z	dS)
�_TestSubclassingProcess�rUcCsLt�}d|_|��|�|�d�d�|�|�d�d�|��|��dS)NTr�ZHELLOZworldZWORLD)rQrr�rarYrZr�)rGZ
uppercaserrrr�test_subclassing2sz(_TestSubclassingProcess.test_subclassingcCs�|jdkr|�d�|j��tj}|�tj|�|j|j|fd�}|�	�|�
�t|dd��}|��}|�
d|�|�
d|�|�
d|�Wd�dS1sQwYdS)	NrWrwr��utf-8��encoding�ZeroDivisionErrorztest_multiprocessing.pyz1/0 # MARKER)rxryrzr�TESTFNr��unlinkr��_test_stderr_flushr�r��open�readr�)rG�testfnr-�f�errrrr�test_stderr_flush;s
"�z)_TestSubclassingProcess.test_stderr_flushcCs8t�|tjtjBtjB�}t|dddd�t_dddS)N�wr^F�r`�closefdrYr)r;re�O_WRONLY�O_CREAT�O_EXCLr�r:)r�rg�fdrrrrdLsz*_TestSubclassingProcess._test_stderr_flushcCs:t�|tjtjBtjB�}t|dddd�t_t�|�dS)Nrkr^Frl)r;rernrorpr�r:r�)r��reasonrgrqrrr�_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)NrWrw)rYr��zignore thisr�TrYr^r_)))TrY)�Fr))�rv)rr)rrr�)rxryrzrrbr�rcr�rsrr�r"rar�rerf�rstriprXr;�subTestr�r�)	rGrgrrr�rhZcontent�casesrLr�rrr�
test_sys_exitYs8
�
����z%_TestSubclassingProcess.test_sys_exitN)
rQrRrSrhr]rjrMrdrsrzrrrrr[.s	

r[cCst|d�r	|��S|��dkS)N�emptyr)r�r{�qsizerrrr�queue_empty��
r}cCst|d�r	|��S|��|kS)N�full)r�rr|)rr�maxsizerrr�
queue_full�r~r�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��r�r�TFrYr�rt�rp�rr�)rr�r�r�rr�rar}r�rq�
put_nowaitrJr�r�rCr��pyqueue�Fullr_rF�TIMEOUT1�TIMEOUT2�TIMEOUT3r�r-r�r )rGZMAXSIZErr�r�r-rqr�rrr�test_put�sR�




z_TestQueue.test_putcCs<|��|�d�|�d�|�d�|�d�|��dS)Nr�rtr�rp)r-rqr��r�rr�r�rrr�	_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�rtrYr�r�rpr)rr�r�r�rr�rar}r�r-rJr�r�r��
get_nowaitrCr�r��Emptyr_rFr�r�r�r�r )rGrr�r�r-r�r�rrr�test_get�sF�


z_TestQueue.test_getcCstdd�D]}|�|�qdS)Nr�r')r�rq)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�rqrJr�r�r�r�rr�rar�r�r�r�r�r )rGrr�r�rrr�	test_forks
z_TestQueue.test_forkcCs�|��}z
|�|��d�Wnty|�d�Ynw|�d�|�|��d�|�d�|�|��d�|��|�|��d�|��|�|��d�t|�dS)Nrzqsize method not implementedrYrpr�)rrar|r`ryrqr�r �rGrrrrr�
test_qsize:s�

z_TestQueue.test_qsizecCs(t|jd�D]}t�t�|��qdSr)rTr�rJr�r��	task_done)r�rr�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
�rrGrrrSs�z-_TestQueue.test_task_done.<locals>.<listcomp>r�Tr�)�
JoinableQueuer�rr�rqr�r )rG�workersr�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.pyrkr^r_z�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_cwdre�writerZ
DirsOnSysPathr;�getcwd�
__import__r�r��fail)rG�module_namerhrrr�test_no_import_lock_contentionfs 
�����
"�z)_TestQueue.test_no_import_lock_contentioncCsHt��}t��}|�tj|jdd�t��|}|�|d�t	|�dS)NTg�������?r*)
rrrJrKr�r�r�r��assertGreaterEqualr )rGrrr��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)	NrUrwc@rm)zF_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializablecS�t�r)r=rlrrrrf��zQ_TestQueue.test_queue_feeder_donot_stop_onexc.<locals>.NotSerializable.__reduce__N�rQrRrSrfrrrr�NotSerializable�rtr�Tr�rYr�)rxryrz�object�testr�captured_stderrrrqr}r�r�r rar|r`r{)rGr�rrrrr�"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)
NrUrwc@� 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_calledrlrrrrH�rIzT_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__init__cSs
d|_t��NT)r�r=rlrrrrf�szV_TestQueue.test_queue_feeder_on_queue_feeder_error.<locals>.NotSerializable.__reduce__N)rQrRrS�__doc__rHrfrrrrr��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)rQrRrSr��staticmethodr�rr�rr�	SafeQueue�sr�)�ctxTr�)rxryrzr�rrrr�rr��get_contextrqr}r�r�r�r�)rGr�Znot_serializable_objrrrr�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>rqr�r�rrr�$test_closed_queue_put_get_exceptions�s�
���z/_TestQueue.test_closed_queue_put_get_exceptionsN)rQrRrSrMr�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)�Lockra�acquire�releaser�r>r��ThreadError�rG�lockrrr�	test_lock�s
z_TestLock.test_lockcCs~|��}|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�|��d�|�ttf|j�dSr�)�RLockrar�r�r�r�r�r�rrr�
test_rlock�sz_TestLock.test_rlockcCs.|���	Wd�dS1swYdSr�r�rlrrr�test_lock_context�s
"�z_TestLock.test_lock_contextN)rQrRrSr�r�r�rrrrr��s
r�c@rP)
�_TestSemaphorecCs�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�|�|�d�d�|�dt|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�TrYrF)rdrjrar�r��rG�semrrr�_test_semaphore�sz_TestSemaphore._test_semaphorecCsT|�d�}|�|�|�|��d�|�dt|�|�|��d�|�dt|�dS)Nr�rtr�)�	Semaphorer�rar�rdrjr�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)NrUrwrFr.Tr�)rxryrzr�rCr�rar_rFr�r�r�)rGr�r�rrrr�s


z_TestSemaphore.test_timeoutN)rQrRrSr�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�wokenr0rrrrh's

z_TestCondition.fc	Cs\td�D]}z
|�|krWnWn
tyYnwt�t�qt�t�|�||�dS�Nr�)r�r`rJr�r�rd)rGrErbr�rrr�assertReachesEventually/s
��
z&_TestCondition.assertReachesEventuallycCs\|jdkr,z|j��|j��}|�|d�|�|j��d�WdSty+YdSwdS)NrUr)rx�_sleeping_countrj�_woken_countra�_wait_semaphorer`)rGr��sleepersrrr�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�TrYr�)�	Conditionr�r�rhrr�r�r�r�r*r�rJr�r�rdrj�notifyr�r�)rGr�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)Nrrtr�Tr�c�t��Sr�rjr�r�rr�<lambda>��z0_TestCondition.test_notify_all.<locals>.<lambda>)r�r�r�r�rhr�rr�r�r�r�r*r�rdrjr�rJr�r��
notify_allr�r��rGr�r�r�r�rNrr�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)Nrrtr�Tr�r�)�ncr�rr�rr�rrr��r�z._TestCondition.test_notify_n.<locals>.<lambda>r�cr�rr�rr�rrr��r�)r�r�r�r�rhrr�r�r�r�r*r�rJr�r�rdrjr�r�r�r�r�rr�r�
test_notify_n�s:



z_TestCondition.test_notify_ncCsH|��}t|j�}|��|t�}|��|�|d�|�|jt�dSr�)	r�rCr-r�r�r�rar_rF)rGr�r-rcrrrr��s
z_TestCondition.test_timeoutcsr|�-d�_|��|��fdd��}|r�jdkr't�d�Wd�dSWd�dS1s2wYdS)Nrc�
�jdkS�Nr��rbr��staterrr���
z0_TestCondition._test_waitfor_f.<locals>.<lambda>r�rY)rbr��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�r:r�Tcr��Nrr�rr�rrr��r�z-_TestCondition.test_waitfor.<locals>.<lambda>rr�r	rY)r�rr�r�rr�r�r}rarbr�rJr�r�r"r�)rGr�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�rJrKr�rb)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�rtr	rY)r�rr�r�r�rr�r}r�rr�r�rJr�rbr�r")rGr�r�r�r�r�r�rrr�test_waitfor_timeouts&

�

��z#_TestCondition.test_waitfor_timeoutcCsT|�|��Wd�n1swYt�d�|dur(t�|tj�dSdSrX)r�rJr�r;r�r�rH)r�rsr�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�)rGr�rsr�rrr�test_wait_result8s

"�z_TestCondition.test_wait_resultr)rQrRrSrMrhr�r�r�r�r�r�r�r?rN�HAS_SHAREDCTYPESr�r�r�r�rrrrrr�%s(->2	






r�c@� eZdZedd��Zdd�ZdS)�
_TestEventcCst�t�|��dSr)rJr�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�rCr-rar,r_rFr�r�r(r�rrr�r�)rGr�r-r�rrr�
test_eventTs&
z_TestEvent.test_eventN)rQrRrSrMrrrrrrrMs
rc@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�
_DummyListcCs6tj�t�d��}t��}|�||f�d|jd<dS)Nr�r)r�heap�
BufferWrapper�struct�calcsizer��__setstate__�
_lengthbuf)rG�wrapperr�rrrrH�sz_DummyList.__init__cCs"|\|_|_|j���d�|_dS)Nr�)�_wrapper�_lock�create_memoryview�castr)rGr�rrrr�sz_DummyList.__setstate__cCs|j|jfSr)rrrlrrr�__getstate__�r�z_DummyList.__getstate__cCs>|j�|jdd7<Wd�dS1swYdS�NrrY�rr)rG�_rrrr��s"�z_DummyList.appendcCs4|j�
|jdWd�S1swYdSr�rrlrrr�__len__�s$�z_DummyList.__len__N)rQrRrSrHrrr�rrrrrr	�sr	cCr�)Nr	r�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�)rWr�rrr�finalize�s
�z Bunch.__init__.<locals>.finalizeN)rhrLr��	DummyList�started�finishedr��	_can_exitr�r�r��taskrr�r�rr�
_finalizer)
rG�	namespacerhrLr�Zwait_before_exitrWr�r�rrrrrH�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�rr�rhrLrr r-r,�rGr�rrrr!�s�z
Bunch.taskcC�.t|j�|jkrt�t|j�|jksdSdSr)r�rr�rrlrrr�wait_for_started���zBunch.wait_for_startedcCr&r)r�rr�rrlrrr�wait_for_finished�r(zBunch.wait_for_finishedcCs|j��dSr)r r�rlrrr�	do_finish��zBunch.do_finishcCs|��dSr)r"rlrrrr�r�zBunch.closeNru)
rQrRrSr�rHr!r'r)r*rrrrrr�s

rc@rB)�
AppendTruecCs
||_dSr)r�)rGr�rrrrH�rzAppendTrue.__init__cCs|j�d�dSr�)r�r�rlrrrrO��zAppendTrue.__call__NrPrrrrr,��r,c@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.
    rpg>@cCs|j|j|jd�|_dS)Nr�)�Barrierr�defaultTimeout�barrierrlrrr�setUp�sz_TestBarrier.setUpcCs|j��d|_dSr)r2�abortrlrrr�tearDown�s

z_TestBarrier.tearDowncCs(|jdkrgS|jdkr|j��St�S)NrWrV)rxrVr�r	rlrrrr�s



z_TestBarrier.DummyListcCs>t||||jd�}z||�|��W|��dS|��wrX)rrr)r)rGrhrLr^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)NrTrY)	�partiesrr�r�r�r-�	n_waitingr`�broken)r�r2�resultsr��mr�rrr�	multipass�s
�z_TestBarrier.multipassrYcCs*|��|��g}|�|j|j||f�dS)z;
        Test that a barrier is passed in lockstep
        N)rr6r<r2)rG�passesr:rrr�test_barriersz_TestBarrier.test_barriercCr)zC
        Test that a barrier works for 10 consecutive runs
        r�)r>rlrrr�test_barrier_10s
z_TestBarrier.test_barrier_10cCs|��}|�|�dSr)r-rq)r�r2rrcrrr�_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
        crrrr
rrrr#rz1_TestBarrier.test_wait_return.<locals>.<listcomp>rrYN)	rr6r@r2r�rra�countr �rGr:rrr�test_wait_returns
z_TestBarrier.test_wait_returncCs|��t|�dkrt�dSrX)r-r�r�)r�r2r:rrr�_test_action_f's�z_TestBarrier._test_action_fcCsB|��}|j|jt|�d�}|�|j||f�|�t|�d�dS)z,
        Test the 'action' callback
        )r5rYN)rr0rr,r6rErar�)rGr:r2rrr�test_action-sz_TestBarrier.test_actioncCsnz|��}||jdkrt�|��|�d�WdStjy)|�d�YdSty6|��YdSw�Nr�T)r-rr�r�r��BrokenBarrierErrorr4)r�r2�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
        rrYN)	rr6rKr2rar�rr}r9)rGrIrJrrr�
test_abortCs
�z_TestBarrier.test_abortcCs�|��}||jdkr%|j|jdkr t�d�|j|jdks|��nz|��|�d�Wntjy?|�d�Ynw|��|�d�dS)Nr�rYr
T)	r-rr8rJr��resetr�r�rH)r�r2rIrJ�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
        rrYN)rr6rOr2rar�r)rGrIrJrNrrr�
test_resetas�z_TestBarrier.test_resetcCs�z|��}||jdkrt�|��|�d�Wntjy'|�d�Yn
ty3|��Ynw|��|jdkrA|��|��|��|�d�dSrG)r-rr�r�r�rHr4rM)r�r2�barrier2rIrJrNr�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.
        rrYN)rr0rr6rRr2rar�)rGrIrJrNrQrrr�test_abort_and_reset�s�z!_TestBarrier.test_abort_and_resetcCsR|��}||jdkrt�d�z|�d�WdStjy(|�d�YdSw)Nr���?r"T)r-rrJr�r�rHr��r�r2r:r�rrr�_test_timeout_f�s
�z_TestBarrier._test_timeout_fcCs4|��}|�|j|j|f�|�t|�|jj�dS)z$
        Test wait(timeout)
        N)rr6rVr2rar�r7rCrrrr��sz_TestBarrier.test_timeoutcCsT|�|j�}||jdkrt�d�z|��WdStjy)|�d�YdSw)Nr�rTT)r-r1rrJr�r�rHr�rUrrr�_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
        r"r�N)r0rrr6rWrar�r7)rGr2r:rrr�test_default_timeout�sz!_TestBarrier.test_default_timeoutcCs|�d�}|��|��dSrX)r0r-)rGr^rrr�test_single_thread�s
z_TestBarrier.test_single_threadc	CsHt|�D]}|��|�
|�|�Wd�n1swYqdSr)r�r-r�)r�r2r=�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)NrVrw��Fr�)rxryrzr�r�r�rr�r[r2r�r�r�rar�)rGr=r�rZrR�jr�r�rrr�
test_thousand�s 
���z_TestBarrier.test_thousandN)rY)rQrRrSr�rr1r3r5rr6rMr<r>r?r@rDrErFrKrLrOrPrRrSrVr�rWrXrYr[r^rrrrr/�sJ




	






	
r/c@sZeZdZdZddddded�ed�fgZd	d
�Zedd��Zddd�Z	dd�Z
dd�ZdS)�
_TestValuer\)r�i�i�^)�dg
@g�)�hi�����)rr��rs�x�ycC�ts	|�d�dSdS�Nz%requires multiprocessing.sharedctypes�rryrlrrrr3���z_TestValue.setUpcCs$t||j�D]	\}}|d|_qdSr�)�zip�codes_valuesrb)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�coderbrrlrrr���z)_TestValue.test_value.<locals>.<listcomp>crpr)rrrrlrrr�rtrYr�Tr�)	rlrkrarbr�r�rr�r�)rG�rawrmrnror-rrlr�
test_value�s 
�
��z_TestValue.test_valuecC�|jdd�dS�NT)ru)rvrlrrr�
test_rawvaluer-z_TestValue.test_rawvaluec
Cs�|�dd�}|��}|��}|jdddd�}|��}|��}|��}|jdd|d�}|��}	|��}
|�||	�|jdddd�}|�t|d��|�t|d��|jt|jdddd�|�	dd�}|�t|d��|�t|d��dS)Nr�rp�r�F�get_lock�get_objZnavalue)
rr{r|r�rar�r�r�r=rq)
rGZval1�lock1�obj1Zval2�lock2�obj2r�Zval3�lock3�obj3�arr4�arr5rrr�test_getobj_getlocks$z_TestValue.test_getobj_getlockNru)rQrRrSrhrrlr3rMr�rvryr�rrrrr_�s�

r_c@s~eZdZdZedd��Ze�edud�ddd��Z	e�edud�d	d
��Z
e�edud�dd��Ze�edud�d
d��ZdS)�
_TestArrayr\cCs0tdt|��D]}||||d7<qdSrX)r�r�)r��seqr�rrrrh$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�rtr�r�)rYr�rtr�r�rvr�T)�RawArray�Arrayrar�r��arrayrhr�rr�r�)rGrur��arrr�rrr�
test_array)s$$
z_TestArray.test_arraycCsrd}td�D]0}|�d|�}|�t|�|�|�t|�dg|�td�|dd�<|�t|�ttd���~qdS)Nr�rtr�r)r�r�rar�r�)rG�sizerr�rrr�test_array_from_sizeBs�z_TestArray.test_array_from_sizecCrwrx)r�rlrrr�
test_rawarrayQrJz_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�rzFr{r|Znotalock)r�r�r�r{r|r�rar�r�r�r=r�)
rGZarr1r}r~Zarr2rr�r�Zarr3r�r�r�r�rrr�test_getobj_getlock_objUs(�z"_TestArray.test_getobj_getlock_objru)
rQrRrSrhrMrhr?�skipIfr6r�r�r�r�rrrrr� s


r�c@sPeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�ZdS)�_TestContainers�rVcCs^|�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�rpr�)r�rtr�)
rrYr�rtr�rrYr�rtr�r�)rrYr�rtr�rrYr�rtr�rpr�cS�g|]}|dd��qSrr)r�elementrrrr��z-_TestContainers.test_list.<locals>.<listcomp>)
rrYr�rtr�rpr�r�rv�	r�r)rrYr�rtr�rpr�r�rvr�r�)r�r�ra�extendr�)rGr]r^r`r�rhrrr�	test_listws*
�
 z_TestContainers.test_listcCsf|�ttd���}t|�}|�t|�ttd���|�t|�g�t|�}d|d<|�t|�d�dS)Nr�r�r)r�r�rTra�next)rGr]�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)rt)r�r�)rZ_irlrrr��z;_TestContainers.test_list_proxy_in_list.<locals>.<listcomp>rtcSr�rr)r�innerrrrr�r�)rrYr��7rr:)rrYr�rYr�)r�r�ra�popr�r�)rGr]r�r^rrlr�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��chrr
rrr�	<genexpr>�s�z,_TestContainers.test_dict.<locals>.<genexpr>cS�g|]}t|��qSrr�r
rrrr�rz-_TestContainers.test_dict.<locals>.<listcomp>cSsg|]}|t|�f�qSrr�r
rrrr�r�)
�dictr�r�r�rar
�sorted�keysrmr0)rGr`�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�rTrar(r�r�r�)rGr`r�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�rt)�water�feed)�pets�suppliesr�r�rpZblanketsr�r�r��rr�rYZmarmots�X�cr:r�)r�rar(r�r�r�)rGr�r�r`�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�rrqrar�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_hiddenrarXr}r�)rGr�rrr�test_namespace	sz_TestContainers.test_namespaceN)rQrRrSrhr�r�r�r�r�r�r�r�rrrrr�ss


.
r�r.cCst�|�||Srr�)rer-rrr�sqr	s
r�cCs||Srr�rerfrrr�mul	rgr�cCst�|�tdd��)Nrei)rJr�r>r,rrr�raise_large_valuerror	r&r�cC�|Srr�rerrr�identity	r�r�c@r�)�
CountedObjectrcCs|jd7_t�|�SrX)�n_instancesr��__new__r�rrrr�#	s
zCountedObject.__new__cCst|�jd8_dSrX)r�r�rlrrr�__del__'	szCountedObject.__del__N)rQrRrSr�r�r�rrrrr� 	sr�c@�eZdZdS)�SayWhenErrorN�rQrRrSrrrrr�*	sr�ccs:�|dkr	td��t|�D]
}||krtd��|Vq
dS)Nr:zSomebody 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)rprprrertr�)r��applyrar�)rGZpapplyrrr�
test_applyC	s"z_TestPool.test_applyc	Csh|jj}|�|tttd���tttttd�����|�|tttd��dd�tttttd�����dS)Nr�r�r'��	chunksize)r��maprar�r�r�)rGZpmaprrr�test_mapH	s
,�z_TestPool.test_mapcCs�|jj}tttd�tddd���}|�|t|�tt�t|���tttd�tddd���}|�|t|dd�tt�t|���dS)Nr�r�r:r�r�r'r�)r��starmapr�rkr�rar��	itertools)rGZpsmap�tuplesrrr�test_starmapN	s��z_TestPool.test_starmapcCsDtttd�tddd���}|�|j�t|���tt�	t|���dS)Nr�r�r:)
r�rkr�rar�Z
starmap_asyncr�r�r�r�)rGr�rrr�test_starmap_asyncW	s�z_TestPool.test_starmap_asyncc	Cs8|�|j�tttd�����tttttd�����dSr�)rar��	map_asyncr�r�r�r�r�rlrrr�test_map_async\	s�z_TestPool.test_map_asynccCs�|jdkr
|j��ng}|jjtdg|j|jd���|�dt	|��|�dg|d�|jjtdg|j|jd���|�dt	|��|�
|dt�dS)NrV�1)�callback�error_callbackrYrr]r�)rxrVr�r�r�r�r�r-rar�r�r>)rGZ	call_argsrrr�test_map_async_callbacks`	s��z"_TestPool.test_map_async_callbackscCsr|jdkr|�d�|j��Gdd�dt�}|�t��|j�t|�gd�Wd�dS1s2wYdS)NrWrwc@rm)z*_TestPool.test_map_unplicklable.<locals>.AcSre)Nz
cannot pickler�rlrrrrfr	rgz5_TestPool.test_map_unplicklable.<locals>.A.__reduce__Nr�rrrr�Aq	rtr�r�)	rxryrzr�r�r�r�r�r�)rGr�rrr�test_map_unplicklablem	s
"�z_TestPool.test_map_unplicklablecCsBz|jjtgdd�jtd�WdStjy |�d�YdSw)NrYr�r�z2pool.map_async with chunksize stalled on null list)r�r�r�r�r�r�TimeoutErrorr�rlrrr�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)	NrVrwrYr:r�rtc@r�)zE_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterablecSr�rrrlrrr�__iter__�	r�zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__iter__cSr�r)r�rlrrr�__next__�	r�zN_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__next__cS�dSrXrrlrrrr�	r�zM_TestPool.test_map_handle_iterable_exception.<locals>.SpecialIterable.__len__N)rQrRrSr�r�rrrrr�SpecialIterable�	�r�)	rxryrzr�r�r�r�r�r�)rGr�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�rCr�rar_rF�rGrcr�rrr�
test_async�	s
z_TestPool.test_asynccCsD|j�tdtdf�}t|j�}|jtj|td�|�	|j
t�dS)Nr�rTr�)r�r�r�r�rCr�r�rr�r_rFr�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�r\r�r�)r��imapr�r�r�rar�r�r��
StopIterationr��rGr�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)NrVrwrYr:r�rtr'r�r�r�r�)
rxryrzr�r�r�r�r�r�r�r�rar�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�rar�r�)rGr�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)
NrVrwrYr:r�rtr'r�r�)rxryrzr�rr�r�r�r�r�r�r�r�r�r�r/)rGr�Zexpected_valuesr�rbrrr�-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)NrVr:rrt)
rx�RemoteErrorr>r�r�rar��_poolrr�)rGZexpected_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*rr
rrrr
�z,_TestPool.test_terminate.<locals>.<listcomp>i'rYr�rC)
r�r�rJr�r�r�rCr��
assertLessrF)rGr�r�rrrr�
s�
z_TestPool.test_terminatecCsz|�d�}|�|�tg�g�|�t|�tg��g�|�t|�tg��g�|�|�tg���g�|�	�|�
�dSrX)r�rar�r�r�r�rr�r�rr�r�rrr�test_empty_iterable
s
z_TestPool.test_empty_iterablecCs�|jdkrDttd��}dd�|D�}|�d��}|�t|�}|�|��|�Wd�n1s0wY|��|�	t
|jt|�dSdS)NrUr�cSr�r)r�r
rrrr
rz*_TestPool.test_context.<locals>.<listcomp>r�)rxr�r�r�r�r�rar�r�r�r>)rG�Lr�r��rrrr�test_context
s
��z_TestPool.test_contextcCre)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)NrUrYzexpected RuntimeError)r�z&raise RuntimeError(123) # some commentr:zexpected SayWhenError)rxr�r�r
�	Exceptionr�r�rr�r�rarL�	__cause__rr�ZRemoteTracebackr��tbr�rr�r��
excepthook�exc_info�getvaluer�r�r�r�)rGr�r��exc�cause�f1rrr�test_traceback)
sR
��
�������
�	�z_TestPool.test_tracebackcCre)Nr�r�r�rrr�_test_wrapped_exceptionO
rz!_TestPool._test_wrapped_exceptionc	Csl|�d��#}|�t��|�|j�Wd�n1swYWd�n1s+wY|��dSrX)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�rrYr"g�������?)rJrKr�r>r�r�r�r�rr��
assertGreater)rGZt_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�r
rrrrq
�z4_TestPool.test_release_task_refs.<locals>.<listcomp>r�cSsg|]}t�|��qSr)rr)r�orrrrr
scss�|]}|�VqdSrr)rrrrrr�x
��z3_TestPool.test_release_task_refs.<locals>.<genexpr>r)
r�r�r�r�rrrJr�r�rar�r�r�)rGZobjsZrefsrrr�test_release_task_refsn
s
z _TestPool.test_release_task_refsc	Cs�|jdkr
|�d�|�d�}|�Wd�n1swY|�t��|�Wd�n1s4wYWd�n1sCwY|��dS)NrV�test not applicable to managerrY)rxryr�r�r>r��rGr�rrr�
test_enter}
s


����z_TestPool.test_entercCsx|jdkr
|�d�|�d�}|��|��tjj|_t	�
dtf��d}t�
�Wd�dS1s5wYdS)NrVr!rYz%unclosed running multiprocessing pool)rxryr�r�r�rr�ZRUN�_staterZcheck_warnings�ResourceWarningr�
gc_collectr"rrr�test_resource_warning�
s



�
"�z_TestPool.test_resource_warning)"rQrRrSrMr�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr�r	rr
rrrrr r#r'�
__classcell__rrr�rr�5	sD	

$


&
r�cCre)N�key)�KeyErrorrrrr�raising�
rgr+cCsdd�S)NcSr�)N�*rrrrrr��
sz%unpickleable_result.<locals>.<lambda>rrrrr�unpickleable_result�
rgr-c@r�)�_TestPoolWorkerErrorsr\csjt�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�r+r�r*r�r}r�rr�)rGr�r2rcrr1r�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'cr/r�rr0r1rrr2�
r�z?_TestPoolWorkerErrors.test_unpickleable_result.<locals>.errbackr3)�multiprocessing.poolr5rr�r�r�r-r�r�r}r�ZassertIsNotNonerrbrr�)rGr5r�Z	iterationr2rc�wrappedrr1r�test_unpickleable_result�
s

z._TestPoolWorkerErrors.test_unpickleable_resultN)rQrRrSrhr4r8rrrrr.�
sr.c@�0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�_TestPoolWorkerLifetimer\c	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)Nrtr���maxtasksperchildcS�g|]}|j�qSr�r��rrkrrrr�
rzE_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<listcomp>r��2cs��|]}|��VqdSr�r~r?rrrr��
��zD_TestPoolWorkerLifetime.test_pool_worker_lifetime.<locals>.<genexpr>rYcSr=rr>r?rrrr�
r)rr�rar�rr�r�r�r��	enumerater�Z_repopulate_pool�allrJr�r�r�r�r�rr�)	rGr�Zorigworkerpidsr:r�r]rcZ	countdownZfinalworkerpidsrrr�test_pool_worker_lifetime�
s(
�z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd�}g}td�D]
}|�|�t|df��q
|��|��t|�D]\}}|�	|�
�t|��q'dS)NrtrYr;r�g333333�?)rr�r�r�r�r�rr�rDrar�)rGr�r:r�r]rcrrr�%test_pool_worker_lifetime_early_close�
s�z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closec	CsFdD]}|�t��tjd|d�Wd�n1swYqdS)N)rr:r"Z12rtr;)r�r>rr�)rGrbrrr�"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_okra�rG�cmdr��outrirrr�>test_worker_finalization_via_atexit_handler_of_multiprocessing�
s
zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rQrRrSrhrFrGrHrOrrrrr:�
s
r:)�BaseManager�	BaseProxyrc@r�)�FooBarcCr�)N�f()rrlrrrrhr�zFooBar.fcCr�r)r>rlrrr�gr�zFooBar.gcCr�)N�_h()rrlrrr�_hr�z	FooBar._hN)rQrRrSrhrTrVrrrrrRr�rRccs�td�D]}||VqdSr�)r�)r�rrr�bazs��rWc@r�)�
IteratorProxy)r�cCr�rrrlrrrr�#r�zIteratorProxy.__iter__cCr)Nr�)�_callmethodrlrrrr�%rzIteratorProxy.__next__N)rQrRrSZ	_exposed_r�r�rrrrrX!srXc@r�)�	MyManagerNr�rrrrrZ(�rZ�Foo)�callable�Bar)rhrV)r]Zexposed)r]Z	proxytypec@r9)�_TestMyManagerr�cCs<t�}|��|�|�|��|�|jjdtjf�dSr�)	rZr��common�shutdownr��_processr�r�r��rGrVrrr�test_mymanager4s

z_TestMyManager.test_mymanagercCsLt��
}|�|�Wd�n1swY|�|jjdtjf�dSr�)rZr`r�rbr�r�r�rcrrr�test_mymanager_context?s�z%_TestMyManager.test_mymanager_contextcCsPt�}|��|�
|�|�Wd�n1swY|�|jjd�dSr�)rZr�r`rarbr�rcrrr�!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�rrrSr�z)_TestMyManager.common.<locals>.<listcomp>)rhrTrVcrgrrhri)�barrrrTr�rhrTrVrSrUcSsg|]}||�qSrrr
rrrrcrr�)
r\r^rWrarhr�r>rTrYrrVr�r�)rGrVrWZfoo_methodsZbar_methodsr)rjr�rr`Ns "z_TestMyManager.commonN)rQrRrSrhrdrerfr`rrrrr_0sr_cCstSr)�_queuerrrr�	get_queuekr�rlc@�eZdZdZdS)�QueueManagerz$manager class used by server processN�rQrRrSr�rrrrrnn�rnc@rm)�
QueueManager2z@manager class which specifies the same interface as QueueManagerNrorrrrrqrrprq�	xmlrpclibc@s8eZdZdZgd�Zedd�Zedd��Zdd�ZdS)�_TestRemoteManagerr�)�hello worldNT�@uhallå världenuпривіт світs
hall� v�rldenNcCs2t||td�}|��|��}|�t|j��dS)N�rr|Z
serializer)rq�
SERIALIZER�connectrlrq�tuplerm�r�rr|rVrrrr�_putter�s�z_TestRemoteManager._puttercCs�t�d�}ttjdf|td�}|��|�|j�|j	|j
|j|fd�}d|_|��t
|j|td�}|��|��}|�|��|j�|�t|jtj�~dS)N� rrvr�T)r;�urandomrnr�HOSTrwr�r�rar�r{rrrqrxrlrar�r�r�rrqrJr�)rGr|rVr�Zmanager2rrrr�test_remote�s"
��z_TestRemoteManager.test_remote)	rQrRrSrhrmr�rMr{rrrrrrsys
	rs�md5c@r)�_TestManagerRestartcCs,t||td�}|��|��}|�d�dS)Nrvrt)rnrwrxrlrqrzrrrr{�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)Nr|rrvr�rtrarT)r;r}rnrr~rwZ
get_serverr�listenerrr�r�r{r�rlrar�r�rar��OSError�errnoZ
EADDRINUSErJr�)rGr|rVZsrvr�addrr�rr�rrr�test_rapid_restart�sN
�

�
�
��
�
���z&_TestManagerRestart.test_rapid_restartN)rQrRrSrMr{r�rrrrr��s
r��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)%�_TestConnectionrvcCs(t|jt�D]}|�|�q|��dSr)rT�
recv_bytes�SENTINEL�
send_bytesr)r�rZ�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)rYruNrtr�r�r�rUrrtr�z(                                        zexpected BufferTooShort, got %sFr:r*�Xi)(r�r�r�rr�rr�r�r�rxrar��filenor�r�r�r�r�r��recv_bytes_into�itemsize�	bytearrayr�BufferTooShortrLr�rCr�r_rFr�rJr�r�r�readable�writabler��EOFErrorr�)rGrZrRr�r�r�Zlongmsgr��bufferr�rcr�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�rYrUTr�)
r�rar�r�rxr�r�r�r�r�)rG�reader�writerrrr�test_duplex_false:s
�z!_TestConnection.test_duplex_falsecCst|��\}}|j|j|fd�}d|_|��|��td�}|�|�|�|�	�|�|�t
�|��|��dS)Nr�Tr�)r�r�r�rr�rrr�rar�r�r�)rGrZrRr�r�rrr�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)NrUrw�abcdefghijklmnopqrstuvwxyzrpr�rv��r�r��rYr:r�)
rxryrzrr�r�rar�r�r>)rGr�r]r^rrr�test_sendbytes\s&

z_TestConnection.test_sendbytesc
CsFzt�|�WdSty"}z|jtjkrWYd}~dS�d}~ww)NFT)r;�fstatr�r��EBADF)r�rqr�rrr�_is_fd_assigned|s���z_TestConnection._is_fd_assignedFcCsd|rtdd�D]}|�|�st�|��|�qt�|�}tr%t�|tj	�}t�
||�t�|�dS)Nrr3)r�r�r;�dup2r�r�recv_handle�msvcrt�open_osfhandlernr�r)r�rZ�dataZcreate_dummy_fdsr�rqrrr�_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)	NrU�only makes sense with processesTr�sfoor��wb�rb)rxryr�r�r�rr�r�rrcrbrer�r�Z
get_osfhandler�send_handler�r�rarf)rGrZrRr�rhrqrrr�test_fd_transfer�s"


�"�z _TestConnection.test_fd_transferr+�*test semantics don't make sense on Windowsr3z)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)NrUr�Tr�sbarr�r�r3z2could not find an unassigned large file descriptorr�)rxryr�r�r�rr�r�rrcrbrer�r��MAXFDr�r�r;r�rr�r�rr�rarf)rGrZrRr�rhrqZnewfdrrr�test_large_fd_transfer�s.
	

�
�"�z&_TestConnection.test_large_fd_transfercCst�|��d�dS)N�)r;r�r��rGrZrrr�_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)NrUr�Tr�r�)rxryr�r�r�rr�r�r�rr�r��rGrZrRr�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�rU)
r�r�rar�rxr��closedr}r�r�r\rrrr�s"

���
�z_TestConnection.test_contextNru)rQrRrSrhrMr�r�r�r�r�r�r�r?rN�
HAS_REDUCTIONr�r�r�rr�r�r;r�r�r�rrrrrr��s>
O
 




�
��


r�c@s6eZdZdZdd�Zdd�Ze�ej	d�dd��Z
d	S)
�
_TestListenerr\cCsB|jjD]}|jj|d�}|�|j�|�t|jj|j|�qdS)N��family)�
connection�families�Listenerr�rr�r�r)rGr�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�rar�rxr�r�)rGr�rsr`rrrr�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�rUr�)rGr��clientr`rrr�test_abstract_socket�s

�����
�z"_TestListener.test_abstract_socketN)rQrRrSrhr�rr?rNr
�abstract_sockets_supportedr�rrrrr��s
�r�c@s4eZdZdZedd��Zdd�Zdd�Zdd	�Zd
S)�_TestListenerClientrvcCs"|j�|�}|�d�|��dS)Nr�)r�r�r�r)r�rrZrrrr�
s
z_TestListenerClient._testcCsj|jjD].}|jj|d�}|j|j|jfd�}d|_|��|��}|�	|�
�d�|��|��qdS)Nr�r�Tr�)
r�r�r�r�r�rrr�r�rar�r�r)rGr�r�r�rZrrr�test_listener_client
s
�z(_TestListenerClient.test_listener_clientcCsj|j��}|j|j|jfd�}d|_|��t�d�|�	�}|�
|��d�|��|�
�|��dS)Nr�TrYr�)r�r�r�r�rrr�rJr�r�rar�rr�)rGr�r�rZrrr�test_issue14725!
s

z#_TestListenerClient.test_issue14725cCsh|jjD]-}|jj|d�}|j�|j�}|��}|�d�|�|�d��|�	�|�	�|�	�qdS)Nr��hellorY)
r�r�r�r�rr�r�r}r�r)rG�famr�rsr]rrr�test_issue169551
s

�z#_TestListenerClient.test_issue16955N)	rQrRrSrhrMr�r�r�r�rrrrr�
s
r�c@sTeZdZdZdd�Zedd��Zdd�Zedd	��Zd
d�Z	edd
��Z
dd�ZdS)�	_TestPollrvcCsJ|��\}}|�|��d�|�d�|�|��d�|�|��d�dS)NF�T)r�rar�r�r\rrr�test_empty_string@
s

z_TestPoll.test_empty_stringcCs*|D]}t�d�|�|�q|��dS�Nr*)rJr�r�r)r�rZ�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�r�rar�)rGr�r]r^r�rr�rerrr�test_stringsN
s
�z_TestPoll.test_stringscCr�ro)r�)r�rrrr�_child_boundaries]
sz_TestPoll._child_boundariescCsr|�d�\}}|j|j|fd�}|��t�d�ddg}|D]}|�|�q|��|��|�	|�
�|�dS)NFr�r�sfirstssecond)r�r�r�r�rJr�r�rr�r�r�)rGrrkr�r
r�rrr�test_boundariese
s
z_TestPoll.test_boundariescCs"|�d�|�d�|�d�dS)Nr�r��cd)r�)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�rTTr�r�)r�rar�r�r�r�r�r�)rGr]r^r�rrr�test_dont_mergew
sz_TestPoll.test_dont_mergeN)rQrRrSrhr�rMr�r�r�r�r�r�rrrrr�<
s


r�r�c@sPeZdZdZedd��Zedd��Zedd��Zdd	�Zed
d��Z	dd
�Z
dS)�_TestPicklingConnectionsr\cCsddlm}|jtjd�dS)Nr)�resource_sharerr�)rr�rZrr�)r�r�rrrr��
sz&_TestPicklingConnections.tearDownClasscCs�|D] }|jj|d�}|�|j�|��}|�|�|��|��qt�tj	df�}|�|�
��|��\}}|�|�|��|��|��dS)Nr�r)r�r�r�rr�r�socket�
create_serverrr~�getsocknamer�)r�rZr�r�r��new_connr�rrr�	_listener�
s


z"_TestPicklingConnections._listenercCsxt|jd�D]\}}|j�|�}|�|���|��q|��\}}t��}|�|�|�	|���|��|��dSr)
rTr�r�r�r�rUrr�rx�sendall)r�rZrr�r�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�rr�rr�rr�r�rarUrr�r�)rGr�ZlconnZlconn0Zlpr�Zrconn0Zrpr�r�rr��bufrrrr�
test_pickling�
sJ


�

z&_TestPicklingConnections.test_picklingcCsD|��}|�d�|��|��}|��}|�|d�|��dS)N�all is wellr�)r�r�r)r�rZrkrr�rrr�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�rr�rr�rar�r�)rGrZrRr�rrkrrr�test_access�
s"


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


.
r�cs<eZdZdZ�fdd�Z�fdd�Zdd�Zdd	�Z�ZS)
�	_TestHeapr\cs*t���tjjj|_tj��tjj_dSr)r�r3rr
r�_heap�old_heapZHeaprlr�rrr3s
z_TestHeap.setUpcs|jtjj_t���dSr)r�rr
rr�r�r5rlr�rrr5 �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@rrYr\�free�occupiedcss�|]}|jVqdSr�r�)r�arenarrrr�Jrz&_TestHeap.test_heap.<locals>.<genexpr>rt)rr
rr�Z_DISCARD_FREE_SPACE_LARGER_THANr�r��random�lognormvariater�r��	randrangerr�Z_len_to_seqrmZ_arenas�indexZ_allocated_blocksr0ra�sum�sortr��shuffler�Z_n_freesZ
_n_mallocsZ_pending_free_blocks)rGZ
iterationsZ	maxblocksZblocksr
r�r�r^rEr�r�r
r�r�rZZ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�rY)r�	isenabled�enabler��disable�
get_threshold�
set_thresholdr�rr
rZbuddy)rGZ
thresholdsr�r]r^rrr�test_free_from_gcds
�z_TestHeap.test_free_from_gc)	rQrRrSrhr3r5rrr(rrr�rr�s@r�c@s"eZdZdefdefdefgZdS)�_Foorerf�zN)rQrRrSr6r7r8Z_fields_rrrrr~s
�rc@s>eZdZdZdd�Zedd��Zddd�Zd	d
�Zdd�Z	d
S)�_TestSharedCTypesr\cCrgrhrirlrrrr3�rjz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|��D]
}||d9<q0dSr�)rbrerfr�r�)r�rerfrr�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�rzgUUUUUU�?rcrtr�r`r�rsr'r�r�T�gUUUUUU�?rdr��@Z
hellohello)rr7r8rr�r�r�rrbr�rrr�r�rar[rerf)
rGr�rerfrr�r�r
r�r�rrr�test_sharedctypes�s&
z#_TestSharedCTypes.test_sharedctypescCrw)NTrz)rrlrrr�test_synchronize�r-z"_TestSharedCTypes.test_synchronizecCsTtddd�}t|�}d|_d|_d|_|�|jd�|�|jd�|�|jd�dS)Nr��@rcr)rr
rerfrrar[)rGr�rjrrr�	test_copy�sz_TestSharedCTypes.test_copyNru)
rQrRrSrhr3rMrrrrrrrrr	�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)$�_TestSharedMemoryr\cCs8t|t�rt�|�}n|}||jdt|��<|��dSr)rrXr�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)rXr;r�)rG�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�r,rr'r����F�r�,multiprocessing.shared_memory._make_filenameZ	test01_fnZ	test02_fnc�g|]}�|�qSrrri�ZNAME_PREFIXrrr�rz?_TestSharedMemory.test_shared_memory_basics.<locals>.<listcomp>rYZtest01_dblunlinkr�c@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics.<locals>.OptionalAttachSharedMemoryN)rQrRrSr;ro�O_RDWRZ_flagsrrrr�OptionalAttachSharedMemory4�r Ztest01_notthere)rrrr�rcrar&r�r�r�r�r�rXrrr�r>r?�mock�patch�_SHM_NAME_PREFIX�side_effect�_nameZ
_USE_POSIX�FileNotFoundError�FileExistsError)rGZ	name_tsmb�smsZalso_smsZsame_sms�mock_make_filename�names�shm1�shm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsr Zok_if_exists_smsZnonexisting_smsrrr�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)
NrZ	test03_fnZ	test04_fncrrrrirrrrLrzA_TestSharedMemory.test_shared_memory_recreate.<locals>.<listcomp>TrYrr)r?r"r#rr$rr%rr�rcrar&)rGr*r+r,r-rrr�test_shared_memory_recreateBs �"�z-_TestSharedMemory.test_shared_memory_recreatecCs�|�t��tjddd�}Wd�n1swY|�t��tjddd�}Wd�n1s3wY|�t��tjdd�}Wd�dS1sOwYdS)NTr:rrr)r�r>rr)rGZsms_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)NrY��protoTrr�picklerr���protocolsnewvalsoldval)r��pickle�HIGHEST_PROTOCOLrxrrr�rcr��dumps�loadsr�rar&r�)rGr2r)�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)
NrYr1Trrr3rr�r4)
r�r6r7rxrrr�r8rrcr�r'r9)rGr2r)r:rrr�.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)NTrrshowdyr�rpsHELLO)rrr�rcr�rr&rr�r�rar�r�r)rGr)r�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�rbr�r�rHr�rr�ra)rG�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()
        rI)r�rrJrKr�rLrrr�>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)r@r�r
�Zsmm1rrr�r�zS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics.<locals>.<listcomp>rpr�csg|]}�j|d��qS)r�)r)rr]rErrr�r�r|��r�r&r+�howdy)rr>r?r�r>rr�r�rr@�shmr&rar�r�r�rar�rr')rGZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z	held_nameZ
absent_shmZsmm2rBrJZ	absent_slrrEr�-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)rI�HoWdYgX9��vq�r�NTr,r�r�rrIz8s8sdqxxxxxx?xxxxxxxx?q�ignoreZ100r�rtrTr,Zsomer�z8s8sdq8sxxxxxxx?qzexceeds available storagezfar too manyuencodésrYrLu	encodéess	123456789sadiosZtest03_duplicaterH�Mr:ipr��any)rr@r�rJrcr�r&rXr�r��
IndexErrorZ_get_packing_formatrarzr��warnings�catch_warnings�simplefilterr>r�ryr�rBrr�r)rGrBZcurrent_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)NrYr1r�r4r:r��changedr�Znewvaluerti�)r�r6r7rxrr@r�rJrcr8r9r�raZassertIsNotr�r)rGr2rB�
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)NrYr1r�r4)
r�r6r7rxrr@r8rJrrcr�r'r9)rGr2rBrVrrr�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)
        �-ErIr8r*r�rpFrzJA 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�PIPEr9�readline�strip�decoder�r-rJrKrr�r��minrrr'r�r;r&r$�
unregisterr:rfr�)rGrMr�r&�deadlinerNrArirrr�4test_shared_memory_cleaned_after_process_termination�s>
�
��
��"�zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rQrRrSrhr�rrr.r/r0r;r<r=r?r�r;r&rCrDrKrTrWrXrerrrrr�s(
p


qrc@s<eZdZdZdd�Zdd�Zedd��Zdd	�Zd
d�Z	dS)
�
_TestFinalizer\cCstj��|_tj��dSr)r
�_finalizer_registryr
�registry_backupr(rlrrrr3�r�z_TestFinalize.setUpcCs&t��|�tj�tj�|j�dSr)rrr�r
rg�updaterhrlrrrr5�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�rrrrr\�r[r\)r]r�)r^)rs)�d10rY)rL�exitpriority)�d01r)�d02)�d03�r�i����)�STOPi����)
r�r
�Finalizer�rr�_exit_functionrr;�_exit)r�rZr\r]r^Zclose_brsrjrlrmrnrrr�_test_finalize�s4z_TestFinalize._test_finalizecCs^|��\}}|j|j|fd�}d|_|��|��dd�t|jd�D�}|�|gd��dS)Nr�TcSsg|]}|�qSrr)rr�rrrrrz/_TestFinalize.test_finalize.<locals>.<listcomp>rp)r]r^rjrnrmrlr�)	r�r�rtrr�r�rTr�ra)rGrZrRr�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)NrYr�)rk)rr
rqr��randintrl�rwrrrHsz6_TestFinalize.test_thread_safety.<locals>.Foo.__init__N)rQrRrSrHrryrrr\
r!r\Fc
sX�s*t�t��d�zt��Wnty%}z|�WYd}~nd}~ww�rdSdSr�)rJr�r�r
�_run_finalizersrro)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
)r\rr�	<setcomp>%rzL_TestFinalize.test_thread_safety.<locals>.make_finalizers.<locals>.<setcomp>r�rp)r�r��getrandbitsrr()r`r�)r\rr{rr�make_finalizerss$���z9_TestFinalize.test_thread_safety.<locals>.make_finalizersg���ư>rpr�r
T)r�r��getswitchintervalrr�setswitchintervalrr�r*rZ
start_threadsrJr�r)rGr|rZold_intervalZ
old_thresholdrWr)r\rwrr{r�test_thread_safetys6


�
��


�

z _TestFinalize.test_thread_safetyN)
rQrRrSrhr3r5rMrtrur�rrrrrf�s
'rfc@rB)�_TestImportStarcCshddl}tj�tj�}tj�|�|�d�}|�|�}dd�|D�}dd�|D�}|�d�|�	d�|S)Nrz*.pycSs(g|]}tj�tj�|�d�d�qS)rYr)r;�path�splitext�split)rrhrrrrGs(z4_TestImportStar.get_module_names.<locals>.<listcomp>cSsg|]}d|�qS)zmultiprocessing.r)rr;rrrrHrzmultiprocessing.__init__r)
�globr;r��dirnamer�__file__r��escaper/r�)rGr�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)r�r�rr/r�r6r�r�r}r�r�)rGr�r&�mod�attrrrr�test_importMs*








���z_TestImportStar.test_importN)rQrRrSr�r�rrrrr�@sr�c@s,eZdZdZdd�Zedd��Zdd�ZdS)	�_TestLoggingr\cCsDt��}|�tj�|�|du�|�d�|�d�|�t�dS)Nzthis will not be printedz
nor will this)	r�
get_logger�setLevelr
�
SUBWARNINGr}�debug�info�	LOG_LEVEL)rG�loggerrrr�test_enable_loggingos

z _TestLogging.test_enable_loggingcCst��}|�|���dSr)rr�r��getEffectiveLevel)r�rZr�rrr�_test_levelwsz_TestLogging._test_levelc	Cs�d}d}t��}t��}|j}tjdd�\}}|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�tj�|�|�|j|j|fd�}|�	�|�
||���|��|�
�|�|�|jtd�dS)Nr|�%Fr�r�)�level)rr��logging�	getLoggerr�r�r�r�r�r�rar�r�r�NOTSETr�)	rGZLEVEL1ZLEVEL2r�Zroot_loggerZ
root_levelr�r�r�rrr�
test_level|s*


z_TestLogging.test_levelN)rQrRrSrhr�rMr�r�rrrrr�ks
r�c@s6eZdZdZedd��Ze�ee	d�d�dd��Z
dS)	�_TestPollEintrr\cCst�d�t�|tj�dSr�)rJr�r;r�r��SIGUSR1)r�r�rrr�_killer�s
z_TestPollEintr._killerr��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�r�r�r�r�rJr�r�r}rar�)rGr�r�Z
oldhandlerZkillerr�rr�r�test_poll_eintr�s
"z_TestPollEintr.test_poll_eintrN)rQrRrSrhrMr�r?rNr�r�r�rrrrr��s
r�c@s eZdZe�ed�dd��ZdS)�TestInvalidHandle�skipped on Windowsc	Cs^tj�d�}zz|��WnttfyYnwWd|_nd|_w|�ttftjjd�dS)Ni�M�r:)rr��
Connectionr�r>r��_handler�r�rrr�test_invalid_handles�s��
�z&TestInvalidHandle.test_invalid_handlesN)rQrRrSr?r��WIN32r�rrrrr��s
r�c@rB)�	OtherTestcC�,Gdd�dt�}|�tjtjj|�d�dS)Nc@rB)zFOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnectioncSr�)N�something bogusr�rGr�rrrr��r�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSrvrr�rGr�rrrr��r�zQOtherTest.test_deliver_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rQrRrSr�r�rrrr�_FakeConnection�r.r��abc)r�r�r�AuthenticationErrorr��deliver_challenge�rGr�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�)rBrlrrrrH�rzNOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.__init__cSs2|jd7_|jdkrtjjS|jdkrdSdS)NrYr�r�r�)rBrr��	CHALLENGEr�rrrr��s

zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.recv_bytescSrvrrr�rrrr��r�zPOtherTest.test_answer_challenge_auth_failure.<locals>._FakeConnection.send_bytesN)rQrRrSrHr�r�rrrrr��sr�r�)r�r�rr�r��answer_challenger�rrr�"test_answer_challenge_auth_failure�s
�z,OtherTest.test_answer_challenge_auth_failureN)rQrRrSr�r�rrrrr��s
r�cCs|jd7_dSrX)r�)�nsrrr�initializerr)r�c@rP)
�TestInitializerscCs"t��|_|j��|_d|j_dSr�)r�Manager�mgrr�r�r�rlrrrr3s
zTestInitializers.setUpcCs|j��|j��dSr)r�rar�rlrrrr5r�zTestInitializers.tearDowncCsNtj��}|�t|jd�|�t|jf�|�|jj	d�|�
�|��dSrX)rr>�SyncManagerr��	TypeErrorr�r�r�rar�rar�)rGr;rrr�test_manager_initializers
z)TestInitializers.test_manager_initializercCsH|jttjdd�t�dt|jf�}|��|��|�|jj	d�dS)NrY)r�)
r�r�rr�r�r�rr�rar�r�rrr�test_pool_initializers
z&TestInitializers.test_pool_initializerN)rQrRrSr3r5r�r�rrrrr�
s
r�cCs*z	|jdd�}WdStjyYdSw)NF)�block)r�r�r�)rr�itemrrr�_this_sub_process)s
�r�cCs2t��}tjt|fd�}d|_|��|��dSr�)rrr�r�rr�r�)rZsubProcrrr�
_test_process/s
r�cCs||Srrr�rrr�_afunc6rgr�cCs0tjdd�}|�tgd��}|��|��dS)Nr�r\)rYr�rtr�rpr�r�)rr�r�r�rr�)r�rerrr�pool_in_process9sr�c@s0eZdZdd�Zedd��Zdd�Zdd�Zd	S)
�
_file_likecCrDr)�	_delegate�_pid)rGZdelegaterrrrH@rIz_file_like.__init__cCs$t��}||jkr||_g|_|jSr)r;r�r��_cacher%rrr�cacheDs

z_file_like.cachecCs|j�|�dSr)r�r�r�rrrr�Mr-z_file_like.writecCs|j�d�|j��g|_dS)Nr�)r�r�r�r�r�rlrrr�flushPs
z_file_like.flushN)rQrRrSrH�propertyr�r�r�rrrrr�?s
r�c@r�)�TestStdinBadfiledescriptorcC� tjtd�}|��|��dS�Nr�)rr�r�r�r�)rGr-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�)r1r2r�r�rr�r�r)rG�sior-rr�r�
test_flushing`s
z(TestStdinBadfiledescriptor.test_flushingN)rQrRrSr�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�rJr�r�r�r;r�r)r�rk�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�rr�rr�r�r�r�r�r/r�r�ra)rGr�r-�readers�messagesr�rrkr�r�r�rr�r�	test_waitss4


��
zTestWait.test_waitcCsVt��}|�|�td�D]}|rt�t��d�|�d|�d��q
|��dS)Nr�r*�%s
r�)	r�rxr�rJr�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�Tr|r�css�|]}d|VqdS)r�Nrr
rrrr��rCz,TestWait.test_wait_socket.<locals>.<genexpr>r�r�r�)r�r-r�r�rr~r�r�rr�r�rr�r�r�r�r�rr�r/rrmra)rGr�r-r�r�r�rZdicr�r�rrr�r��vrrr�test_wait_socket�s>�





�	�zTestWait.test_wait_socketcC�|�d�dSr�)r�rlrrr�test_wait_slow�r+zTestWait.test_wait_slowcCr�r�)r�rlrrr�test_wait_socket_slow�r+zTestWait.test_wait_socket_slowcCs�ddlm}d}t��\}}t��}|||g|�}t��|}|�|g�|�||d�|�||d�|�	d�t��}|||gd�}t��|}|�||g�|�|d�dS)Nrr,rpr�r"r'皙�����?)
r�r-rr�rJrKrarrr�)rGr-r�r]r^r�rcr�rrr�test_wait_timeout�s
zTestWait.test_wait_timeoutcCs|��t�|�dSr)r�rJr�)r�r�Zperiodrrr�signal_and_sleep�rAzTestWait.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,rtcSst|dd�d�S)NcSst|�Sr)r�r�rrrr��r�z>TestWait.test_wait_integer.<locals>.<lambda>.<locals>.<lambda>)r))r�)r�rrrr��rz,TestWait.test_wait_integer.<locals>.<lambda>r�r'r�r�r�)r�r-rr�r�r�r�r�r�r�r�r}r�rJrKrarrr�r�r�)rGr-r�Zsorted_r�r]r^r�r�rcr�rrr�test_wait_integer�s>
�

zTestWait.test_wait_integercCsfddlm}t��\}}t��}||gdd�}t��|}|�|g�|�|d�|��|��dS)Nrr,r:r�rY)	r�r-rr�rJrKrarr)rGr-r]r^rNrcrrr�test_neg_timeoutszTestWait.test_neg_timeoutNru)rQrRrSrMr�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�rlrrr�test_invalid_family�"�z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCr�)Nz/var/test.piper�rlrrr�test_invalid_family_win32!r�z+TestInvalidFamily.test_invalid_family_win32N)	rQrRrSr?r�r�r�rNr�rrrrr�s



r�c@s,eZdZedd��Zedd��Zdd�ZdS)�	TestFlagscCs|�ttj��dSr)r�ryr��flags�r�rZrrr�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�rryr�r��printr8)r�r�rrkr��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()rYz-Sz-OrIr�)r�r[�check_outputr�r]r9rara)rGr��progr�Zchild_flagsr�rrr�
test_flags<s�zTestFlags.test_flagsN)rQrRrSrMr�rrrrrrr�*s

r�c@r)�TestTimeoutscCs>t�d�|�d�|��tj�|�}|�d�|��dS)NrYr�r�)rJr�r�rrr�r�)r��childrrZrrr�
_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��getdefaulttimeout�setdefaulttimeoutrr�r�r�r�rrr�rrar�r�r")rGZold_timeout�parentrr�r�rZrrrr�Ts$
�
zTestTimeouts.test_timeoutN)rQrRrSrMrr�rrrrrJs
rc@rm)�TestNoForkBombcCs�t��}tj�tj�t�d�}|dkr,tjj	�
||�\}}}|�|d�|�d|�dStjj	�
||�\}}}|�|��d�|�|d�dS)Nzmp_fork_bomb.pyrr�sRuntimeErrors123)rrr;r�r�r�r�r�rrJZassert_python_failurerar�rKrw)rGrr&r�rNrirrr�test_noforkbombmszTestNoForkBomb.test_noforkbombN)rQrRrSrrrrrrlrtrc@r)�TestForkAwareThreadLockcCsV|dkrtj|j|d|fd�}|��|��t|�n|�ttj	��|��dS)NrYr�)
rr�rr�rr"r�r�r
�_afterfork_registry)r�r�rZr�rrrr�s
zTestForkAwareThreadLock.childcCsdt�d�\}}t��}ttj�}tj|jd|fd�}|��|�	�|�
�}t|�|�||�dS)NFrpr�)
rr�r
�ForkAwareThreadLockr�rr�rr�rr�r"ZassertLessEqual)rGrrkr�Zold_sizer�Znew_sizerrrr��s
z!TestForkAwareThreadLock.test_lockN)rQrRrSrMrr�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)rGrq�to_closererrr�get_high_socket_fd�s

�zTestCloseFds.get_high_socket_fdcCs.trtjtjtj|d���dSt�|�dS)N)r�)r�r�r�SOCK_STREAMrr;)rGrqrrrr�szTestCloseFds.closec
Cs^zt�|tjtj�}Wnty#}z|�|�WYd}~dSd}~ww|��|�d�dSr)r��fromfdrrrr�r)r�rZrqrr�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�rr�rr�rr�r"rrr�r�r}r�r��winerror)rGr�r�rqr�r�ZWSAENOTSOCKrrr�test_closefd�s2
�



�

�zTestCloseFds.test_closefdN)rQrRrSrrrMrrrrrrr�s
	rc@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)NcSrvrr�rF�framerrrr��r�z-TestIgnoreEINTR._test_ignore.<locals>.handler�ready�x)r�r�r�r�r��
CONN_MAX_SIZE)r�rZr�rerrr�_test_ignore�s

zTestIgnoreEINTR._test_ignorer�r�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�Trr*i�r)rr�r�r rr�rrar�rJr�r;r�r�r�r�r�r�rr�r�rrr�test_ignore�s(�





zTestIgnoreEINTR.test_ignorecCsddd�}t�tj|�tj���}|�|j�|��}|�d�Wd�dS1s+wYdS)NcSrvrrrrrrr�r�z6TestIgnoreEINTR._test_ignore_listener.<locals>.handler�welcome)r�r�rr�r�r�rr�)r�rZr�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#rr�rr�rJr�r;r�r�r�r�r�r�rar�)rGrZrRr�rr�rrr�test_ignore_listeners �


z$TestIgnoreEINTR.test_ignore_listenerN)rQrRrS�maxrZ
PIPE_MAX_SIZEZ
SOCK_MAX_SIZErrMr r?rNr�r�r!r#r$rrrrr�s
	

	rc@s@eZdZedd��Zdd�Zdd�Zdd�Zd	d
�Zdd�Z	d
S)�TestStartMethodcCs|�t���dSr)r�rrr�rrr�_check_context"�zTestStartMethod._check_contextcCs^|jdd�\}}|j|j|fd�}|��|��|��}|��|��|�||���dS)NFr�r�)	r�r�r'r�rr�r�rar)rGr�rrkr�Zchild_methodrrr�
check_context&szTestStartMethod.check_contextc	CszdD]8}zt�|�}Wn	tyYqw|�|��|�|�|��|�|�t|jd�|�t|jd�|�|�qdS)N�rrrAr)	rr�r>rarrr��set_start_methodr))rG�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��forcerY)r�set_forkserver_preload�PRELOADrr+r>rar�r}r�rQ�lower�
startswithr�r)r�)rGrBZ
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*)rrrA)r�get_all_start_methodsr�rrar})rG�methodsrrr�test_get_allRs

�
�
�zTestStartMethod.test_get_allcCs�t��dkr|�d�tj�tj�t�d�}tj	j
�|�\}}}|��}|��}|�
�dks2|dkrAt|�t|�|�d�dSdS)NrAz*test only relevant for 'forkserver' methodz
mp_preload.py�okr�z(failed spawning forkserver or grandchild)rrryr;r�r�r�r�r�rrJrKrarwr�r�)rGr&r�rNrirrr�test_preload_resources\s
�z&TestStartMethod.test_preload_resourcesN)
rQrRrSrMr'r)rr3r6r8rrrrr&!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'ZnooprYrI)rkr')�pass_fdsr:r�T)rmr�r"zA z= resource was leaked after a process was abruptly terminated.r^z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!r$r%rxr;�piper[r\r�r]rzr^rrer_rwrar(r�r-rJrKrr�r�r�r�r��ENOENT�EINVALr�r:rfZassertRegex)
rGrMr'rrkr�rhZname1Zname2rdr�rir�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�rMrTrT)r��alwaysrYzresource_tracker: process died)!� multiprocessing.resource_trackerr@r�r;r�r�r�rZwait_processrQrRrSrErJr�rr�r�r�r�rrrrr�rar�r}�
issubclass�category�UserWarningrX�message)
rGrFZ
should_dier@r�r�Zall_warnr�rZthe_warnrrr�check_resource_tracker_death�sB


�



��"�z0TestResourceTracker.check_resource_tracker_deathcC�|�tjd�dSr�)rGr�rHrlrrr�test_resource_tracker_sigint�r(z0TestResourceTracker.test_resource_tracker_sigintcCrHr�)rGr�r�rlrrr�test_resource_tracker_sigterm�r(z1TestResourceTracker.test_resource_tracker_sigtermcCrHr�)rGr�r�rlrrr�test_resource_tracker_sigkill�r(z1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}|��|jd|fv}||��M}|�|�dS)Nrr?)rBr@rEr�Z_check_aliver�)rZr�r@Zreusedrrr�_is_resource_tracker_reused�s
z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}|��|j}tjdd�\}}tj|j||fd�}|��|�	�}|�
�|��|��|�|�dS)Nrr?Fr�r�)
rBr@rEr�rr�r�rLr�r�r�rr})rGr@r�rrkr�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)rGr'Ztoo_long_name_resourcerrr�test_too_long_name_resources
"�z/TestResourceTracker.test_too_long_name_resourceN)rQrRrSr>rGrIrJrKr�rLrMrOrrrrr9isJ%
	r9c@s8eZdZedd��Zdd�Zdd�Zejj	dd��Z
d	S)
�TestSimpleQueuecCs>|��z|�|���|�|���W|��dS|��wr)r-rqr{r�r�rrr�_test_emptys
zTestSimpleQueue._test_emptycCs�t��}t��}t��}tj|j|||fd�}d|_|��|�|���|�	�|�
�|�|���|�|�
�d�|�|�
�d�|�|���|��dS)Nr�TF)r�SimpleQueuer�r�rQrr�r}r{r�r-r�rar�r�)rGrr�r�r-rrr�
test_emptys"�zTestSimpleQueue.test_emptycCst��}|��|��dSr)rrRr�rGrrrrr1szTestSimpleQueue.test_closecCs0t��}|��|�|jj�|�|jj�dSr)rrRrr}�_readerr��_writerrTrrr�test_closed8szTestSimpleQueue.test_closedN)rQrRrSrMrQrSrr�rZcpython_onlyrWrrrrrP
s
	rPc@rm)�TestPoolNotLeakOnFailurecs�d�g�G��fdd�d�}|�td��tjjdtjj|d�d�}|��|�	�Wd�n1s4wY|�
tdd	��D���dS)
Nrtcs<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�)rGr�)�forked_processesrrrHIsz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.__init__cs"�dkrtd���d8�d|_dS)Nr�Manually induced OSErrorrYr)r�r�rl)�will_fail_inrrr�Os
zXTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.startcSr�)N�stoppingr�rlrrrr�Vrz\TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.terminatecSs|jdkr
d|_dSdS)Nr\�stoppedr�rlrrrr�Ys

�zWTestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.joincSs|jdkp	|jdkS)Nrr\r�rlrrrr~]sz[TestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.FailingForkProcess.is_aliveN)rQrRrSrHr�r�r�r~r�rYr[rr�FailingForkProcessHsr_rZrp)r�)�contextcsrArrB)rr!rrrr�frCzITestPoolNotLeakOnFailure.test_release_unused_processes.<locals>.<genexpr>)r�r�rr�r�r?r"Z	MagicMockrr�r�rO)rGr_r�rr^r�test_release_unused_processesBs
�
��z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rQrRrSrarrrrrX@srXc@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_classrVr�r-rlrrrr3�s


zTestSyncManagerTypes.setUpcCsB|jdur|j��r|j��|j��|j��d|_d|_dSr)r-r~r�r�rVrarlrrrr5�s



zTestSyncManagerTypes.tearDowncCst��dSr)r�
reap_childrenr�rrrr���zTestSyncManagerTypes.setUpClasscCs�t|j�t��}d}tt���dkrDt�|�|d9}t��|}|dkr:dtj	_
t	�dt���d|�d��dStt���dksdSdS)	Nr	rYr�rT�"multiprocessing.Manager still has � active children after � seconds)r"r-rJrKr�rr�r�r�r�environment_altered�
print_warning)rG�
start_timerNr�rrr�wait_proc_exit�s 

�
��z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd�|_d|j_|j��|��|�|jjd�dS)Nr�Tr)rr�r-rr�rlrar�)rGZworkerr�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�dSrn)rVr�r�rmrr,r-�rGrrrrr�s

zTestSyncManagerTypes.test_eventcC�|��dSr�r�rorrr�
_test_lock�rezTestSyncManagerTypes._test_lockr�cCs6t|j|��}|�|j|�|��|�t|j�dSr)r;rVrmrsr�r�r��rGZlnamerrrrr��szTestSyncManagerTypes.test_lockcC�|��|��dSr�r�r�rorrr�_test_rlock��z TestSyncManagerTypes._test_rlockcCs t|j|��}|�|j|�dSr)r;rVrmrwrtrrrr���zTestSyncManagerTypes.test_rlockcCrqrrrrorrrr��rez$TestSyncManagerTypes._test_semaphorer�cCs(t|j|��}|�|j|�|��dSr)r;rVrmr�r�)rG�snamerrrrr��sz#TestSyncManagerTypes.test_semaphorecCrw)Nr�)rz)r�rlrrrr��r-z+TestSyncManagerTypes.test_bounded_semaphorecCrurrvrorrr�_test_condition�rxz$TestSyncManagerTypes._test_conditioncCs|j��}|�|j|�dSr)rVr�rmr{rprrr�test_condition�s
z#TestSyncManagerTypes.test_conditioncCs|jdksJ�|��dSro)r7rMrorrr�
_test_barrier�rz"TestSyncManagerTypes._test_barriercCs|j�d�}|�|j|�dSro)rVr0rmr}rprrrr>�sz!TestSyncManagerTypes.test_barriercCs*|�	Wd�dS1swYdSrrrorrr�
_test_pool�s"�zTestSyncManagerTypes._test_poolcCs |jjdd�}|�|j|�dS)Nr�r\)rVr�rmr~rprrr�	test_pool�ryzTestSyncManagerTypes.test_poolcCsd|��dksJ�|��sJ�|��rJ�|��dksJ�|��r"J�|��dks*J�|��s0J�dS�Nr�rpr�)r|rr{r�rorrr�_test_queue�sz TestSyncManagerTypes._test_queuercCsNt|j|�d�}|�d�|�d�|�|j|�|��sJ�|��r%J�dSr�)r;rVrqrmr�r{r)rGZqnamerrrr�
test_queues

zTestSyncManagerTypes.test_queuecCr�)Nr�)r�rlrrr�test_joinable_queue	r+z(TestSyncManagerTypes.test_joinable_queuecCst|ddksJ�|�d�dksJ�|�d�dksJ�|��|��|D]}q$t|�dks/J�|�d�dks8J�dS)NrrprY)rBr�r��reverser�r�)r�r�rerrr�
_test_listszTestSyncManagerTypes._test_listcCs>|j��}|�d�|�|j|�|rJ�|�t|�d�dS)Nrpr)rVr�r�rmr�rar�rprrrr�s


zTestSyncManagerTypes.test_listcCs�t|�dksJ�|ddksJ�|�d�dksJ�t|���dgks$J�t|���dgks/J�t|���dgks:J�|��ddiksDJ�|��dksLJ�dS)NrYr�rp)r�rp)r�r�r�r0r�rmr
�popitemrorrr�
_test_dictszTestSyncManagerTypes._test_dictcCs<|j��}d|d<|�|j|�|rJ�|�t|�d�dS)Nrpr�r)rVr�rmr�rar�rprrrr�*s

zTestSyncManagerTypes.test_dictcCs,|jdksJ�|��dksJ�|�d�dS)NrYr�)rbr�r�rorrr�_test_value1sz TestSyncManagerTypes._test_valuecCs>|j�dd�}|�|j|�|�|jd�|�|��d�dS)Nr�rYr�)rVrrmr�rarbr�rprrrrv7szTestSyncManagerTypes.test_valuecCsH|ddksJ�|ddksJ�t|�dksJ�t|�ddgks"J�dS)NrrYr�)r�r�rorrr�_test_array=sz TestSyncManagerTypes._test_arraycCs$|j�dddg�}|�|j|�dS)Nr�rrY)rVr�rmr�rprrrr�DszTestSyncManagerTypes.test_arraycCs |jdksJ�|jdksJ�dSrr�rorrr�_test_namespaceHsz$TestSyncManagerTypes._test_namespacecCs(|j��}d|_d|_|�|j|�dSr)rVr�rerfrmr�rprrrr�Ms
z#TestSyncManagerTypes.test_namespaceNr�)r�)r)+rQrRrSr�rr>r�rcr3r5rMr�r�rlrmrrrsr�rwr�r�r�r�r{r|r}r>r~rr�r�r�r�r�r�r�r�rvr�r�r�r�rrrrrbisf












	





rbc@rm)�TestNamedResourcecCsvtj}|�tj|�t|ddd��}|�t�d��Wd�n1s$wYtj	j
�|�\}}}|�|d�dS)Nrkr^r_a[                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�)
rrbr�rcrer��textwrap�dedentr�rrJrKra)rGrgrhr�rNrirrr� test_global_named_resource_spawnUs�z2TestNamedResource.test_global_named_resource_spawnN)rQrRrSr�rrrrr�Trtr�c@rm)�MiscTestCasecCstj|ttjddgd�dS)N�SUBDEBUGr�)�extraZnot_exported)rZcheck__all__rr�rlrrr�test__all__rs
�zMiscTestCase.test__all__N)rQrRrSr�rrrrr�qrtr�c@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: rY�Dangling threads: )r�rr&r�rr!r�r�rirjr�)r�rUrWrrrr��s
zBaseMixin.tearDownClassN)rQrRrSrMr�r�rrrrr�|s

r�c@s�eZdZdZejZejZeej�Zeej	�Z	eej
�Z
eej�Zeej�Zeej
�Z
eej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�Zeej�ZdS)rrUN)rQrRrSrxrr�r�r�r{r�r�r�r�rr�r�r�r�r�r�r�r0rr�rqr�rrrrr�s,
















rcs
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)�ManagerMixinrVz
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)rVr�)r�rLrMrrrr��r(zManagerMixin.Poolcst���t��|_dSr)r�r�rr�rVr�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)Nr	rYr�rTrfrgrhrz5Shared objects which still exist at manager shutdown:)rJrKr�rr�r�r�rrirjrrrVZ_number_of_objectsZ_debug_inforar�r�r�)r�rkrNr�r�rrr��s0
�
��


zManagerMixin.tearDownClass)rQrRrSrxrr�r��operator�
attrgetterrr�r�r�r�r�r�r�r0rr�r�r�r�rMr�r�r�r(rrr�rr��s.
r�c@s�eZdZdZejjZejjZeejj	�Z	eejj
�Z
eejj�Zeejj�Zeejj
�Z
eejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�Zeejj�ZdS)�ThreadsMixinrWN)rQrRrSrxrZdummyr�r�r�r{r�r�r�rr�r�r�r�r�r�r�r0rr�rrrrr��s&r�c
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)NrQ>rVrWrUZWithrY�Mixinc@r��z*install_tests_in_module_dict.<locals>.TempNr�rrrr�Tempr[r�rVr�c@r�r�r�rrrrr�r[cs�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)	NrrYT)�
allow_noner-z start method not supported�linuxz1OSError raises on RLock creation, see issue 3111!)rr/r0r!�_cleanupr�r
r�rr+r>r?r@r�rr2r�r�rAr
�get_temp_dirr�r�r�rz�r��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-r�rYr�r")r�rr&rr+r�r!r�rirjr�rJr�r
�_cleanup_tests)Z
need_sleeprUrW)r�r�rr�tearDownModule8s$

z4install_tests_in_module_dict.<locals>.tearDownModuler�r�)�globalsr0rr�rCrTr�rh�
capitalizer?�TestCaser�requires_hashdigestrQrSrRr�)
Zremote_globsr�rRZlocal_globsZ	ALL_TYPESr&�baseZtype_Znewnamer�r�r�r�rr�r�install_tests_in_module_dicts@



�
�r��SemLockzSemLock not availabler�z
Linux onlyc@rm)�SemLockTestscCs>Gdd�dtj�}dt����}|ddd|d�}t�|�dS)Nc@r�)z3SemLockTests.test_semlock_subclass.<locals>.SemLockNr�rrrrr�^r[r�ztest_semlock_subclass-rYrr�F)r	r�r;r��
sem_unlink)rGr�r&rrrr�test_semlock_subclass]sz"SemLockTests.test_semlock_subclassN)rQrRrSr�rrrrr�Ysr�rL)�r?Z
unittest.mockrr�r�rJr1r�r�r;rr�r�r�r�r�r�r[rr�r6rrQZtest.supportr�Ztest.support.script_helperrrrrrrr�
import_moduler	Z*skip_if_broken_multiprocessing_synchronizer�r�rZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersr6�multiprocessing.queuesr
r�HAVE_SEND_HANDLEr��ImportErrorZmultiprocessing.sharedctypesrr
rrZ	HAS_SHMEMr�Zcheck_sanitizerr@rr r"r&r$r(r�r�r�rZr�r�r�r;Z
HAVE_GETVALUErr�r-r1r<r�r0Zctypesr5r6r7r8r�rArCrTrjrnrur�rQr[r}r�r�r�r�r�rr	rrr,r/r_r�r�r�r�r�r�r�r>r�r�r�r+r-r.r:rPrQrrRrWrXrZrNr_rrkrlrnrqrwrsr�r�r�r�r�r�r�rNr�r�rr	rrfr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrr&r�r9rPrXrbr�r�r�rr�r�r�r�r�rrrr�<module>s�

����

�
�-WG6*39FS
 
	j(H:
14"0
Rh
8
{+E"!2 "BCH�#3)k=W