Current File : //usr/local/apps/python3/lib/python3.11/test/__pycache__/test_concurrent_futures.cpython-311.pyc
�

�Ke^���~�ddlmZddlmZddlmZejd��ddlmZddlmZddl	Z	ddl
Z
ddlZddlm
Z
ddlZddlZddlZddlZddlZddlZddlZddlZdd	lmZdd
lmZddlmZmZmZmZmZm Z m!Z!ddl"m#Z#m$Z$ddl%Z&ddl'Z&ddl&Z(ej)d
d
���rej*d���eddfd�Z+e+e���Z,e+e���Z-e+e���Z.e+e���Z/e+ee0�����Z1e+ed���Z2da3d�Z4d�Z5d�Z6d�Z7d�Z8d�Z9d]d�Z:Gd�de;��Z<Gd�d ��Z=d!�Z>Gd"�d#ej?��Z@Gd$�d%��ZAGd&�d'eA��ZBGd(�d)eA��ZCGd*�d+eA��ZDGd,�d-eA��ZEe@feBeCeEeDffd.�ZFGd/�d0eA��ZGGd1�d2eA��ZHeFeG��eFeH��Gd3�d4��ZIGd5�d6eBeIe@��ZJGd7�d8eI��ZKeFeKeCeEeDf�9��Gd:�d;��ZLGd<�d=eBeLe@��ZMeFeLeCeEeDf�9��Gd>�d?��ZNeFeN��Gd@�dA��ZOGdB�dCeBeOe@��ZPGdD�dEeO��ZQeFeQeCeEeDf�9��d]dF�ZRdG�ZSdH�ZTdI�ZUdJ�ZVGdK�dLe;��ZWGdM�dNe;��ZXGdO�dPe;��ZYGdQ�dRe;��ZZGdS�dTe;��Z[GdU�dVe;��Z\GdW�dX��Z]eFe]eCeEeDf�9��GdY�dZe@��Z^d[�Z_e`d\kreja��dSdS)^�)�support)�
import_helper)�threading_helper�_multiprocessing)�hashlib_helper)�assert_python_okN)�QueueHandler��
PicklingError)�futures)�PENDING�RUNNING�	CANCELLED�CANCELLED_AND_NOTIFIED�FINISHED�Future�BrokenExecutor)�BrokenProcessPool�_check_system_limitsT)�address�memoryz test too slow on ASAN/MSAN buildc�L�t��}||_||_||_|S�N)r�_state�
_exception�_result)�state�	exception�result�fs    �F/usr/local/apps/python3/lib/python3.11/test/test_concurrent_futures.py�
create_futurer"*s%�����A��A�H��A�L��A�I��H��r�rr�*�rr�
uninitializedc��||zSr�)�x�ys  r!�mulr-;s���q�5�Lr#c�
�||fSrr*)�args�kwargss  r!�capturer1>s����<�r#c�H�tj|��td���)Nzthis is an exception)�time�sleep�	Exception)�ts r!�sleep_and_raiser7As���J�q�M�M�M�
�*�
+�
+�+r#c��tj|��t|��tj���dSr)r3r4�print�sys�stdout�flush)r6�msgs  r!�sleep_and_printr>Es4���J�q�M�M�M�	�#�J�J�J��J�������r#c�
�|adSr��INITIALIZER_STATUS)r+s r!�initrBJs�����r#c��tSrr@r*r#r!�get_init_statusrDNs���r#c���|�Rtjd��}|�t|����|�d��d|_t
jd��td���)N�concurrent.futures�CRITICALF皙�����?zerror in initializer)	�logging�	getLogger�
addHandlerr	�setLevel�	propagater3r4�
ValueError)�	log_queue�loggers  r!�	init_failrQQsk�����"�#7�8�8�����,�y�1�1�2�2�2����
�#�#�#� ����J�s�O�O�O�
�+�
,�
,�,r#c��eZdZd�ZdS)�MyObjectc��dSrr*��selfs r!�	my_methodzMyObject.my_method\s���r#N)�__name__�
__module__�__qualname__rWr*r#r!rSrS[s#������
�
�
�
�
r#rSc��eZdZd�Zd�ZdS)�
EventfulGCObjc�8�|���|_dSr)�Event�event)rV�mgrs  r!�__init__zEventfulGCObj.__init__as���Y�Y�[�[��
�
�
r#c�8�|j���dSr)r_�setrUs r!�__del__zEventfulGCObj.__del__ds���
�������r#N)rXrYrZrardr*r#r!r\r\`s2������!�!�!�����r#r\c��t��Sr)rS)�_s r!�make_dummy_objectrghs���:�:�r#c��eZdZd�Zd�ZdS)�BaseTestCasec�6�tj��|_dSr)r�threading_setup�_thread_keyrUs r!�setUpzBaseTestCase.setUpms��+�;�=�=����r#c�R�tj��tj|j�dSr)r�
reap_childrenr�threading_cleanuprlrUs r!�tearDownzBaseTestCase.tearDownps(��������*�D�,<�=�=�=�=r#N)rXrYrZrmrqr*r#r!ririls2������>�>�>�>�>�>�>�>r#ric�6��eZdZdZiZ�fd�Z�fd�Zd�Z�xZS)�
ExecutorMixin�c�:��t�����tj��|_t|d��r3|jd|j|���d�|j	��|_
dS|jdd|ji|j	��|_
dS)N�ctx��max_workers�
mp_contextrxr*)�superrmr3�	monotonic�t1�hasattr�
executor_type�worker_count�get_context�executor_kwargs�executor�rV�	__class__s �r!rmzExecutorMixin.setUpys����
���
�
�����.�"�"����4����	(�.�D�.�(� �-��+�+�-�-�(�(��&�(�(�D�M�M�M�
/�D�.�(�(� �-�(��&�(�(�D�M�M�Mr#c�0��|j�d���d|_tj��|jz
}t
jrtd|zd���|�|dd��t���
��dS)NT��waitz%.2fs� )�endi,z+synchronization issue: test lasted too long)r��shutdownr3r{r|r�verboser9�
assertLessrzrq)rV�dtr�s  �r!rqzExecutorMixin.tearDown�s�����
���D��)�)�)���
�
�^�
�
���
'���?�	)��'�B�,�C�(�(�(�(�����C�!N�O�O�O�
���������r#c�4�tj|j��Sr)�mpr�rvrUs r!r�zExecutorMixin.get_context�s���~�d�h�'�'�'r#)	rXrYrZrr�rmrqr��
__classcell__�r�s@r!rsrsusj��������L��O�(�(�(�(�(�	�	�	�	�	�(�(�(�(�(�(�(r#rsc��eZdZejZdS)�ThreadPoolMixinN)rXrYrZr�ThreadPoolExecutorr~r*r#r!r�r��s�������.�M�M�Mr#r�c�0��eZdZejZdZ�fd�Z�xZS)�ProcessPoolForkMixin�forkc���	t��n%#t$r|�d��YnwxYwtjdkr|�d��t�����S�N�.ProcessPoolExecutor unavailable on this system�win32zrequire unix system�r�NotImplementedError�skipTestr:�platformrzr�r�s �r!r�z ProcessPoolForkMixin.get_context�����	L� �"�"�"�"��"�	L�	L�	L��M�M�J�K�K�K�K�K�	L�����<�7�"�"��M�M�/�0�0�0��w�w�"�"�$�$�$���4�4�	rXrYrZr�ProcessPoolExecutorr~rvr�r�r�s@r!r�r��sE��������/�M�
�C�%�%�%�%�%�%�%�%�%r#r�c�0��eZdZejZdZ�fd�Z�xZS)�ProcessPoolSpawnMixin�spawnc���	t��n%#t$r|�d��YnwxYwt�����S)Nr�)rr�r�rzr�r�s �r!r�z!ProcessPoolSpawnMixin.get_context�sf���	L� �"�"�"�"��"�	L�	L�	L��M�M�J�K�K�K�K�K�	L�����w�w�"�"�$�$�$r�r�r�s@r!r�r��sE��������/�M�
�C�%�%�%�%�%�%�%�%�%r#r�c�0��eZdZejZdZ�fd�Z�xZS)�ProcessPoolForkserverMixin�
forkserverc���	t��n%#t$r|�d��YnwxYwtjdkr|�d��t�����Sr�r�r�s �r!r�z&ProcessPoolForkserverMixin.get_context�r�r�r�r�s@r!r�r��sE��������/�M�
�C�%�%�%�%�%�%�%�%�%r#r�c��d�}|D]O}||j���||j���d�}t||f|fz|zi��}|t��|<�PdS)Nc��|�d��r
|dd�S|�d��r
|dd�S|S)N)�Mixin�Tests����Test���)�endswith)�names r!�strip_mixinz*create_executor_tests.<locals>.strip_mixin�sL���=�=�+�,�,�	�����9��
�]�]�6�
"�
"�	�����9���Kr#r�)rX�type�globals)�mixin�bases�executor_mixinsr��exer��clss       r!�create_executor_testsr��s���
��������;�s�|�,�,�,�k�k�%�.�.I�.I�.I�.I�K���4�%��S�F�*�U�2�B�7�7����	�	�$���	�r#c�(��eZdZdZ�fd�Zd�Z�xZS)�InitializerMixin�c���dattd���|_t	�����dS)Nr()�initialized��initializer�initargs)rA�dictrBr�rzrmr�s �r!rmzInitializerMixin.setUp�s:���,��#��-=� ?� ?� ?���
���
�
�����r#c����fd�t�j��D��}|D]*}��|���d���+dS)Nc�N��g|]!}�j�t����"Sr*)r��submitrD��.0rfrVs  �r!�
<listcomp>z5InitializerMixin.test_initializer.<locals>.<listcomp>�s9���6�6�6���=�'�'��8�8�6�6�6r#r�)�ranger�assertEqualr)rVrr s`  r!�test_initializerz!InitializerMixin.test_initializer�sr���6�6�6�6�!�$�"3�4�4�6�6�6���	8�	8�A����Q�X�X�Z�Z��7�7�7�7�	8�	8r#)rXrYrZrrmr�r�r�s@r!r�r��sL��������L������8�8�8�8�8�8�8r#r�c�H��eZdZdZ�fd�Zd�Zejd���Z�xZ	S)�FailingInitializerMixinr�c�j��t|d��rY|���|_|j���|_tt|jf���|_n(d|_d|_tt���|_t���	��dS)Nrvr�)r�)
r}r�ry�QueuerOr�rQr�rzrmr�s �r!rmzFailingInitializerMixin.setUp�s�����4����	?�"�.�.�0�0�D�O�!�_�2�2�4�4�D�N�#'�I�26�.�1B�$D�$D�$D�D� � �
#�D�O�!�D�N�#'�I�#>�#>�#>�D� �
���
�
�����r#c���|�d��5	|j�t��}|�t
��5|���ddd��n#1swxYwYn#t
$rYnwxYwtj��}|jj	sOtj��|z
dkr|�
d��tjd��|jj	�O|�t
��5|j�t��ddd��n#1swxYwYddd��dS#1swxYwYdS)Nz ValueError: error in initializerrtzexecutor not broken after 5 s.g{�G�z�?)�_assert_loggedr�r�rD�assertRaisesrrr3r{�_broken�failr4)rV�futurer|s   r!r�z(FailingInitializerMixin.test_initializer�s��
�
 �
 �!C�
D�
D�	6�	6�
$���-�-�o�>�>��
�&�&�~�6�6�$�$��M�M�O�O�O�$�$�$�$�$�$�$�$�$�$�$����$�$�$�$���	"�
�
�
���
������!�!�B��m�+�
!��>�#�#�b�(�1�,�,��I�I�>�?�?�?��
�4� � � ��m�+�
!�
�"�"�>�2�2�
6�
6��
�$�$�_�5�5�5�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6�
6����
6�
6�
6�
6�!	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6�	6����	6�	6�	6�	6�	6�	6s|�E�A>�E�A2�&E�2A6	�6E�9A6	�:E�>
B�E�
B�BE� E�6E�E	�E�	E	�
E�E�!Ec#��K�|j�\dV�g}		|�|j���������?#tj$rYn=wxYw|�dd��5}dV�ddd��n#1swxYwY|j}|�t�fd�|D����|��dS)NTrFrGc3� �K�|]}�|vV��	dSrr*)r��liner=s  �r!�	<genexpr>z9FailingInitializerMixin._assert_logged.<locals>.<genexpr>s'�����;�;�D�C�4�K�;�;�;�;�;�;r#)
rO�append�
get_nowait�
getMessage�queue�Empty�
assertLogs�output�
assertTrue�any)rVr=r��cms `  r!r�z&FailingInitializerMixin._assert_loggeds7������>�%��E�E�E��F�
�L��M�M�$�.�";�";�"=�"=�"H�"H�"J�"J�K�K�K�L���;�
�
�
���
�������!5�z�B�B�
�b�����
�
�
�
�
�
�
�
�
�
�
����
�
�
�
��Y�F�����;�;�;�;�F�;�;�;�;�;��	 �	 �	 �	 �	 s$�AA�A$�#A$�=B�B�B)
rXrYrZrrmr��
contextlib�contextmanagerr�r�r�s@r!r�r��sk��������L�
�
�
�
�
�6�6�6�(�� � ��� � � � � r#r�c�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�ExecutorShutdownTestc��|j���|�t|jjt
dd��dS)Nr�rt)r�r�r��RuntimeErrorr��powrUs r!�test_run_after_shutdownz,ExecutorShutdownTest.test_run_after_shutdown%sI���
��� � � ����,��-�.��q�!�	%�	%�	%�	%�	%r#c��tdd�|jjt	|dd�������\}}}|�|��|�|���d��dS)N�-caKif 1:
            from concurrent.futures import {executor_type}
            from time import sleep
            from test.test_concurrent_futures import sleep_and_print
            if __name__ == "__main__":
                context = '{context}'
                if context == "":
                    t = {executor_type}(5)
                else:
                    from multiprocessing import get_context
                    context = get_context(context)
                    t = {executor_type}(5, mp_context=context)
                t.submit(sleep_and_print, 1.0, "apple")
            rv��r~�context�apple)r�formatr~rX�getattr�assertFalser��strip�rV�rc�out�errs    r!�test_interpreter_shutdownz.ExecutorShutdownTest.test_interpreter_shutdown+s���'��
/���T�%7�%@�&�t�U�B�7�7��9�9�:�:���C��"	
���������������h�/�/�/�/�/r#c�*�tdd�|jjt	|dd�������\}}}|�d|�����|�|���d��dS)Nr�a�if 1:
            import atexit
            @atexit.register
            def run_last():
                try:
                    t.submit(id, None)
                except RuntimeError:
                    print("runtime-error")
                    raise
            from concurrent.futures import {executor_type}
            if __name__ == "__main__":
                context = '{context}'
                if not context:
                    t = {executor_type}(5)
                else:
                    from multiprocessing import get_context
                    context = get_context(context)
                    t = {executor_type}(5, mp_context=context)
                    t.submit(id, 42).result()
            rvr�r�z)RuntimeError: cannot schedule new futuress
runtime-error)	rr�r~rXr��assertIn�decoder�r�r�s    r!�&test_submit_after_interpreter_shutdownz;ExecutorShutdownTest.test_submit_after_interpreter_shutdownAs���'��/�&��T�%7�%@�&�t�U�B�7�7��9�9�':�:���C��.	
�
�
�A�3�:�:�<�<�P�P�P���������&6�7�7�7�7�7r#c����fd�td��D��}�j���|D]}|����dS)Nc�Z��g|]'}�j�tjd����(S�rH�r�r�r3r4r�s  �r!r�z=ExecutorShutdownTest.test_hang_issue12364.<locals>.<listcomp>^s-���
G�
G�
G��d�m�"�"�4�:�s�3�3�
G�
G�
Gr#�2)r�r�r�r)rV�fsr s`  r!�test_hang_issue12364z)ExecutorShutdownTest.test_hang_issue12364]s^���
G�
G�
G�
G�U�2�Y�Y�
G�
G�
G���
��� � � ��	�	�A�
�H�H�J�J�J�J�	�	r#c����jdks
Jd����fd�td��D��}�j�d���d�|D��}��t|��d��d	�|D��}|D]Z}��|���d
|j�������	|�
�����[��t|��d��dS)
Nrtztest needs few workersc�Z��g|]'}�j�tjd����(Srrr�s  �r!r�z<ExecutorShutdownTest.test_cancel_futures.<locals>.<listcomp>es-���
F�
F�
F�q�d�m�"�"�4�:�r�2�2�
F�
F�
Fr#rT)�cancel_futuresc�:�g|]}|����|��Sr*��	cancelled�r��futs  r!r�z<ExecutorShutdownTest.test_cancel_futures.<locals>.<listcomp>js%��:�:�:�S�#�-�-�/�/�:�S�:�:�:r#�c�:�g|]}|����|��Sr*rrs  r!r�z<ExecutorShutdownTest.test_cancel_futures.<locals>.<listcomp>ps%��;�;�;�#�3�=�=�?�?�;�#�;�;�;r#zfut._state=)r=r)rr�r�r��
assertGreater�lenr��doner�assertIsNoner)rVrr�othersrs`    r!�test_cancel_futuresz(ExecutorShutdownTest.test_cancel_futurescs���� �A�%�%�%�'?�%�%�%�
F�
F�
F�
F�E�"�I�I�
F�
F�
F���
���d��3�3�3�;�:�B�:�:�:�	����3�y�>�>�2�.�.�.�
<�;��;�;�;���	/�	/�C��O�O�C�H�H�J�J�,<�s�z�,<�,<�O�=�=�=����c�m�m�o�o�.�.�.�.�
	
���3�v�;�;��*�*�*�*�*r#c�V�|jtjkrtjd���tdd�|jjt|dd�������\}}}|�	|��|�
|���d��dS)z�shutdown(wait=False) doesn't hang at exit with running futures.

        See https://github.com/python/cpython/issues/83386.
        z9Hangs, see https://github.com/python/cpython/issues/83386r�a�if True:
            from concurrent.futures import {executor_type}
            from test.test_concurrent_futures import sleep_and_print
            if __name__ == "__main__":
                if {context!r}: multiprocessing.set_start_method({context!r})
                t = {executor_type}(max_workers=3)
                t.submit(sleep_and_print, 1.0, "apple")
                t.shutdown(wait=False)
            rvNr�r�)r~rr��unittest�SkipTestrr�rXr�r�r�r�r�s    r!�test_hang_gh83386z&ExecutorShutdownTest.test_hang_gh83386zs���
���!<�<�<��#�K�M�M�
M�(��/���T�%7�%@�&�t�U�D�9�9��;�;�	<�	<���C��	
���������������h�/�/�/�/�/r#c���ttd��stjd���d�}i}t	|dd��r|���|d<|jd
ddi|��}|�t���	��tjtj
|��}	tjd	��|�t�����|�
d
���tjd��tjtj
|��dS#tjd��tjtj
|��wxYw)z�shutdown(wait=True) doesn't hang when a future was submitted and
        quickly canceled right before shutdown.

        See https://github.com/python/cpython/issues/94440.
        �alarmz1Tested platform does not support the alarm signalc� �td���)Nztimed out waiting for shutdown�r�)�_signum�_frames  r!�timeoutz7ExecutorShutdownTest.test_hang_gh94440.<locals>.timeout�s���?�@�@�@r#rvNryrx�rtTr�rr*)r}�signalrrr�r�r~r��intr�SIGALRMr�cancelr�)rVr$r0r��old_handlers     r!�test_hang_gh94440z&ExecutorShutdownTest.test_hang_gh94440�s[���v�w�'�'�	E��#�C�E�E�
E�	A�	A�	A����4���%�%�	6�#'�#3�#3�#5�#5�F�<� �%�4�%�>�>�!�>�v�>�>��������#�#�%�%�%��m�F�N�G�<�<��	7��L��O�O�O��O�O�C� � �'�'�)�)�)����4��(�(�(��L��O�O�O��M�&�.�+�6�6�6�6�6��
�L��O�O�O��M�&�.�+�6�6�6�6���s
�2AD=�=5E2N)
rXrYrZr�r�rr	rrr+r*r#r!r�r�$s}������%�%�%�0�0�0�,8�8�8�8���+�+�+�.0�0�0�,7�7�7�7�7r#r�c�8�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	dS)	�ThreadPoolShutdownTestc��d�}tjd��}td��D]}|j�||���|�t
|jj��d��td��D]}|����|j�	��|jjD]}|�
���dS)Nc�.�|���dSr��acquire��locks r!�acquire_lockzCThreadPoolShutdownTest.test_threads_terminate.<locals>.acquire_lock�����L�L�N�N�N�N�Nr#r�)�	threading�	Semaphorer�r�r�r�r�_threads�releaser��join)rVr4�sem�ir6s     r!�test_threads_terminatez-ThreadPoolShutdownTest.test_threads_terminate�s���	�	�	��!�!�$�$���q���	4�	4�A��M� � ��s�3�3�3�3�����T�]�3�4�4�a�8�8�8��q���	�	�A��K�K�M�M�M�M��
��� � � ���'�	�	�A�
�F�F�H�H�H�H�	�	r#c�8�tjd���5}|}|�t|�t
t
dd������gd���ddd��n#1swxYwY|jD]}|����dS)Nrt�rxr��
rt�r6r�r%rr%r�r6rB)	rr�r��list�map�absr�r9r;)rV�er�r6s    r!�test_context_manager_shutdownz4ThreadPoolShutdownTest.test_context_manager_shutdown�s���
�
'�A�
6�
6�
6�	=�!��H����T�!�%�%��U�2�q�\�\�":�":�;�;�;�;�;�
=�
=�
=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=�
�"�	�	�A�
�F�F�H�H�H�H�	�	s�AA1�1A5�8A5c
�2�tjd���}|�tt	dd����}|j}~|D]}|����td�t|t	dd����D����sJ�dS)Nrtr@r�c�:�g|]\}}|t|��k��Sr*�rE�r��r�vs   r!r�z<ThreadPoolShutdownTest.test_del_shutdown.<locals>.<listcomp>��&��C�C�C�D�A�q�A��Q���K�C�C�Cr#)	rr�rDrEr�r9r;�all�zip�rVr��res�threadsr6s     r!�test_del_shutdownz(ThreadPoolShutdownTest.test_del_shutdown�s����-�!�<�<�<���l�l�3��b�!���-�-���#����	�	�A�
�F�F�H�H�H�H��C�C�C��U�2�q�\�\�,B�,B�C�C�C�D�D�D�D�D�D�Dr#c
�\�tjd���}|�tt	dd����}|j}|�d���|D]}|����td�t|t	dd����D����sJ�dS)Nrtr@r�Fr�c�:�g|]\}}|t|��k��Sr*rJrKs   r!r�z@ThreadPoolShutdownTest.test_shutdown_no_wait.<locals>.<listcomp>�rNr#)
rr�rDrEr�r9r�r;rOrPrQs     r!�test_shutdown_no_waitz,ThreadPoolShutdownTest.test_shutdown_no_wait�s����-�!�<�<�<���l�l�3��b�!���-�-���#�����u��%�%�%��	�	�A�
�F�F�H�H�H�H��C�C�C��U�2�q�\�\�,B�,B�C�C�C�D�D�D�D�D�D�Dr#c�"�tjdd���}|�tt	dd����|j}~t
j��|D]1}|�|j	d��|�
���2dS)Nrt�SpecialPool)rx�thread_name_prefixr�z^SpecialPool_[0-4]$�rr�rDrEr�r9r�
gc_collect�assertRegexr�r;�rVr�rSr6s    r!�test_thread_names_assignedz1ThreadPoolShutdownTest.test_thread_names_assigned�s����-��m�=�=�=�����S�%��A�,�,�'�'�'��#���������	�	�A����Q�V�%;�<�<�<�
�F�F�H�H�H�H�	�	r#c� �tjd���}|�tt	dd����|j}~t
j��|D]1}|�|j	d��|�
���2dS)Nrtr@r�zThreadPoolExecutor-\d+_[0-4]$r[r^s    r!�test_thread_names_defaultz0ThreadPoolShutdownTest.test_thread_names_default�s����-�!�<�<�<�����S�%��A�,�,�'�'�'��#���������	�	�A�
���Q�V�%E�F�F�F�
�F�F�H�H�H�H�		�	r#c��tdd��\}}}|�|��|�|���d��dS)Nr�a[if True:
            from concurrent.futures import ThreadPoolExecutor
            from test.test_concurrent_futures import sleep_and_print
            if __name__ == "__main__":
                t = ThreadPoolExecutor()
                t.submit(sleep_and_print, .1, "apple")
                t.shutdown(wait=False, cancel_futures=True)
            r�)rr�r�r�r�s    r!�test_cancel_futures_wait_falsez5ThreadPoolShutdownTest.test_cancel_futures_wait_false�sZ��(��/�����C��	
���������������h�/�/�/�/�/r#N)
rXrYrZr>rGrTrWr_rarcr*r#r!r-r-�s�������������E�E�E�E�E�E�
�
�
����0�0�0�0�0r#r-c�&�eZdZd�Zd�Zd�Zd�ZdS)�ProcessPoolShutdownTestc�F�d�}|���}|�d���dkr|j}nd}|�d��}t	d��D]}|j�||���|�t|jj	��|��t	d��D]}|�
���|jj	}|j���|���D]}|�
���dS)Nc�.�|���dSrr0r2s r!r4zFProcessPoolShutdownTest.test_processes_terminate.<locals>.acquire_lockr5r#F��
allow_noner�r6r)r��get_start_methodrr8r�r�r�r�r�
_processesr:r��valuesr;)rVr4ry�expected_num_processesr<rf�	processes�ps        r!�test_processes_terminatez0ProcessPoolShutdownTest.test_processes_terminates/��	�	�	��%�%�'�'�
��&�&�%�&�8�8�F�B�B�%)�%6�"�"�%&�"��"�"�1�%�%���q���	4�	4�A��M� � ��s�3�3�3�3�����T�]�5�6�6�8N�O�O�O��q���	�	�A��K�K�M�M�M�M��M�,�	��
��� � � ��!�!�#�#�	�	�A�
�F�F�H�H�H�H�	�	r#c��tjd|������5}|j}|�t|�ttdd������gd���ddd��n#1swxYwY|�	��D]}|�
���dS)Nrtrwr�rA)rr�r�rkr�rCrDrEr�rlr;)rVrFrnros    r!rGz5ProcessPoolShutdownTest.test_context_manager_shutdown"s���
�
(��$�*:�*:�*<�*<�>�>�>�	=�AB���I����T�!�%�%��U�2�q�\�\�":�":�;�;�;�;�;�
=�
=�
=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=�	=����	=�	=�	=�	=��!�!�#�#�	�	�A�
�F�F�H�H�H�H�	�	s�AB	�	B
�B
c
��tjd|������}|�ttdd����}|j}|j}|j}|j}~tj
��|���|���D]}|����|�
��td�t|tdd����D����sJ�dS)Nrtrwr�c�:�g|]\}}|t|��k��Sr*rJrKs   r!r�z=ProcessPoolShutdownTest.test_del_shutdown.<locals>.<listcomp>@rNr#)rr�r�rDrEr��_executor_manager_threadrk�_call_queuerr\r;rl�join_threadrOrP)rVr�rR�executor_manager_threadrn�
call_queueros       r!rTz)ProcessPoolShutdownTest.test_del_shutdown,s���.��$�*:�*:�*<�*<�>�>�>���l�l�3��b�!���-�-��"*�"C���'�	��)�
�"*�"C��������	 �$�$�&�&�&��!�!�#�#�	�	�A�
�F�F�H�H�H�H���� � � ��C�C�C��U�2�q�\�\�,B�,B�C�C�C�D�D�D�D�D�D�Dr#c
��tjd|������}|�ttdd����}|j}|j}|j}|�	d���|�
��|���D]}|�
���|���td�t|tdd����D����sJ�dS)Nrtrwr�Fr�c�:�g|]\}}|t|��k��Sr*rJrKs   r!r�zAProcessPoolShutdownTest.test_shutdown_no_wait.<locals>.<listcomp>VrNr#)rr�r�rDrEr�rkrurtr�r;rlrvrOrP)rVr�rRrnrxrwros       r!rWz-ProcessPoolShutdownTest.test_shutdown_no_waitBs���.��$�*:�*:�*<�*<�>�>�>���l�l�3��b�!���-�-���'�	��)�
�"*�"C�����u��%�%�%�	 �$�$�&�&�&��!�!�#�#�	�	�A�
�F�F�H�H�H�H���� � � ��C�C�C��U�2�q�\�\�,B�,B�C�C�C�D�D�D�D�D�D�Dr#N)rXrYrZrprGrTrWr*r#r!rere
sX���������.���E�E�E�,E�E�E�E�Er#re)r�c�>�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	S)
�	WaitTestsc��|j�tjd��}t	j||gtj���\}}|�|h|��|�t��|��dS�N��?��return_when)	r�r�r3r4rr��
ALL_COMPLETEDr�rc)rVr�r�not_dones    r!�
test_20369zWaitTests.test_20369`sz����%�%�d�j�#�6�6�� ��v�v�&6�(/�(=�?�?�?���h����&��4�(�(�(��������)�)�)�)�)r#c��|j�tdd��}|j�tjd��}tjt||gt
j���\}}|�	t|g��|��|�	tt|g��|��dS)N�r�rr�)r�r�r-r3r4rr��CANCELLED_FUTURE�FIRST_COMPLETEDr�rc)rV�future1�future2rr�s     r!�test_first_completedzWaitTests.test_first_completedis����-�&�&�s�B��2�2���-�&�&�t�z�3�7�7�� ��!�7�G�4�$�4�6�6�6���h�	
����g�Y����.�.�.�����.��8�9�9�8�D�D�D�D�Dr#c�V�|j�tjd��}t	jtt|gtj���\}}|�	tttg��|��|�	t|g��|��dSr~)r�r�r3r4rr��CANCELLED_AND_NOTIFIED_FUTURE�SUCCESSFUL_FUTUREr�r�rc�rVr��finished�pendings    r!�+test_first_completed_some_already_completedz5WaitTests.test_first_completed_some_already_completedts����-�&�&�t�z�3�7�7��#�L�/�1B�G�L�$�4�6�6�6���'�	
����2�4E�F�G�G��	�	�	�	
����g�Y����1�1�1�1�1r#c��|j�tdd��}|j�td��}|j�tjd��}t
j|||gtj���\}}|�	t||g��|��|�	t|g��|��dS)Nr�r�rr6r�)r�r�r-r7r3r4rr��FIRST_EXCEPTIONr�rc)rVr�r��future3r�r�s      r!�test_first_exceptionzWaitTests.test_first_exception�s����-�&�&�s�A�r�2�2���-�&�&���<�<���-�&�&�t�z�1�5�5��#�L��'�7�+�#�3�5�5�5���'�	
����g�w�/�0�0�(�;�;�;�����g�Y����1�1�1�1�1r#c��|j�tdd��}|j�tjd��}tjttt||gt
j
���\}}|�ttt|g��|��|�tt|g��|��dS)Nr�rrr�)
r�r��divmodr3r4rr�r�r�r�r�r�rc�rVr�r�r�r�s     r!�*test_first_exception_some_already_completez4WaitTests.test_first_exception_some_already_complete�s����-�&�&�v�r�1�5�5���-�&�&�t�z�3�7�7��#�L�"�!�.��'�#�$�3�5�5�5���'�	
����/�;�%�'�(�(�)1�	3�	3�	3�	
����.��8�9�9�7�C�C�C�C�Cr#c�>�|j�tjd��}t	jt|gtj���\}}|�ttg��|��|�t|g��|��dS)Nr�r�)
r�r�r3r4rr��EXCEPTION_FUTUREr�r�rcr�s    r!�'test_first_exception_one_already_failedz1WaitTests.test_first_exception_one_already_failed�s����-�&�&�t�z�1�5�5��#�L�"�G�,�$�4�6�6�6���'�	
����.�/�0�0�(�;�;�;�����g�Y����1�1�1�1�1r#c	��|j�tdd��}|j�tdd��}t	jttt||gtj	���\}}|�
tttt||g��|��|�
t��|��dS)Nr�rr�r�)r�r�r�r-rr�r�r�r�r�r�rcr�s     r!�test_all_completedzWaitTests.test_all_completed�s����-�&�&�v�q�!�4�4���-�&�&�s�A�r�2�2��#�L�"�.�!���	�
$�1�
3�3�3���'�	
����/�;�.�%�%�	'�(�(�*2�		3�	3�	3�
	
�������(�(�(�(�(r#c��|j�tdd��}|j�tjd��}tjttt||gdt
j
���\}}|�tttt|g��|��|�t|g��|��dS)N��rt)r$r�)
r�r�r-r3r4rr�r�r�r�r�r�rcr�s     r!�test_timeoutzWaitTests.test_timeout�s����-�&�&�s�A�q�1�1���-�&�&�t�z�1�5�5��#�L�.�!�"��'�#��#�1�
3�3�3���'�	
����;�.�/�%�'�(�(�*2�	3�	3�	3�	
����g�Y����1�1�1�1�1r#N)rXrYrZr�r�r�r�r�r�r�r�r*r#r!r|r|_s�������*�*�*�	E�	E�	E�
2�
2�
2�
2�
2�
2�D�D�D� 2�2�2�)�)�)�&2�2�2�2�2r#r|c��eZdZd�ZdS)�ThreadPoolWaitTestsc�����tj����fd��tj��}tjd��	��fd�td��D��}����tj|tj	���tj|��dS#tj|��wxYw)Nc�0������dSrr�)r_s�r!�future_funcz@ThreadPoolWaitTests.test_pending_calls_race.<locals>.future_func�s����J�J�L�L�L�L�Lr#g���ư>c�D��h|]}�j������Sr*)r�r�)r�r=r�rVs  ��r!�	<setcomp>z>ThreadPoolWaitTests.test_pending_calls_race.<locals>.<setcomp>�s)���H�H�H��$�-�&�&�{�3�3�H�H�Hr#�dr�)
r7r^r:�getswitchinterval�setswitchintervalr�rcrr�r�)rV�oldswitchintervalrr_r�s`  @@r!�test_pending_calls_racez+ThreadPoolWaitTests.test_pending_calls_race�s��������!�!��	�	�	�	�	��1�3�3����d�#�#�#�	5�H�H�H�H�H�U�3�Z�Z�H�H�H�B��I�I�K�K�K��L���)>�?�?�?�?��!�"3�4�4�4�4�4��C�!�"3�4�4�4�4���s
�AB*�*CN)rXrYrZr�r*r#r!r�r��s#������
5�
5�
5�
5�
5r#r�c�,�eZdZd�Zd�Zd�Zd�Zd�ZdS)�AsCompletedTestsc	�b�|j�tdd��}|j�tdd��}tt	jttt||g����}|�	tttt||g��|��dS)Nr�r�r�r�)
r�r�r-rcr�as_completedr�r�r�r�)rVr�r��	completeds    r!�test_no_timeoutz AsCompletedTests.test_no_timeout�s����-�&�&�s�A�r�2�2���-�&�&�s�A�q�1�1����,�.�!�"��'�#�$�$�%�%�	�
	
����.�!�"��'�#�$�$�
�	�	�	�	�	r#c��|j�tjd��}t	��}	tjttt|gd���D]}|�
|���n#t
j$rYnwxYw|�t	tttg��|��dS)Nr�r�r$)
r�r�r3r4rcrr�r�r�r��add�TimeoutErrorr�)rVr��completed_futuresr�s    r!�test_zero_timeoutz"AsCompletedTests.test_zero_timeout�s����-�&�&�t�z�1�5�5���E�E��		�!�.�2�%�&�������
.�
.��"�%�%�f�-�-�-�-�

.���#�	�	�	��D�	����	
����;�.�/�1�2�2�+�	,�	,�	,�	,�	,s�AA7�7B	�B	c��|j�tjd��}d�t	jt
j|d����D��}|�t|��d��dS)Nr�c��g|]}|��Sr*r*)r�r s  r!r�z;AsCompletedTests.test_duplicate_futures.<locals>.<listcomp>s%��
�
�
��A�
�
�
r#r6r%)
r�r�r3r4rr��	itertools�repeatr�r)rVr�r�s   r!�test_duplicate_futuresz'AsCompletedTests.test_duplicate_futures	sw���-�&�&�t�z�1�5�5��
�
��+�I�,<�W�a�,H�,H�I�I�
�
�
�	�	
����Y����+�+�+�+�+r#c��d�td��D��}|�tt�����|�ttd�����|�tj��5t
j|d���D]\}|�	|��tj|��}~tj
��|�|�����]	ddd��n#1swxYwY|d�d��t
j|��D]y}|�	|��tj|��}~tj
��|�|����|r|d�d���zdS)	Nc�*�g|]}t����Sr*)r)r�rfs  r!r�zGAsCompletedTests.test_free_reference_yielded_future.<locals>.<listcomp>s��3�3�3�Q����3�3�3r#�r$r&r'rr��test)r�r�r"rrr�rr�r��remove�weakref�refrr\r�
set_result)rV�futures_listr��wrs    r!�"test_free_reference_yielded_futurez3AsCompletedTests.test_free_reference_yielded_futures���4�3�%��(�(�3�3�3�����M�0F�G�G�G�H�H�H����M���D�D�D�E�E�E�
�
�
�w�3�
4�
4�	(�	(�!�.�|�Q�G�G�G�
(�
(���#�#�F�+�+�+��[��(�(����"�$�$�$��!�!�"�"�$�$�'�'�'�'�
(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	�Q��"�"�6�*�*�*��*�<�8�8�	3�	3�F�����'�'�'���V�$�$�B���� � � ����b�b�d�d�#�#�#��
3��Q��*�*�6�2�2�2��	3�	3s�
A4D�D�Dc�>�ttttg}|�t
j��5}ttj|d�����ddd��n#1swxYwY|�	t|j��d��dS)Nrr�z2 (of 4) futures unfinished)r��PENDING_FUTURE�RUNNING_FUTUREr�r�rr�rCr�r��strr)rVr�r�s   r!�"test_correct_timeout_exception_msgz3AsCompletedTests.test_correct_timeout_exception_msg,s���5�~�&�(9�;���
�
�w�3�
4�
4�	@����%�l�A�>�>�>�?�?�?�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	
����R�\�*�*�,I�J�J�J�J�Js�$A*�*A.�1A.N)rXrYrZr�r�r�r�r�r*r#r!r�r��sd��������� ,�,�,�&,�,�,�3�3�3�2K�K�K�K�Kr#r�c�^�eZdZd�Zd�Zd�Zd�Zd�Zd�Ze	j
d���Zd�Zd	�Z
d
S)�ExecutorTestc��|j�tdd��}|�d|�����dS)Nr�r��)r�r�r�r�r�rVr�s  r!�test_submitzExecutorTest.test_submit<s?����%�%�c�1�a�0�0������f�m�m�o�o�.�.�.�.�.r#c�|�|j�tdd���}|�d|�����|j�t
ddd���}|�|���dddd�f��|�t��5|j�t
d�	��ddd��n#1swxYwY|�t��5|j�d�
��ddd��dS#1swxYwYdS)Nr�r�)r,�r%r6)rV�fn)r%)r��arg)r�)r�r�r-r�rr1r��	TypeErrorr�s  r!�test_submit_keywordz ExecutorTest.test_submit_keyword@s�����%�%�c�1��%�2�2������V�]�]�_�_�-�-�-���%�%�g�q�q�Q�%�?�?����������4�!�1�1E�1E�*F�G�G�G�
�
�
�y�
)�
)�	4�	4��M� � �G�� �3�3�3�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4�	4����	4�	4�	4�	4�
�
�
�y�
)�
)�	(�	(��M� � �Q� �'�'�'�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(�	(����	(�	(�	(�	(�	(�	(s$�5"C#�#C'�*C'�D1�1D5�8D5c�f�|�t|j�ttd��td������ttttd��td��������|�t|j�ttd��td��d�����ttttd��td��������dS)N�
r6��	chunksize)r�rCr�rDr�r�rUs r!�test_mapzExecutorTest.test_mapJs�������T�]�&�&�s�E�"�I�I�u�R�y�y�A�A�B�B��S��e�B�i�i��r���3�3�4�4�	6�	6�	6�	
����T�]�&�&�s�E�"�I�I�u�R�y�y�A�&�N�N�O�O��S��e�B�i�i��r���3�3�4�4�	6�	6�	6�	6�	6r#c�0�|j�tgd�gd���}|�|���d��|�|���d��|�t|j��dS)N)r%r%r%r%)r�r6rrt)rr%)r�rDr�r��__next__r��ZeroDivisionError)rVr=s  r!�test_map_exceptionzExecutorTest.test_map_exceptionSs~���M���f�l�l�l�L�L�L�A�A����������v�.�.�.���������v�.�.�.����+�Q�Z�8�8�8�8�8r#c��g}	|j�tjgd�d���D]}|�|���	|�d��n#tj$rYnwxYw|�ddg|��dS)N)rrr�rtr�zexpected TimeoutError)	r�rDr3r4r�r�rr�r�)rV�resultsr=s   r!�test_map_timeoutzExecutorTest.test_map_timeoutYs�����	/��]�&�&�t�z�'0�y�y�/0�'�2�2�
"�
"�����q�!�!�!�!�
"�
�I�I�-�.�.�.�.���#�	�	�	��D�	����
	
���$���w�/�/�/�/�/s�AA�A.�-A.c��|j�tdg|jdzz��|j���dS)Nr�r%)r�rDr�rr�rUs r!�test_shutdown_race_issue12456z*ExecutorTest.test_shutdown_race_issue12456gsE��	
�
���#��s�d�&7�!�&;�<�=�=�=��
��� � � � � r#c�&��t��}tj���tj|�fd���}|j�|j��~��tj
���}|�|d��dS)Nc�,������Sr)rc)�obj�my_object_collecteds �r!�<lambda>z7ExecutorTest.test_no_stale_references.<locals>.<lambda>us���#6�#:�#:�#<�#<�r#r�z-Stale reference not collected within timeout.)rSr7r^r�r�r�r�rWr�r�
SHORT_TIMEOUTr�)rV�	my_object�my_object_callback�	collectedr�s    @r!�test_no_stale_referencesz%ExecutorTest.test_no_stale_referencesns�����J�J�	�'�o�/�/��$�[��<�<�<�<�>�>��	
�
���Y�0�1�1�1��'�,�,�W�5J�,�K�K�	����	�G�	I�	I�	I�	I�	Ir#c��dD]K}|�td��5|�|���ddd��n#1swxYwY�LdS)N)r���z"max_workers must be greater than 0r@)�assertRaisesRegexrNr~)rV�numbers  r!�test_max_workers_negativez&ExecutorTest.test_max_workers_negative~s����	7�	7�F��'�'�
�)1�2�2�
7�
7��"�"�v�"�6�6�6�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7�
7����
7�
7�
7�
7��	7�	7s�A�A	�
A	c���|j�ttd����D]G}t	j|��}~t
j��|�|�����HdS)Nr�)	r�rDrgr�r�r�rr\r)rVr�r�s   r!�test_free_referencez ExecutorTest.test_free_reference�st���=�$�$�%6��b�	�	�B�B�	$�	$�C���S�!�!�B���� � � ����b�b�d�d�#�#�#�#�		$�	$r#N)rXrYrZr�r�r�r�r�r�r�cpython_onlyr�r�r�r*r#r!r�r�9s�������/�/�/�(�(�(�6�6�6�9�9�9�0�0�0�!�!�!�
��
I�
I���
I�7�7�7�$�$�$�$�$r#r�c�t�eZdZd�Zd�Zd�Zd�Zeje	e
d��d��d���Zd�Zd	S)
�ThreadPoolExecutorTestc����g��fd�}|j�|td����|j�d���|��td����dS)zTests verifying issue 11777.c�2����|��dSr)r�)�nr�s �r!�record_finishedzRThreadPoolExecutorTest.test_map_submits_without_iteration.<locals>.record_finished�s����O�O�A�����r#r�Tr�N)r�rDr�r��assertCountEqual)rVrr�s  @r!�"test_map_submits_without_iterationz9ThreadPoolExecutorTest.test_map_submits_without_iteration�s|�����	�	�	�	�	�	
�
���/�5��9�9�5�5�5��
���D��)�)�)����h��b�	�	�2�2�2�2�2r#c��|���}tdtj��pddz��}|�|j|��dS)N� r%rB)r~�min�os�	cpu_countr��_max_workers)rVr��expecteds   r!�test_default_workersz+ThreadPoolExecutorTest.test_default_workers�sQ���%�%�'�'���r�B�L�N�N�/�a�1�4�5�5������.��9�9�9�9�9r#c��|�d��}d�}tjd��}td|jz��D]}|�||���|�t|j��|j��td|jz��D]}|�	���|�
d���dS)NrBc�.�|���dSrr0r2s r!r4z<ThreadPoolExecutorTest.test_saturation.<locals>.acquire_lock�r5r#r�Tr�)r~r7r8r�r
r�r�rr9r:r�)rVr�r4r<r=s     r!�test_saturationz&ThreadPoolExecutorTest.test_saturation�s����%�%�a�(�(��	�	�	��!�!�$�$���r�H�1�1�2�2�	/�	/�A��O�O�L�#�.�.�.�.�����X�.�/�/��1F�G�G�G��r�H�1�1�2�2�	�	�A��K�K�M�M�M�M����t��$�$�$�$�$r#c��|���}|�tdd�����|�tdd�����|�tdd�����|�t|j��d��|�d�	��dS)
Nr�r�r�r�r6�r%Tr�)r~r�r-rr�rr9r��rVr�s  r!�test_idle_thread_reusez-ThreadPoolExecutorTest.test_idle_thread_reuse�s����%�%�'�'������R��#�#�*�*�,�,�,�����Q��"�"�)�)�+�+�+�����Q��#�#�*�*�,�,�,�����X�.�/�/��3�3�3����t��$�$�$�$�$r#�register_at_forkzneed os.register_at_forkc�r���fd��tjd��5}|��|��td��D]\}tjdtjd�����5}|�t��ddd��n#1swxYwY�]	ddd��dS#1swxYwYdS)Nc�4��|��|��dSr)r�)�poolr�s �r!r�zEThreadPoolExecutorTest.test_hang_global_shutdown_lock.<locals>.submit�s����K�K���%�%�%�%�%r#r%rr�)ry)rr�r�r�r�r�r��tuple)rVrrf�workersr�s    @r!�test_hang_global_shutdown_lockz5ThreadPoolExecutorTest.test_hang_global_shutdown_lock�sD���	&�	&�	&�	&�	&��
'��
*�
*�	*�d��K�K���%�%�%��2�Y�Y�
*�
*���0��r�~�f�?U�?U�V�V�V�*�Za��N�N�5�)�)�)�*�*�*�*�*�*�*�*�*�*�*����*�*�*�*��
*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*�	*����	*�	*�	*�	*�	*�	*s6�AB,�+B�B,�B�B,�B�B,�,B0�3B0c����tj���g���fd�}|�d���5}|�|d���}	t	j|�|ddgd�	����5}|�t��5t|��ddd��n#1swxYwYddd��n#1swxYwY��
��n#��
��wxYw|���ddd��n#1swxYwY|��d
dg��dS)Nc������d|�d���	������d|�d���dS#��d|�d���wxYw)Nzident=z startedz stopped)r�r�)�ident�log�
stop_events ��r!�
log_n_waitzRThreadPoolExecutorTest.test_executor_map_current_future_cancel.<locals>.log_n_wait�s~����J�J�*�%�*�*�*�+�+�+�
0����!�!�!��
�
�.�e�.�.�.�/�/�/�/�/���
�
�.�e�.�.�.�/�/�/�/���s�A�A&r%r@�first)r�second�thirdrr�zident='first' startedzident='first' stopped)
r7r^r~r�r��closingrDr�r��nextrcr�assertListEqual)rVr!rr�genrr s     @@r!�'test_executor_map_current_future_cancelz>ThreadPoolExecutorTest.test_executor_map_current_future_cancel�s
�����_�&�&�
���	0�	0�	0�	0�	0�	0��
�
�A�
�
.�
.�	�$��+�+�j��+�8�8�C�
!��'��H�H�Z�(�G�)<�a�H�H�H���"���*�*�<�8�8�"�"��S�	�	�	�"�"�"�"�"�"�"�"�"�"�"����"�"�"�"�"�"�"�"�"�"�"�"�"�"�"����"�"�"�"���� � � � ��
��� � � � �����J�J�L�L�L�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
���S�#:�<S�"T�U�U�U�U�Usq�D �
,C'�9C�B0�$C�0B4�4C�7B4�8C�;C'�C	�C'�C	�C'�D �'C=�=D � D$�'D$N)
rXrYrZrrrrr�
skipUnlessr}rrr)r*r#r!r�r��s�������3�3�3�:�:�:�
%�%�%�%�%�%��X�����%7�8�8�:T�U�U�*�*�V�U�*�V�V�V�V�Vr#r�c���eZdZejejdkd��d���Zd�Zd�Z	e
d���Zd�Ze
jd��d	���Zd
�Zd�Zd�Zd
�Zd�Zd�ZdS)�ProcessPoolExecutorTestr�zWindows-only process limitc��|�td��5tjd���ddd��dS#1swxYwYdS)Nzmax_workers must be <= 61�>r@)r�rNrr�rUs r!�test_max_workers_too_largez2ProcessPoolExecutorTest.test_max_workers_too_large�s���
�
#�
#�J�$?�A�A�	8�	8��'�B�7�7�7�7�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8�	8����	8�	8�	8�	8�	8�	8s�?�A�Ac��|j�tjd��g}t	t|jj�������}|���|D]"}|�	t|j���#|�	t|jjtdd��dS)Nr6r�r�)
r�r�r3r4r&�iterrkrl�	terminater�rrr�)rVrrors    r!�test_killed_childz)ProcessPoolExecutorTest.test_killed_child�s����=�'�'��
�A�6�6�7����d�m�.�5�5�7�7�8�8�9�9��	���
�
�
��	=�	=�C����/���<�<�<�<����+�T�]�-A�3��1�M�M�M�M�Mr#c����fd�}ttttd��td������}��t�j�ttd��td��d�����|����t�j�ttd��td��d�����|����t�j�ttd��td��d�����|����t|��dS)Nc	���t�j�tt	d��t	d��d�����dS)N�(r�r�)rCr�rDr�r�rUs�r!�bad_mapz;ProcessPoolExecutorTest.test_map_chunksize.<locals>.bad_map�s<������"�"�3��b�	�	�5��9�9��"�K�K�L�L�L�L�Lr#r6r�r�r)rCrDr�r�r�r�r�rN)rVr7r�s`  r!�test_map_chunksizez*ProcessPoolExecutorTest.test_map_chunksize�sK���	M�	M�	M�	M�	M��3�s�E�"�I�I�u�R�y�y�1�1�2�2��������"�"�3��b�	�	�5��9�9��"�J�J�K�K��	�	�	�	
������"�"�3��b�	�	�5��9�9��"�K�K�L�L��	�	�	�	
������"�"�3��b�	�	�5��9�9��"�K�K�L�L��	�	�	�	
���*�g�.�.�.�.�.r#c� �td���)N�{r!�r�s r!�_test_tracebackz'ProcessPoolExecutorTest._test_tracebacks���3���r#c��|j�|j��}|�t��5}|���ddd��n#1swxYwY|j}|�t|��t��|�
|jd��|j}|�t|��tjj��|�d|j��t%j��5}	|�#t$r"t)jt)j���YnwxYw	ddd��n#1swxYwY|�d|�����dS)N)r:z&raise RuntimeError(123) # some comment)r�r�r<r�r5rr�assertIsr�r�r�r/�	__cause__r�process�_RemoteTracebackr�tbr�captured_stderrr:�
excepthook�exc_info�getvalue)rVr�r��exc�cause�f1s      r!�test_tracebackz&ProcessPoolExecutorTest.test_tracebacks�����%�%�d�&:�;�;��
�
�
�y�
)�
)�	�R��M�M�O�O�O�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��l���
�
�d�3�i�i��.�.�.������6�*�*�*��
���
�
�d�5�k�k�7�?�#C�D�D�D��
�
�>���I�I�I�
�
$�
&�
&�	0�"�
0��	���
0�
0�
0�������/�/�/�/�
0����/�		0�	0�	0�	0�	0�	0�	0�	0�	0�	0�	0����	0�	0�	0�	0�
	
�
�
�>��k�k�m�m�	%�	%�	%�	%�	%sA�A�A�"A�E�D�)E�E�E�E�E�E�md5c��|������}t|��}|j�t
|��}|���|�|j�	d�����d}tj��|���|�
��dS)Nr%r�)r��Managerr\r�r��idrr�r_r�rr\r�r;)rVr`r�r�s    r!�test_ressources_gced_in_workersz7ProcessPoolExecutorTest.test_ressources_gced_in_workerss������ � �(�(�*�*���C� � ����%�%�b�#�.�.���
�
��������	���q��1�1�2�2�2�����������������
�
�
�
�
r#c�x�|j}|���}|�d��}d|jz}t	|��D]}|�|j���|�t|j	��|j��t	|��D]}|�
���dS)Nrr)r�r�r8r
r�r�r1r�rrkr:)rVr�ryr<�	job_countrfs      r!rz'ProcessPoolExecutorTest.test_saturation/s����=���%�%�'�'�
��"�"�1�%�%����.�.�	��y�!�!�	)�	)�A��O�O�C�K�(�(�(�(�����X�0�1�1�8�3H�I�I�I��y�!�!�	�	�A��K�K�M�M�M�M�	�	r#c��|j}|jdksJ�|����d���dkrt	jd���|�tdd�����|�tdd	�����|�td
d�����|�	t|j��d��dS)
NrBFrhr��(Incompatible with the fork start method.r�r�r�r�r6rr%)r�r
r�rjrrr�r-rr�rrkrs  r!�test_idle_process_reuse_onez3ProcessPoolExecutorTest.test_idle_process_reuse_one:s����=���$��)�)�)�)������.�.�%�.�@�@�F�J�J��#�$N�O�O�O�����R��#�#�*�*�,�,�,�����Q��"�"�)�)�+�+�+�����Q��#�#�*�*�,�,�,�����X�0�1�1�1�5�5�5�5�5r#c���|j}|jdksJ�|����d���dkrt	jd���|�tdd�����|�tdd	��|�td	d
�����|�tdd��|�td
d�����|�tdd��|�	t|j��d��|���dS)NrtFrhr�rS�r��!����r%r�r�	r6)
r�r
r�rjrrr�r-r�assertLessEqualrrkr�rs  r!� test_idle_process_reuse_multiplez8ProcessPoolExecutorTest.test_idle_process_reuse_multipleDs8���=���$��)�)�)�)������.�.�%�.�@�@�F�J�J��#�$N�O�O�O�����R��#�#�*�*�,�,�,�����R��$�$�$�����R��$�$�+�+�-�-�-�����R��$�$�$�����Q��"�"�)�)�+�+�+�����Q��"�"�"����S��!4�5�5�q�9�9�9��������r#c��|���}|�d���dkrL|�t��5|�d|d���ddd��n#1swxYwYdS|�d|d���}|�tj��}|���}|�tj��}|�	|���|��|�	t|j��d��|�tj��}|�	|���|��|�tj��}|���}|�||��|�	t|j��d��|�
��dS)NFrhr�r%r6�ry�max_tasks_per_child)r�rjr�rNr~r�r�getpidrr�rrk�assertNotEqualr�)	rVr�r�rI�original_pid�f2�f3�f4�new_pids	         r!�test_max_tasks_per_childz0ProcessPoolExecutorTest.test_max_tasks_per_childRs���"�"�$�$���#�#�u�#�5�5��?�?��"�"�:�.�.�
Q�
Q��"�"�1��a�"�P�P�P�
Q�
Q�
Q�
Q�
Q�
Q�
Q�
Q�
Q�
Q�
Q����
Q�
Q�
Q�
Q��F��%�%��g�1�&�>�>��
�_�_�R�Y�
'�
'���y�y�{�{��
�_�_�R�Y�
'�
'����������l�3�3�3�����X�0�1�1�1�5�5�5�
�_�_�R�Y�
'�
'����������l�3�3�3��_�_�R�Y�
'�
'���)�)�+�+�����L�'�2�2�2�����X�0�1�1�1�5�5�5��������s�	A.�.A2�5A2c��|�dd���}|�|j���d��dS)Nr%r6)rar�)r~r��_mp_contextrjrs  r!�2test_max_tasks_per_child_defaults_to_spawn_contextzJProcessPoolExecutorTest.test_max_tasks_per_child_defaults_to_spawn_contextnsG���%�%�a�Q�%�?�?������-�>�>�@�@�'�J�J�J�J�Jr#c���|���}|�d���dkrtjd���|�d|d���}g}td��D],}|j|�t||�����-|�	��t|��D];\}}|�|���t||�����<dS)	NFrhr�rSr6r%r`r�)
r�rjrrr~r�r�r�r-r��	enumerater�r)rVr�r�rr=r�s      r!�test_max_tasks_early_shutdownz5ProcessPoolExecutorTest.test_max_tasks_early_shutdownts���"�"�$�$���#�#�u�#�5�5��?�?��#�$N�O�O�O��%�%��g�1�&�>�>�����q���	7�	7�A��G�N�8�?�?�3��1�5�5�6�6�6�6�������"�7�+�+�	9�	9�I�A�v����V�]�]�_�_�c�!�Q�i�i�8�8�8�8�	9�	9r#N)rXrYrZrr*r:r�r/r3r8�classmethodr<rJr�requires_hashdigestrOrrTr^rirlror*r#r!r,r,�s�������X����w�.�0L�M�M�8�8�N�M�8�

N�
N�
N�/�/�/� � � ��[� �%�%�%�,(�^�'��.�.���/�.��$	�	�	�6�6�6�������8K�K�K�
9�
9�
9�
9�
9r#r,c��|rtj|��ddl}|���|���dS)zInduces a segfault.rN)r3r4�faulthandler�disable�_sigsegv)�delayrss  r!�_crashrw�sP�����
�5���������������������r#c�.�tjd��dS)z#Induces a sys exit with exitcode 1.r%N)r:�exitr*r#r!�_exitrz�s���H�Q�K�K�K�K�Kr#c��|���)z-Function that raises an Exception in process.r*)�Errs r!�_raise_errorr}�s
��

�#�%�%�Kr#c�Z�ddl}|���t_|���)z@Function that raises an Exception in process and ignores stderr.rN)�io�StringIOr:�stderr)r|rs  r!�_raise_error_ignore_stderrr��s%��
�I�I�I������C�J�

�#�%�%�Kr#c��|��S)z(Function that returns a instance of cls.r*r;s r!�_return_instancer��s
���3�5�5�Lr#c��eZdZdZd�ZdS)�
CrashAtPicklez5Bad object that triggers a segfault at pickling time.c�"�t��dSr�rwrUs r!�
__reduce__zCrashAtPickle.__reduce__�s�������r#N�rXrYrZ�__doc__r�r*r#r!r�r��s)������?�?�����r#r�c��eZdZdZd�ZdS)�CrashAtUnpicklez7Bad object that triggers a segfault at unpickling time.c��tdfS�Nr*r�rUs r!r�zCrashAtUnpickle.__reduce__�s���r�z�r#Nr�r*r#r!r�r��s)������A�A�����r#r�c��eZdZdZd�ZdS)�ExitAtPicklez9Bad object that triggers a process exit at pickling time.c�"�t��dSr�rzrUs r!r�zExitAtPickle.__reduce__�s��
�����r#Nr�r*r#r!r�r��s)������C�C�����r#r�c��eZdZdZd�ZdS)�ExitAtUnpicklez;Bad object that triggers a process exit at unpickling time.c��tdfSr�r�rUs r!r�zExitAtUnpickle.__reduce__�s���b�y�r#Nr�r*r#r!r�r��s)������E�E�����r#r�c��eZdZdZd�ZdS)�
ErrorAtPicklez3Bad object that triggers an error at pickling time.c�$�ddlm}|d���)Nrr
zError in pickle)�pickler)rVrs  r!r�zErrorAtPickle.__reduce__�s%��(�(�(�(�(�(��m�-�.�.�.r#Nr�r*r#r!r�r��s)������=�=�/�/�/�/�/r#r�c��eZdZdZd�ZdS)�ErrorAtUnpicklez5Bad object that triggers an error at unpickling time.c�"�ddlm}t|ffS)Nr)�UnpicklingError)r�r�r�)rVr�s  r!r�zErrorAtUnpickle.__reduce__�s"��*�*�*�*�*�*�)�O�+>�>�>r#Nr�r*r#r!r�r��s)������?�?�?�?�?�?�?r#r�c��eZdZejZd�Zdd�d�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�ZdS)�ExecutorDeadlockTestc���ddl}ddlm}|d���5}|�|���|�d��|���}ddd��n#1swxYwY|j���D]}|����|�	d���td|��tj���|�
d	|����dS)
Nr)�
TemporaryFilezw+)�mode)�fileTr�z
Traceback:
 zExecutor deadlock:

)rs�tempfiler��dump_traceback�seek�readrkrlr2r�r9r:�
__stderr__r�)rVr�rsr�r rBros       r!�_fail_on_deadlockz&ExecutorDeadlockTest._fail_on_deadlock�sA��	����*�*�*�*�*�*�
�]��
%�
%�
%�	���'�'�Q�'�/�/�/�
�F�F�1�I�I�I������B�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��$�+�+�-�-�	�	�A�
�K�K�M�M�M�M�	���t��$�$�$�
�$��$�$�3�>�:�:�:�:��	�	�/�2�/�/�0�0�0�0�0s�AA#�#A'�*A'F��
ignore_stderrc�D�|j�d���|�d|������}|j|g|�R�}|rtj��}ntj��}	|�	|��5|5|�
|j���ddd��n#1swxYwYddd��n#1swxYwYn*#tj
$r|�|��YnwxYw|�d���dS)NTr�r�rwr�)r�r�r~r�r�rrCr��nullcontextr�r�TIMEOUTrr�r�)rV�error�funcr�r/r�rRr�s        r!�_check_crashz!ExecutorDeadlockTest._check_crash�s����
���D��)�)�)��%�%��d�&6�&6�&8�&8�&�:�:���h�o�d�*�T�*�*�*���	*��(�*�*�B�B��'�)�)�B�	-��"�"�5�)�)�
5�
5��5�5��J�J�t�|�J�4�4�4�5�5�5�5�5�5�5�5�5�5�5����5�5�5�5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5�
5����
5�
5�
5�
5����#�	-�	-�	-�
�"�"�8�,�,�,�,�,�	-����	���t��$�$�$�$�$sZ�=C �C�B=�1C�=C	�C�C	�C�C �C�C �C�C � $D�Dc�`�|�ttt����dSr)r�rrNr�rUs r!�test_error_at_task_picklez.ExecutorDeadlockTest.test_error_at_task_pickle�s&��	
���-��]�_�_�=�=�=�=�=r#c�`�|�ttt����dSr)r�rrNr�rUs r!�test_exit_at_task_unpicklez/ExecutorDeadlockTest.test_exit_at_task_unpickles'�����+�R��1A�1A�B�B�B�B�Br#c�`�|�ttt����dSr)r�rrNr�rUs r!�test_error_at_task_unpicklez0ExecutorDeadlockTest.test_error_at_task_unpickle�'�����+�R��1B�1B�C�C�C�C�Cr#c�`�|�ttt����dSr)r�rrNr�rUs r!�test_crash_at_task_unpicklez0ExecutorDeadlockTest.test_crash_at_task_unpickler�r#c�F�|�tt��dSr)r�rrwrUs r!�%test_crash_during_func_exec_on_workerz:ExecutorDeadlockTest.test_crash_during_func_exec_on_workers�����+�V�4�4�4�4�4r#c�F�|�tt��dSr)r��
SystemExitrzrUs r!�$test_exit_during_func_exec_on_workerz9ExecutorDeadlockTest.test_exit_during_func_exec_on_workers�����*�e�,�,�,�,�,r#c�R�|�ttt��dSr)r�r�r}rUs r!�%test_error_during_func_exec_on_workerz:ExecutorDeadlockTest.test_error_during_func_exec_on_workers �����,��l�C�C�C�C�Cr#c�R�|�ttt��dSr)r�rr�r�rUs r!�)test_crash_during_result_pickle_on_workerz>ExecutorDeadlockTest.test_crash_during_result_pickle_on_workers$��	
���+�-=�}�M�M�M�M�Mr#c�R�|�ttt��dSr)r�r�r�r�rUs r!�(test_exit_during_result_pickle_on_workerz=ExecutorDeadlockTest.test_exit_during_result_pickle_on_workers#��	
���*�&6��E�E�E�E�Er#c�R�|�ttt��dSr)r�rr�r�rUs r!�)test_error_during_result_pickle_on_workerz>ExecutorDeadlockTest.test_error_during_result_pickle_on_worker"s#��	
���-�)9�=�I�I�I�I�Ir#c�V�|�tttd���dS)NTr�)r�rr�r�rUs r!�3test_error_during_result_unpickle_in_result_handlerzHExecutorDeadlockTest.test_error_during_result_unpickle_in_result_handler's6��	
���+�*�O�(,�	�	.�	.�	.�	.�	.r#c�R�|�ttt��dSr)r�rr�r�rUs r!�2test_exit_during_result_unpickle_in_result_handlerzGExecutorDeadlockTest.test_exit_during_result_unpickle_in_result_handler.s$��	
���+�-=�~�N�N�N�N�Nr#c��|j�d���|�d|������5}||_|�t
d���}|�d���|�t��5|���ddd��n#1swxYwYddd��dS#1swxYwYdS)NTr�r�rwrH)rv)	r�r�r~r�r�rwr�rr)rVr�r s   r!�test_shutdown_deadlockz+ExecutorDeadlockTest.test_shutdown_deadlock3sU��	
�
���D��)�)�)�
�
�
�A�+/�+;�+;�+=�+=� �?�?�	�BJ�$�D�M�����b��1�1�A����4��(�(�(��"�"�#4�5�5�
�
����
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	�	s7�AC�B:�.C�:B>	�>C�B>	�C�C�Cc�b�|j�d���|�d|������5}||_|�t
d�����|j}|�t
t����}|�d���|�	t��5|���ddd��n#1swxYwYddd��n#1swxYwY|���dS)NTr�r�rwr&F)r�r�r~r�r�rNrrtr�r�rr;)rVr��executor_managerr s    r!�test_shutdown_deadlock_picklez2ExecutorDeadlockTest.test_shutdown_deadlock_pickle?s���	
�
���D��)�)�)�
�
�
�A�+/�+;�+;�+=�+=� �?�?�	�BJ�$�D�M�

�O�O�B��#�#�*�*�,�,�,�'�@������M�O�O�4�4�A����5��)�)�)��"�"�=�1�1�
�
����
�
�
�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�&	�������s7�BD�C9�-D�9C=	�=D�C=	�D�D�DN)rXrYrZrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r*r#r!r�r��s4�������#�G�1�1�1�&>C�%�%�%�%�%�.>�>�>�
C�C�C�D�D�D�D�D�D�5�5�5�-�-�-�D�D�D�N�N�N�
F�F�F�
J�J�J�
.�.�.�O�O�O�

�
�
� � � � � r#r�c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZdS)�FutureTestsc���d��fd�}t��}|�|��|�d��|�d���dS)Nc�0��|����dSr�r��callback_future�callback_results �r!r�z6FutureTests.test_done_callback_with_result.<locals>.fnc����-�4�4�6�6�O�O�Or#rt)r�add_done_callbackr�r��rVr�r r�s   @r!�test_done_callback_with_resultz*FutureTests.test_done_callback_with_resultask�����	7�	7�	7�	7�	7�
�H�H��	���B����	���Q��������O�,�,�,�,�,r#c����d��fd�}t��}|�|��|�td����|�d�j��dS)Nc�0��|����dSr�r�r��callback_exceptions �r!r�z9FutureTests.test_done_callback_with_exception.<locals>.fnn����!0�!:�!:�!<�!<���r#r��r�)rr��
set_exceptionr5r�r/�rVr�r r�s   @r!�!test_done_callback_with_exceptionz-FutureTests.test_done_callback_with_exceptionls{���!��	=�	=�	=�	=�	=�
�H�H��	���B����	���	�&�)�)�*�*�*�����$6�$;�<�<�<�<�<r#c����d��fd�}t��}|�|��|�|�����|����dS)Nc�0��|����dSrr�r��
was_cancelleds �r!r�z6FutureTests.test_done_callback_with_cancel.<locals>.fny����+�5�5�7�7�M�M�Mr#)rr�r�r)�rVr�r r�s   @r!�test_done_callback_with_cancelz*FutureTests.test_done_callback_with_cancelwsr����
�	8�	8�	8�	8�	8�
�H�H��	���B����������
�
�#�#�#����
�&�&�&�&�&r#c����tj��5}d�d��fd�}�fd�}t��}|�|��|�|��|�d��|����|����|�d|�����ddd��dS#1swxYwYdS)NFc�&��d�td���)NT�doh!�r5)r��raising_was_calleds �r!�
raising_fnz9FutureTests.test_done_callback_raises.<locals>.raising_fn�s���%)�"���'�'�'r#c���d�dS)NTr*)r��
fn_was_calleds �r!r�z1FutureTests.test_done_callback_raises.<locals>.fn�s��� $�
�
�
r#rtzException: doh!)rrCrr�r�r�rrF)rVr�r�r�r r�r�s     @@r!�test_done_callback_raisesz%FutureTests.test_done_callback_raises�sJ����
�
$�
&�
&�	@�&�!&��!�M�
(�
(�
(�
(�
(�

%�
%�
%�
%�
%����A�
���
�+�+�+�
����#�#�#�
�L�L��O�O�O��O�O�.�/�/�/��O�O�M�*�*�*��M�M�+�V�_�_�->�->�?�?�?�'	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@�	@����	@�	@�	@�	@�	@�	@s�B.C�C�Cc���d��fd�}t��}|�d��|�|��|�d���dS)Nc�0��|����dSrr�r�s �r!r�z=FutureTests.test_done_callback_already_successful.<locals>.fn�r�r#rt)rr�r�r�r�s   @r!�%test_done_callback_already_successfulz1FutureTests.test_done_callback_already_successful�sk�����	7�	7�	7�	7�	7�
�H�H��	���Q����	���B��������O�,�,�,�,�,r#c����d��fd�}t��}|�td����|�|��|�d�j��dS)Nc�0��|����dSrr�r�s �r!r�z9FutureTests.test_done_callback_already_failed.<locals>.fn�r�r#r�r�)rr�r5r�r�r/r�s   @r!�!test_done_callback_already_failedz-FutureTests.test_done_callback_already_failed�s{���!��	=�	=�	=�	=�	=�
�H�H��	���	�&�)�)�*�*�*�	���B��������$6�$;�<�<�<�<�<r#c����d��fd�}t��}|�|�����|�|��|����dS)Nc�0��|����dSrrr�s �r!r�z<FutureTests.test_done_callback_already_cancelled.<locals>.fn�r�r#)rr�r)r�r�s   @r!�$test_done_callback_already_cancelledz0FutureTests.test_done_callback_already_cancelled�sr����
�	8�	8�	8�	8�	8�
�H�H��������
�
�#�#�#�	���B�������
�&�&�&�&�&r#c�t�tj��5}d�}t��}|�d��|�|��|�d|�����|�d|�����ddd��dS#1swxYwYdS)Nc� �td���)Nr�r�)r�s r!r�zKFutureTests.test_done_callback_raises_already_succeeded.<locals>.raising_fn�s����'�'�'r#rtzexception calling callback forr�)rrCrr�r�rrF)rVr�r�r s    r!�+test_done_callback_raises_already_succeededz7FutureTests.test_done_callback_raises_already_succeeded�s���
�
$�
&�
&�	5�&�
(�
(�
(����A�
�L�L��O�O�O�
���
�+�+�+��M�M�:�F�O�O�<M�<M�N�N�N��M�M�&�&�/�/�"3�"3�4�4�4�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5�	5����	5�	5�	5�	5�	5�	5s�BB-�-B1�4B1c���|�tt��d��|�tt��d��|�tt��d��|�tt
��d��|�tt��d��|�tt��d��dS)Nz%<Future at 0x[0-9a-f]+ state=pending>z%<Future at 0x[0-9a-f]+ state=running>z'<Future at 0x[0-9a-f]+ state=cancelled>z5<Future at 0x[0-9a-f]+ state=finished raised OSError>z3<Future at 0x[0-9a-f]+ state=finished returned int>)r]�reprr�r�r�r�r�r�rUs r!�	test_reprzFutureTests.test_repr�s������n�-�-�@�	B�	B�	B�����n�-�-�@�	B�	B�	B�����.�/�/�B�	D�	D�	D�����;�<�<�B�	D�	D�	D�����%�&�&�G�	I�	I�	I�	
����&�'�'�E�	G�	G�	G�	G�	Gr#c�r�tt���}tt���}tt���}tt���}tt
t
�����}tt
d���}|�|�����|�	|j
t��|�|�����|�	|j
t��|�|�����|�	|j
t��|�|�����|�	|j
t��|�|�����|�	|j
t
��|�|�����|�	|j
t
��dS)Nr$r%rtr')r"r
rrrr�OSErrorr�r)r�rr�)rVrIrerfrg�f5�f6s       r!�test_cancelzFutureTests.test_cancel�s���
��
)�
)�
)��
��
)�
)�
)��
��
+�
+�
+��
�!7�
8�
8�
8��
��W�Y�Y�
?�
?�
?��
��!�
4�
4�
4������	�	���$�$�$������I�.�.�.���������%�%�%������G�,�,�,�����	�	���$�$�$������I�.�.�.�����	�	���$�$�$������$:�;�;�;���������%�%�%������H�-�-�-���������%�%�%������H�-�-�-�-�-r#c��|�t�����|�t�����|�t
�����|�t�����|�t�����|�t�����dSr)	r�r�rr�r�r�r�r�r�rUs r!�test_cancelledzFutureTests.test_cancelled�s�������1�1�3�3�4�4�4�����1�1�3�3�4�4�4����(�2�2�4�4�5�5�5����5�?�?�A�A�B�B�B����)�3�3�5�5�6�6�6����*�4�4�6�6�7�7�7�7�7r#c��|�t�����|�t�����|�t
�����|�t�����|�t�����|�t�����dSr)	r�r�rr�r�r�r�r�r�rUs r!�	test_donezFutureTests.test_done�s�������,�,�.�.�/�/�/�����,�,�.�.�/�/�/����(�-�-�/�/�0�0�0����5�:�:�<�<�=�=�=����(�-�-�/�/�0�0�0����)�.�.�0�0�1�1�1�1�1r#c��|�t�����|�t�����|�t
�����|�t�����|�t�����|�t�����dSr)	r�r��runningr�r�r�r�r�r�rUs r!�test_runningzFutureTests.test_runnings�������/�/�1�1�2�2�2�����.�.�0�0�1�1�1����)�1�1�3�3�4�4�4����6�>�>�@�@�A�A�A����)�1�1�3�3�4�4�4����*�2�2�4�4�5�5�5�5�5r#c��|�tjtjd���|�tjt
jd���|�tjtjd���|�tjtjd���|�ttjd���|�t�d���d��dS)Nrr�r&)
r�rr�r�rr��CancelledErrorr�r�rr�r�r�rUs r!�test_result_with_timeoutz$FutureTests.test_result_with_timeouts������'�.�(�/��	�	<�	<�	<����'�.�(�/��	�	<�	<�	<����'�0�*�1�1�	�	>�	>�	>����'�0�7�>��	�	K�	K�	K����'�#3�#:�A��F�F�F����*�1�1�!�1�<�<�b�A�A�A�A�Ar#c�
���fd�}tt����tj|���}|���|���d���d��|���dS)Nc�Z��tjd����d��dS)Nr%r&)r3r4r��rIs�r!�notificationz:FutureTests.test_result_with_success.<locals>.notifications(����J�q�M�M�M��M�M�"�����r#r$��targetrtr�r&)r"r
r7�Thread�startr�rr;�rVrr6rIs   @r!�test_result_with_successz$FutureTests.test_result_with_successs����	�	�	�	�	�
��
)�
)�
)����L�1�1�1��	���	�	�	�������1��-�-�r�2�2�2�	�������r#c����fd�}tt����tj|���}|���|�tj�jtj
���|���dS)Nc�X��tjd������dS�Nr%)r3r4r)rs�r!rz9FutureTests.test_result_with_cancel.<locals>.notification(s!����J�q�M�M�M��I�I�K�K�K�K�Kr#r$rr�)r"r
r7rrr�rrrrr�r;rs   @r!�test_result_with_cancelz#FutureTests.test_result_with_cancel&s����	�	�	�	�	�
��
)�
)�
)����L�1�1�1��	���	�	�	����'�0��)�W�-B�	�	D�	D�	D�	�������r#c�F�|�tjtjd���|�tjt
jd���|�tjtjd���|�tjtjd���|�	tt�d���t����|�
t�d���d��dS)Nrr�)r�rr�r�rr�rr�r�r��
isinstancer�rr�r�rUs r!�test_exception_with_timeoutz'FutureTests.test_exception_with_timeout5s�����'�.�(�2�A�	�	?�	?�	?����'�.�(�2�A�	�	?�	?�	?����'�0�*�4�a�	�	A�	A�	A����'�0�7�A�1�	�	N�	N�	N����
�#3�#=�#=�a�#=�#H�#H�#*�,�,�	-�	-�	-����*�4�4�Q�4�?�?��F�F�F�F�Fr#c�B���fd�}tt����tj|���}|���|�t
��tj	���t����|���dS)Nc����tjd���j5t�_t���_�j���ddd��dS#1swxYwYdSr")r3r4�
_conditionrrrr�
notify_allrs�r!rz=FutureTests.test_exception_with_success.<locals>.notificationCs�����J�q�M�M�M���
+�
+�$��	� '�	�	��
��
�(�(�*�*�*�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+�
+����
+�
+�
+�
+�
+�
+s�9A#�#A'�*A'r$rr�)r"r
r7rrr�r%rrr�rr;rs   @r!�test_exception_with_successz'FutureTests.test_exception_with_successBs����	+�	+�	+�	+�	+���
)�
)�
)����L�1�1�1��	���	�	�	����
�2�<�<��8M�<�#N�#N�PW�X�X�Y�Y�Y�	�������r#c��tt���}|�d��|�tjd��5|�d��ddd��n#1swxYwY|�|�����|�|�	��d��dS)Nr$r%z=FINISHED: <Future at 0x[0-9a-f]+ state=finished returned int>r�)
r"r
r�r�r�InvalidStateErrorr�rr�r)rVr s  r!�test_multiple_set_resultz$FutureTests.test_multiple_set_resultRs�����(�(�(��	���Q����
�
#�
#��)�/�
�
�	�	�

�L�L��O�O�O�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	�	
��������!�!�!���������Q�'�'�'�'�'s�A-�-A1�4A1c�x�tt���}t��}|�|��|�t
jd��5|�t����ddd��n#1swxYwY|�|�	��|��dS)Nr$zBFINISHED: <Future at 0x[0-9a-f]+ state=finished raised ValueError>)
r"r
rNr�r�rr-r5r�r)rVr rFs   r!�test_multiple_set_exceptionz'FutureTests.test_multiple_set_exception`s�����(�(�(���L�L��	�������
�
#�
#��)�4�
�
�	)�	)�

�O�O�I�K�K�(�(�(�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)�	)����	)�	)�	)�	)�	
���������*�*�*�*�*s�"B�B�BN)rXrYrZr�r�r�r�r�r�rrrrr
rrrrr#r&r+r.r0r*r#r!r�r�`sL������	-�	-�	-�	=�	=�	=�	'�	'�	'�@�@�@�,	-�	-�	-�	=�	=�	=�	'�	'�	'�
5�
5�
5� G�G�G�".�.�.�48�8�8�2�2�2�6�6�6�
B�
B�
B����
�
�
�G�G�G���� (�(�(�+�+�+�+�+r#r�c��tjtjj��tj��}tjt
jg|�R�dSr)r�addModuleCleanup�multiprocessing�util�_cleanup_testsrrkrp)�thread_infos r!�setUpModuler7osJ����o�2�A�B�B�B�"�2�4�4�K���.�@�O�;�O�O�O�O�O�Or#�__main__r)br�r�test.supportrr�
import_moduler�test.support.script_helperrr�r�rI�logging.handlersr	rr�r&r:r7r3rr�r�r�
concurrentr�concurrent.futures._baser
rrrrrr�concurrent.futures.processrr�multiprocessing.processr3�multiprocessing.utilr��check_sanitizerrr"r�r�r�r�rr�r�rAr-r1r7r>rBrDrQ�objectrSr\rg�TestCaserirsr�r�r�r�r�r�r�r�r-rer|r�r�r�r�r,rwrzr}r�r�r�r�r�r�r�r�r�r�r7rX�mainr*r#r!�<module>rFs�	��������&�&�&�&�&�&�)�)�)�)�)�)��
��.�/�/�/�'�'�'�'�'�'�7�7�7�7�7�7�������������)�)�)�)�)�)�	�	�	�	�����
�
�
�
�
�
�
�
����������������� � � � � � �������������������������O�N�N�N�N�N�N�N��������������7��4��5�5�5�@��(�
�>�
?�
?�?� �4��
�
�
�
���W�-�-�-����W�-�-�-�� �=�y�1�1�1�� -�
�4J� K� K� K�� �=�x�7�7�9�9�E�E�E��!�M���<�<�<��$��������,�,�,����
������-�-�-�-�
�
�
�
�
�v�
�
�
�
�����������>�>�>�>�>�8�$�>�>�>�(�(�(�(�(�(�(�(�B/�/�/�/�/�m�/�/�/�%�%�%�%�%�=�%�%�%�	%�	%�	%�	%�	%�M�	%�	%�	%�%�%�%�%�%��%�%�%�)5��+:�+?�+E�+@�+B�����(8�8�8�8�8�}�8�8�8�$5 �5 �5 �5 �5 �m�5 �5 �5 �p��&�'�'�'���-�.�.�.�E7�E7�E7�E7�E7�E7�E7�E7�P[0�[0�[0�[0�[0�_�.B�L�[0�[0�[0�|LE�LE�LE�LE�LE�2�LE�LE�LE�^��-�';�'A�'<�'>�?�?�?�?�j2�j2�j2�j2�j2�j2�j2�j2�Z5�5�5�5�5�/�9�l�5�5�5�$��i�';�'A�'<�'>�?�?�?�?�OK�OK�OK�OK�OK�OK�OK�OK�d��&�'�'�'�S$�S$�S$�S$�S$�S$�S$�S$�lLV�LV�LV�LV�LV�_�l�L�LV�LV�LV�^c9�c9�c9�c9�c9�l�c9�c9�c9�L��-�';�'A�'<�'>�?�?�?�?�
�������
���
������
�����F���������f���������6���������V����/�/�/�/�/�F�/�/�/�?�?�?�?�?�f�?�?�?�I �I �I �I �I �I �I �I �X��*�';�'A�'<�'>�?�?�?�?�L+�L+�L+�L+�L+�,�L+�L+�L+�^P�P�P��z����H�M�O�O�O�O�O��r#