a
    ¼3j"Ö  ã                   @   sþ  d dl mZ e d¡ e ¡  d dlmZ d dlmZ d dlZd dl	Z	d dl
Z
d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dlmZ d d	lmZmZmZmZmZmZmZ d d
l m!Z! d dl"m#Z# d dl$Z"d dl%Z"eddfdd„Z&e&edZ'e&edZ(e&edZ)e&edZ*e&ee+ƒ dZ,e&eddZ-da.dd„ Z/dd„ Z0dd„ Z1dd„ Z2dd„ Z3dd„ Z4didd „Z5G d!d"„ d"e6ƒZ7G d#d$„ d$ƒZ8d%d&„ Z9G d'd(„ d(ej:ƒZ;G d)d*„ d*ƒZ<G d+d,„ d,e<ƒZ=G d-d.„ d.e<ƒZ>G d/d0„ d0e<ƒZ?G d1d2„ d2e<ƒZ@e;fe=e>e@e?ffd3d4„ZAG d5d6„ d6e<ƒZBG d7d8„ d8e<ƒZCeAeBƒ eAeCƒ G d9d:„ d:ƒZDG d;d<„ d<e=eDe;ƒZEG d=d>„ d>eDƒZFeAeFe>e@e?fd? G d@dA„ dAƒZGG dBdC„ dCe=eGe;ƒZHeAeGe>e@e?fd? G dDdE„ dEƒZIeAeIƒ G dFdG„ dGƒZJG dHdI„ dIe=eJe;ƒZKG dJdK„ dKeJƒZLeAeLe>e@e?fd? djdLdM„ZMdNdO„ ZNdPdQ„ ZOdRdS„ ZPdTdU„ ZQG dVdW„ dWe6ƒZRG dXdY„ dYe6ƒZSG dZd[„ d[e6ƒZTG d\d]„ d]e6ƒZUG d^d_„ d_e6ƒZVG d`da„ dae6ƒZWG dbdc„ dcƒZXeAeXe>e@e?fd? G ddde„ dee;ƒZYdfdg„ ZZe[dhkrúe \¡  dS )ké    )ÚsupportÚ_multiprocessing)Úhashlib_helper)Úassert_python_okN)ÚQueueHandler©ÚPicklingError)Úfutures)ÚPENDINGÚRUNNINGÚ	CANCELLEDÚCANCELLED_AND_NOTIFIEDÚFINISHEDÚFutureÚBrokenExecutor)ÚBrokenProcessPool)Úget_contextc                 C   s   t ƒ }| |_||_||_|S ©N)r   Ú_stateÚ
_exceptionÚ_result)ÚstateÚ	exceptionÚresultÚf© r   úX/www/server/python_manager/versions/3.9.10/lib/python3.9/test/test_concurrent_futures.pyÚcreate_future#   s
    r   ©r   ©r   r   é*   ©r   r   Úuninitializedc                 C   s   | | S r   r   )ÚxÚyr   r   r   Úmul5   s    r%   c                  O   s   | |fS r   r   )ÚargsÚkwargsr   r   r   Úcapture8   s    r(   c                 C   s   t  | ¡ tdƒ‚d S )Nzthis is an exception)ÚtimeÚsleepÚ	Exception)Útr   r   r   Úsleep_and_raise;   s    
r-   c                 C   s    t  | ¡ t|ƒ tj ¡  d S r   )r)   r*   ÚprintÚsysÚstdoutÚflush)r,   Úmsgr   r   r   Úsleep_and_print?   s    
r3   c                 C   s   | a d S r   ©ÚINITIALIZER_STATUS)r#   r   r   r   ÚinitD   s    r6   c                   C   s   t S r   r4   r   r   r   r   Úget_init_statusH   s    r7   c                 C   sF   | d ur0t  d¡}| t| ƒ¡ | d¡ d|_t d¡ tdƒ‚d S )Núconcurrent.futuresÚCRITICALFçš™™™™™¹?zerror in initializer)	ÚloggingÚ	getLoggerÚ
addHandlerr   ÚsetLevelÚ	propagater)   r*   Ú
ValueError)Ú	log_queueÚloggerr   r   r   Ú	init_failK   s    


rC   c                   @   s   e Zd Zdd„ ZdS )ÚMyObjectc                 C   s   d S r   r   ©Úselfr   r   r   Ú	my_methodV   s    zMyObject.my_methodN)Ú__name__Ú
__module__Ú__qualname__rG   r   r   r   r   rD   U   s   rD   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚEventfulGCObjc                 C   s   |  ¡ | _d S r   )ÚEventÚevent)rF   Úmgrr   r   r   Ú__init__[   s    zEventfulGCObj.__init__c                 C   s   | j  ¡  d S r   )rM   ÚsetrE   r   r   r   Ú__del__^   s    zEventfulGCObj.__del__N)rH   rI   rJ   rO   rQ   r   r   r   r   rK   Z   s   rK   c                 C   s   t ƒ S r   )rD   )Ú_r   r   r   Úmake_dummy_objectb   s    rS   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseTestCasec                 C   s   t  ¡ | _d S r   )r   Úthreading_setupÚ_thread_keyrE   r   r   r   ÚsetUpg   s    zBaseTestCase.setUpc                 C   s   t  ¡  t j| jŽ  d S r   )r   Úreap_childrenÚthreading_cleanuprV   rE   r   r   r   ÚtearDownj   s    zBaseTestCase.tearDownN)rH   rI   rJ   rW   rZ   r   r   r   r   rT   f   s   rT   c                       s@   e Zd ZdZi Z‡ fdd„Z‡ fdd„Zdd„ Zdd	„ Z‡  Z	S )
ÚExecutorMixiné   c                    sf   t ƒ  ¡  t ¡ | _t| dƒr@| jf | j|  ¡ dœ| j	¤Ž| _
n| jf d| ji| j	¤Ž| _
|  ¡  d S )NÚctx©Úmax_workersÚ
mp_contextr_   )ÚsuperrW   r)   Ú	monotonicÚt1ÚhasattrÚexecutor_typeÚworker_countr   Úexecutor_kwargsÚexecutorÚ_prime_executorrE   ©Ú	__class__r   r   rW   s   s    


þý
ÿþzExecutorMixin.setUpc                    sT   | j jdd d | _ t ¡ | j }tjr8td| dd |  |dd¡ t	ƒ  
¡  d S )NT©Úwaitz%.2fsú )Úendi,  z+synchronization issue: test lasted too long)rh   Úshutdownr)   rb   rc   r   Úverboser.   Z
assertLessra   rZ   )rF   Zdtrj   r   r   rZ   ‚   s    zExecutorMixin.tearDownc                 C   s
   t | jƒS r   )r   r]   rE   r   r   r   r      s    zExecutorMixin.get_contextc                    s.   ‡ fdd„t ˆ jƒD ƒ}|D ]}| ¡  qd S )Nc                    s   g | ]}ˆ j  tjd ¡‘qS ©r:   ©rh   Úsubmitr)   r*   ©Ú.0rR   rE   r   r   Ú
<listcomp>“   s   ÿz1ExecutorMixin._prime_executor.<locals>.<listcomp>)Úrangerf   r   ©rF   r	   r   r   rE   r   ri      s
    
ÿzExecutorMixin._prime_executor)
rH   rI   rJ   rf   rg   rW   rZ   r   ri   Ú__classcell__r   r   rj   r   r[   o   s   r[   c                   @   s   e Zd ZejZdS )ÚThreadPoolMixinN)rH   rI   rJ   r	   ÚThreadPoolExecutorre   r   r   r   r   r{   ™   s   r{   c                       s&   e Zd ZejZdZ‡ fdd„Z‡  ZS )ÚProcessPoolForkMixinÚforkc                    s   t jdkr|  d¡ tƒ  ¡ S ©NÚwin32zrequire unix system©r/   ÚplatformZskipTestra   r   rE   rj   r   r   r   ¡   s    

z ProcessPoolForkMixin.get_context©	rH   rI   rJ   r	   ÚProcessPoolExecutorre   r]   r   rz   r   r   rj   r   r}      s   r}   c                   @   s   e Zd ZejZdZdS )ÚProcessPoolSpawnMixinÚspawnN)rH   rI   rJ   r	   r„   re   r]   r   r   r   r   r…   §   s   r…   c                       s&   e Zd ZejZdZ‡ fdd„Z‡  ZS )ÚProcessPoolForkserverMixinÚ
forkserverc                    s   t jdkr|  d¡ tƒ  ¡ S r   r   rE   rj   r   r   r   °   s    

z&ProcessPoolForkserverMixin.get_contextrƒ   r   r   rj   r   r‡   ¬   s   r‡   c                 C   sP   dd„ }|D ]>}d||j ƒ|| j ƒf }t|| f|f | i ƒ}|tƒ |< qd S )Nc                 S   s4   |   d¡r| d d… S |   d¡r,| d d… S | S d S )N)ZMixinZTestséûÿÿÿZTestéüÿÿÿ)Úendswith)Únamer   r   r   Ústrip_mixin»   s
    

z*create_executor_tests.<locals>.strip_mixinz%s%sTest)rH   ÚtypeÚglobals)ZmixinÚbasesÚexecutor_mixinsr   ZexerŒ   Úclsr   r   r   Úcreate_executor_tests¶   s    ÿr“   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )ÚInitializerMixiné   c                    s    da ttdd| _tƒ  ¡  d S )Nr"   )Úinitialized©ÚinitializerÚinitargs)r5   Údictr6   rg   ra   rW   rE   rj   r   r   rW   Í   s
    ÿzInitializerMixin.setUpc                    s6   ‡ fdd„t ˆ jƒD ƒ}|D ]}ˆ  | ¡ d¡ qd S )Nc                    s   g | ]}ˆ j  t¡‘qS r   )rh   rt   r7   ru   rE   r   r   rw   Õ   s   ÿz5InitializerMixin.test_initializer.<locals>.<listcomp>r–   )rx   rf   ÚassertEqualr   ry   r   rE   r   Útest_initializerÔ   s
    
ÿz!InitializerMixin.test_initializer)rH   rI   rJ   rf   rW   rœ   rz   r   r   rj   r   r”   Ê   s   r”   c                       s>   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zejdd	„ ƒZ	‡  Z
S )
ÚFailingInitializerMixinr•   c                    sZ   t | dƒr4|  ¡ | _| j ¡ | _tt| jfd| _nd | _d | _ttd| _tƒ  	¡  d S )Nr]   r—   )r˜   )
rd   r   r`   ÚQueuerA   rš   rC   rg   ra   rW   rE   rj   r   r   rW   ß   s    

ÿ
zFailingInitializerMixin.setUpc              	   C   sð   |   d¡Ò z| j t¡}W n ty.   Y n40 |  t¡ | ¡  W d   ƒ n1 sX0    Y  t ¡ }| jj	s˜t ¡ | dkrŒ|  
d¡ t d¡ qj|  t¡ | j t¡ W d   ƒ n1 sÄ0    Y  W d   ƒ n1 sâ0    Y  d S )Nz ValueError: error in initializerr\   zexecutor not broken after 5 s.g{®Gáz„?)Ú_assert_loggedrh   rt   r7   r   ÚassertRaisesr   r)   rb   Ú_brokenÚfailr*   )rF   Úfuturerc   r   r   r   rœ   î   s    &
z(FailingInitializerMixin.test_initializerc                 C   s   d S r   r   rE   r   r   r   ri     s    z'FailingInitializerMixin._prime_executorc                 #   s    | j d urFd V  g }z| | j  ¡  ¡ ¡ qW q~ tjyB   Y q~0 n8|  dd¡}d V  W d   ƒ n1 sn0    Y  |j}|  t	‡ fdd„|D ƒƒ|¡ d S )Nr8   r9   c                 3   s   | ]}ˆ |v V  qd S r   r   )rv   Úline©r2   r   r   Ú	<genexpr>  ó    z9FailingInitializerMixin._assert_logged.<locals>.<genexpr>)
rA   ÚappendÚ
get_nowaitÚ
getMessageÚqueueÚEmptyZ
assertLogsÚoutputÚ
assertTrueÚany)rF   r2   r­   Úcmr   r¥   r   rŸ     s    
$ÿz&FailingInitializerMixin._assert_logged)rH   rI   rJ   rf   rW   rœ   ri   Ú
contextlibÚcontextmanagerrŸ   rz   r   r   rj   r   r   Ü   s   r   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚExecutorShutdownTestc                 C   s$   | j  ¡  |  t| j jtdd¡ d S )Nr•   r\   )rh   rp   r    ÚRuntimeErrorrt   ÚpowrE   r   r   r   Útest_run_after_shutdown  s
    
þz,ExecutorShutdownTest.test_run_after_shutdownc                 C   sD   t ddj| jjt| ddƒdƒ\}}}|  |¡ |  | ¡ d¡ d S )Nú-caK  if 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")
            r]   Ú ©re   Úcontextó   apple)r   Úformatre   rH   ÚgetattrÚassertFalser›   Ústrip©rF   ÚrcÚoutÚerrr   r   r   Útest_interpreter_shutdown"  s    
ò
z.ExecutorShutdownTest.test_interpreter_shutdownc                 C   sJ   t ddj| jjt| ddƒdƒ\}}}|  d| ¡ ¡ |  | ¡ d¡ d S )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()
            r]   r¸   r¹   z)RuntimeError: cannot schedule new futuress   runtime-error)	r   r¼   re   rH   r½   ÚassertInÚdecoder›   r¿   rÀ   r   r   r   Ú&test_submit_after_interpreter_shutdown8  s    
ìz;ExecutorShutdownTest.test_submit_after_interpreter_shutdownc                    s6   ‡ fdd„t dƒD ƒ}ˆ j ¡  |D ]}| ¡  q$d S )Nc                    s   g | ]}ˆ j  tjd ¡‘qS rr   rs   ru   rE   r   r   rw   U  r§   z=ExecutorShutdownTest.test_hang_issue12364.<locals>.<listcomp>é2   )rx   rh   rp   r   )rF   Úfsr   r   rE   r   Útest_hang_issue12364T  s    
z)ExecutorShutdownTest.test_hang_issue12364c                    sÀ   | j dd‰ ‡ fdd„tdƒD ƒ}ˆ jdd dd„ |D ƒ}| jt|ƒd	kd
t|ƒ›d dd„ |D ƒ}|D ],}| j| ¡ d|j›d |  | ¡ ¡ qn| jt|ƒdkdt|ƒ›d d S )Né   ©r_   c                    s   g | ]}ˆ   tjd ¡‘qS rr   )rt   r)   r*   ru   ©rh   r   r   rw   \  r§   z<ExecutorShutdownTest.test_cancel_futures.<locals>.<listcomp>rÈ   T)Úcancel_futuresc                 S   s   g | ]}|  ¡ r|‘qS r   ©Ú	cancelled©rv   Úfutr   r   r   rw   a  r§   é#   zlen(cancelled)=r¥   c                 S   s   g | ]}|  ¡ s|‘qS r   rÏ   rÑ   r   r   r   rw   g  r§   zfut._state=r   zlen(others)=)	re   rx   rp   r®   ÚlenÚdoner   ÚassertIsNoner   )rF   rÉ   rÐ   ZothersrÒ   r   rÍ   r   Útest_cancel_futuresZ  s     z(ExecutorShutdownTest.test_cancel_futuresc                 C   sP   | j tjkrt d¡‚tddj| j jdƒ\}}}|  |¡ |  	| 
¡ d¡ d S )Nz/Hangs due to https://bugs.python.org/issue39205r·   aN  if True:
            from concurrent.futures import {executor_type}
            from test.test_concurrent_futures import sleep_and_print
            if __name__ == "__main__":
                t = {executor_type}(max_workers=3)
                t.submit(sleep_and_print, 1.0, "apple")
                t.shutdown(wait=False)
            ©re   r»   )re   r	   r„   ÚunittestZSkipTestr   r¼   rH   r¾   r›   r¿   rÀ   r   r   r   Útest_hang_issue39205q  s    ÿù
z)ExecutorShutdownTest.test_hang_issue39205N)	rH   rI   rJ   r¶   rÄ   rÇ   rÊ   r×   rÚ   r   r   r   r   r³     s   r³   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )ÚThreadPoolShutdownTestc                 C   s   d S r   r   rE   r   r   r   ri   ‡  s    z&ThreadPoolShutdownTest._prime_executorc                 C   s|   dd„ }t  d¡}tdƒD ]}| j ||¡ q|  t| jjƒd¡ tdƒD ]}| ¡  qJ| j 	¡  | jjD ]}| 
¡  qjd S )Nc                 S   s   |   ¡  d S r   ©Úacquire©Úlockr   r   r   Úacquire_lock‹  s    zCThreadPoolShutdownTest.test_threads_terminate.<locals>.acquire_lockr   rË   )Ú	threadingÚ	Semaphorerx   rh   rt   r›   rÔ   Ú_threadsÚreleaserp   Újoin)rF   rà   ÚsemÚir,   r   r   r   Útest_threads_terminateŠ  s    


z-ThreadPoolShutdownTest.test_threads_terminatec              
   C   sj   t jdd6}|}|  t| ttddƒ¡ƒg d¢¡ W d   ƒ n1 sH0    Y  |jD ]}| ¡  qXd S ©Nr\   rÌ   r‰   )
r\   é   rË   r•   é   r   rë   r•   rË   rê   )	r	   r|   r›   ÚlistÚmapÚabsrx   rã   rå   )rF   Úerh   r,   r   r   r   Útest_context_manager_shutdown˜  s    ÿ"
z4ThreadPoolShutdownTest.test_context_manager_shutdownc                 C   s<   t jdd}| ttddƒ¡}|j}~|D ]}| ¡  q*d S ©Nr\   rÌ   r‰   )r	   r|   rí   rî   rx   rã   rå   ©rF   rh   ÚresÚthreadsr,   r   r   r   Útest_del_shutdown¡  s    
z(ThreadPoolShutdownTest.test_del_shutdownc                 C   sF   t jdd}| ttddƒ¡}|j}|jdd |D ]}| ¡  q4d S ©Nr\   rÌ   r‰   Frl   )r	   r|   rí   rî   rx   rã   rp   rå   rò   r   r   r   Útest_shutdown_no_wait®  s    
z,ThreadPoolShutdownTest.test_shutdown_no_waitc                 C   sT   t jddd}| ttddƒ¡ |j}~t ¡  |D ]}|  |j	d¡ | 
¡  q4d S )Nr\   ZSpecialPool)r_   Zthread_name_prefixr‰   z^SpecialPool_[0-4]$©r	   r|   rí   rî   rx   rã   r   Ú
gc_collectÚassertRegexrŒ   rå   ©rF   rh   rô   r,   r   r   r   Útest_thread_names_assigned½  s    ÿz1ThreadPoolShutdownTest.test_thread_names_assignedc                 C   sR   t jdd}| ttddƒ¡ |j}~t ¡  |D ]}|  |j	d¡ | 
¡  q2d S )Nr\   rÌ   r‰   zThreadPoolExecutor-\d+_[0-4]$rø   rû   r   r   r   Útest_thread_names_defaultÉ  s    z0ThreadPoolShutdownTest.test_thread_names_defaultc                 C   s:   t ddj| jjdƒ\}}}|  |¡ |  | ¡ d¡ d S )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Ø   r»   )r   r¼   re   rH   r¾   r›   r¿   rÀ   r   r   r   Útest_cancel_futures_wait_falseÖ  s
    ù

z5ThreadPoolShutdownTest.test_cancel_futures_wait_falseN)rH   rI   rJ   ri   rè   rð   rõ   r÷   rü   rý   rþ   r   r   r   r   rÛ   †  s   	rÛ   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚProcessPoolShutdownTestc                 C   s   d S r   r   rE   r   r   r   ri   è  s    z'ProcessPoolShutdownTest._prime_executorc                 C   sŠ   dd„ }t ƒ }| d¡}tdƒD ]}| j ||¡ q |  t| jjƒd¡ tdƒD ]}| ¡  qP| jj}| j 	¡  | 
¡ D ]}| ¡  qxd S )Nc                 S   s   |   ¡  d S r   rÜ   rÞ   r   r   r   rà   ì  s    zFProcessPoolShutdownTest.test_processes_terminate.<locals>.acquire_lockr   rË   )r   râ   rx   rh   rt   r›   rÔ   Ú
_processesrä   rp   Úvaluesrå   )rF   rà   r`   ræ   rR   Ú	processesÚpr   r   r   Útest_processes_terminateë  s    


z0ProcessPoolShutdownTest.test_processes_terminatec              
   C   sn   t jdd8}|j}|  t| ttddƒ¡ƒg d¢¡ W d   ƒ n1 sJ0    Y  | ¡ D ]}| 	¡  q\d S ré   )
r	   r„   r   r›   rì   rí   rî   rx   r  rå   )rF   rï   r  r  r   r   r   rð   ü  s    ÿ"z5ProcessPoolShutdownTest.test_context_manager_shutdownc                 C   sj   t jdd}| ttddƒ¡}|j}|j}|j}|j}~t 	¡  | 
¡  | ¡ D ]}| 
¡  qP| ¡  d S rñ   )r	   r„   rí   rî   rx   Ú_executor_manager_threadr   Ú_call_queuer   rù   rå   r  Újoin_thread)rF   rh   ró   Úexecutor_manager_threadr  Ú
call_queuer  r   r   r   rõ     s    
z)ProcessPoolShutdownTest.test_del_shutdownc                 C   sf   t jdd}| ttddƒ¡}|j}|j}|j}|jdd | 	¡  | 
¡ D ]}| 	¡  qL| ¡  d S rö   )r	   r„   rí   rî   rx   r   r  r  rp   rå   r  r  )rF   rh   ró   r  r	  r  r  r   r   r   r÷     s    
z-ProcessPoolShutdownTest.test_shutdown_no_waitN)rH   rI   rJ   ri   r  rð   rõ   r÷   r   r   r   r   rÿ   ç  s
   	rÿ   )r‘   c                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dS )Ú	WaitTestsc                 C   sH   | j  tjd¡}tj||gtjd\}}|  |h|¡ |  tƒ |¡ d S ©Nç      ø?©Úreturn_when)	rh   rt   r)   r*   r	   rm   ÚALL_COMPLETEDr›   rP   )rF   r£   rÕ   Únot_doner   r   r   Ú
test_203697  s    
ÿ
zWaitTests.test_20369c                 C   sd   | j  tdd¡}| j  tjd¡}tjt||gtjd\}}|  	t
|gƒ|¡ |  	t
t|gƒ|¡ d S )Né   r•   r  r  )rh   rt   r%   r)   r*   r	   rm   ÚCANCELLED_FUTUREÚFIRST_COMPLETEDr›   rP   )rF   Úfuture1Úfuture2rÕ   r  r   r   r   Útest_first_completed@  s    þ
zWaitTests.test_first_completedc                 C   sT   | j  tjd¡}tjtt|gtjd\}}|  	t
ttgƒ|¡ |  	t
|gƒ|¡ d S r  )rh   rt   r)   r*   r	   rm   ÚCANCELLED_AND_NOTIFIED_FUTUREÚSUCCESSFUL_FUTUREr  r›   rP   ©rF   r  ÚfinishedÚpendingr   r   r   Ú+test_first_completed_some_already_completedK  s    þ

þz5WaitTests.test_first_completed_some_already_completedc                 C   sr   | j  tdd¡}| j  td¡}| j  tjd¡}tj|||gtjd\}}|  	t
||gƒ|¡ |  	t
|gƒ|¡ d S )Nr•   r  r  rË   r  )rh   rt   r%   r-   r)   r*   r	   rm   ÚFIRST_EXCEPTIONr›   rP   )rF   r  r  Zfuture3r  r  r   r   r   Útest_first_exceptionW  s    þ
zWaitTests.test_first_exceptionc                 C   sl   | j  tdd¡}| j  tjd¡}tjttt	||gtj
d\}}|  ttt	|gƒ|¡ |  tt|gƒ|¡ d S )Nr  r   r  r  )rh   rt   Údivmodr)   r*   r	   rm   r  r  r  r  r›   rP   ©rF   r  r  r  r  r   r   r   Ú*test_first_exception_some_already_completec  s"    ýû
þþz4WaitTests.test_first_exception_some_already_completec                 C   sP   | j  tjd¡}tjt|gtjd\}}|  t	tgƒ|¡ |  t	|gƒ|¡ d S )Nr•   r  )
rh   rt   r)   r*   r	   rm   ÚEXCEPTION_FUTUREr  r›   rP   r  r   r   r   Ú'test_first_exception_one_already_faileds  s    þ
z1WaitTests.test_first_exception_one_already_failedc                 C   sj   | j  tdd¡}| j  tdd¡}tjttt||gtj	d\}}|  
tttt||gƒ|¡ |  
tƒ |¡ d S )Nr•   r   r  r  )rh   rt   r   r%   r	   rm   r  r  r#  r  r›   rP   r!  r   r   r   Útest_all_completed}  s(    üú
üüzWaitTests.test_all_completedc                 C   sn   | j  tdd¡}| j  tjd¡}tjttt	||gdtj
d\}}|  tttt	|gƒ|¡ |  t|gƒ|¡ d S )Né   é   r\   )Útimeoutr  )rh   rt   r%   r)   r*   r	   rm   r  r#  r  r  r›   rP   r!  r   r   r   Útest_timeout  s&    ýú
ýýzWaitTests.test_timeoutN)rH   rI   rJ   r  r  r  r  r"  r$  r%  r)  r   r   r   r   r
  6  s   	
r
  c                   @   s   e Zd Zdd„ ZdS )ÚThreadPoolWaitTestsc              	      sv   t  ¡ ‰ ‡ fdd„‰t ¡ }t d¡ z>‡‡fdd„tdƒD ƒ}ˆ  ¡  tj|tj	d W t |¡ nt |¡ 0 d S )Nc                      s   ˆ   ¡  d S r   rl   r   )rM   r   r   Úfuture_func©  s    z@ThreadPoolWaitTests.test_pending_calls_race.<locals>.future_funcgíµ ÷Æ°>c                    s   h | ]}ˆj  ˆ ¡’qS r   )rh   rt   )rv   rç   )r+  rF   r   r   Ú	<setcomp>®  r§   z>ThreadPoolWaitTests.test_pending_calls_race.<locals>.<setcomp>éd   r  )
rá   rL   r/   ÚgetswitchintervalÚsetswitchintervalrx   rP   r	   rm   r  )rF   ZoldswitchintervalrÉ   r   )rM   r+  rF   r   Útest_pending_calls_race¥  s    
z+ThreadPoolWaitTests.test_pending_calls_raceN)rH   rI   rJ   r0  r   r   r   r   r*  £  s   r*  c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚAsCompletedTestsc                 C   sV   | j  tdd¡}| j  tdd¡}tt ttt||g¡ƒ}|  	tttt||gƒ|¡ d S )Nr•   r  r'  r&  )
rh   rt   r%   rP   r	   Úas_completedr  r#  r  r›   )rF   r  r  Ú	completedr   r   r   Útest_no_timeout½  s$    ýÿýÿûz AsCompletedTests.test_no_timeoutc                 C   sp   | j  tjd¡}tƒ }z*tjttt	|gddD ]}| 
|¡ q.W n tjyT   Y n0 |  tttt	gƒ|¡ d S )Nr•   r   ©r(  )rh   rt   r)   r*   rP   r	   r2  r  r#  r  ÚaddÚTimeoutErrorr›   )rF   r  Zcompleted_futuresr£   r   r   r   Útest_zero_timeoutÍ  s(    ýû
þýz"AsCompletedTests.test_zero_timeoutc                 C   s@   | j  tjd¡}dd„ t t |d¡¡D ƒ}|  t	|ƒd¡ d S )Nr•   c                 S   s   g | ]}|‘qS r   r   )rv   r   r   r   r   rw   å  s   z;AsCompletedTests.test_duplicate_futures.<locals>.<listcomp>rË   rë   )
rh   rt   r)   r*   r	   r2  Ú	itertoolsÚrepeatr›   rÔ   )rF   r  r3  r   r   r   Útest_duplicate_futuresà  s
    ÿz'AsCompletedTests.test_duplicate_futuresc                 C   sü   dd„ t dƒD ƒ}| ttd¡ | ttdd¡ |  tj¡N tj|ddD ].}| 	|¡ t
 |¡}~t ¡  |  |ƒ ¡ qPW d   ƒ n1 s”0    Y  |d  d	¡ t |¡D ]@}| 	|¡ t
 |¡}~t ¡  |  |ƒ ¡ |r¶|d  d	¡ q¶d S )
Nc                 S   s   g | ]
}t ƒ ‘qS r   )r   ru   r   r   r   rw   í  r§   zGAsCompletedTests.test_free_reference_yielded_future.<locals>.<listcomp>é   r   r    r!   r   r5  Útest)rx   r¨   r   r   r   r    r	   r7  r2  ÚremoveÚweakrefÚrefr   rù   rÖ   Ú
set_result)rF   Úfutures_listr£   Úwrr   r   r   Ú"test_free_reference_yielded_futureê  s&    

,

z3AsCompletedTests.test_free_reference_yielded_futurec                 C   s`   t tttg}|  tj¡"}ttj|ddƒ W d   ƒ n1 s@0    Y  |  	t
|jƒd¡ d S )Nr   r5  z2 (of 4) futures unfinished)r  ÚPENDING_FUTUREÚRUNNING_FUTUREr  r    r	   r7  rì   r2  r›   Ústrr   )rF   rB  r°   r   r   r   Ú"test_correct_timeout_exception_msg  s    ÿ0z3AsCompletedTests.test_correct_timeout_exception_msgN)rH   rI   rJ   r4  r8  r;  rD  rH  r   r   r   r   r1  »  s
   
r1  c                   @   sZ   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Ze	j
dd„ ƒZdd„ Zdd„ ZdS )ÚExecutorTestc                 C   s$   | j  tdd¡}|  d| ¡ ¡ d S )Nr•   r<  é   )rh   rt   rµ   r›   r   ©rF   r£   r   r   r   Útest_submit  s    zExecutorTest.test_submitc                 C   sÆ   | j jtddd}|  d| ¡ ¡ | j jtdddd}|  | ¡ ddddœf¡ |  t¡  | j jtdd	 W d   ƒ n1 s€0    Y  |  t¡ | j jdd
 W d   ƒ n1 s¸0    Y  d S )Nr•   r<  )r$   é   rë   rË   )rF   Úfn)rë   )rN  Úarg)rO  )rh   rt   r%   r›   r   r(   r    Ú	TypeErrorrK  r   r   r   Útest_submit_keyword  s    .z ExecutorTest.test_submit_keywordc              	   C   sx   |   t| j ttdƒtdƒ¡ƒttttdƒtdƒƒƒ¡ |   t| jjttdƒtdƒddƒttttdƒtdƒƒƒ¡ d S )Né
   rË   ©Ú	chunksize)r›   rì   rh   rí   rµ   rx   rE   r   r   r   Útest_map!  s    þþzExecutorTest.test_mapc                 C   sJ   | j  tg d¢g d¢¡}|  | ¡ d¡ |  | ¡ d¡ |  t|j¡ d S )N)rë   rë   rë   rë   )r•   rË   r   r\   )r   rë   )rh   rí   r   r›   Ú__next__r    ÚZeroDivisionError)rF   rç   r   r   r   Útest_map_exception*  s    zExecutorTest.test_map_exceptionc                 C   sd   g }z,| j jtjg d¢ddD ]}| |¡ qW n tjyD   Y n0 |  d¡ |  d d g|¡ d S )N)r   r   r&  r\   r5  zexpected TimeoutError)	rh   rí   r)   r*   r¨   r	   r7  r¢   r›   )rF   Úresultsrç   r   r   r   Útest_map_timeout0  s    
þ

zExecutorTest.test_map_timeoutc                 C   s(   | j  tdg| jd  ¡ | j  ¡  d S )Nr•   rë   )rh   rí   rG  rf   rp   rE   r   r   r   Útest_shutdown_race_issue12456>  s    z*ExecutorTest.test_shutdown_race_issue12456c                    sP   t ƒ }t ¡ ‰ t |‡ fdd„¡}| j |j¡ ~ˆ jt	j
d}|  |d¡ d S )Nc                    s   ˆ   ¡ S r   )rP   )Úobj©Zmy_object_collectedr   r   Ú<lambda>L  r§   z7ExecutorTest.test_no_stale_references.<locals>.<lambda>r5  z-Stale reference not collected within timeout.)rD   rá   rL   r?  r@  rh   rt   rG   rm   r   ÚSHORT_TIMEOUTr®   )rF   Z	my_objectZmy_object_callbackZ	collectedr   r]  r   Útest_no_stale_referencesE  s    ÿÿz%ExecutorTest.test_no_stale_referencesc              	   C   sF   dD ]<}|   td¡ | j|d W d   ƒ q1 s60    Y  qd S )N)r   éÿÿÿÿz"max_workers must be greater than 0rÌ   )ÚassertRaisesRegexr@   re   )rF   Znumberr   r   r   Útest_max_workers_negativeU  s
    ÿz&ExecutorTest.test_max_workers_negativec                 C   s<   | j  ttdƒ¡D ]$}t |¡}~t ¡  |  |ƒ ¡ qd S )NrR  )	rh   rí   rS   rx   r?  r@  r   rù   rÖ   )rF   r\  rC  r   r   r   Útest_free_reference\  s
    
z ExecutorTest.test_free_referenceN)rH   rI   rJ   rL  rQ  rU  rX  rZ  r[  r   Zcpython_onlyr`  rc  rd  r   r   r   r   rI    s   
	
rI  c                   @   sF   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Ze e	e
d	ƒd
¡dd„ ƒZdS )ÚThreadPoolExecutorTestc                    sD   g ‰ ‡ fdd„}| j  |tdƒ¡ | j jdd |  ˆ tdƒ¡ d S )Nc                    s   ˆ   | ¡ d S r   )r¨   )Ún©r  r   r   Úrecord_finishedj  s    zRThreadPoolExecutorTest.test_map_submits_without_iteration.<locals>.record_finishedrR  Trl   )rh   rí   rx   rp   ZassertCountEqual)rF   rh  r   rg  r   Ú"test_map_submits_without_iterationg  s
    z9ThreadPoolExecutorTest.test_map_submits_without_iterationc                 C   s0   |   ¡ }tdt ¡ pdd ƒ}|  |j|¡ d S )Né    rë   rê   )re   ÚminÚosÚ	cpu_countr›   Ú_max_workers)rF   rh   Zexpectedr   r   r   Útest_default_workersq  s    z+ThreadPoolExecutorTest.test_default_workersc                 C   s|   |   d¡}dd„ }t d¡}td|j ƒD ]}| ||¡ q*|  t|jƒ|j¡ td|j ƒD ]}| 	¡  q^|j
dd d S )Nrê   c                 S   s   |   ¡  d S r   rÜ   rÞ   r   r   r   rà   x  s    z<ThreadPoolExecutorTest.test_saturation.<locals>.acquire_lockr   é   Trl   )re   rá   râ   rx   rn  rt   r›   rÔ   rã   rä   rp   )rF   rh   rà   ræ   rç   r   r   r   Útest_saturationv  s    


z&ThreadPoolExecutorTest.test_saturationc                 C   s`   |   ¡ }| tdd¡ ¡  | tdd¡ ¡  | tdd¡ ¡  |  t|jƒd¡ |jdd	 d S )
Nr  r•   r&  r'  rË   é   rë   Trl   )re   rt   r%   r   r›   rÔ   rã   rp   ©rF   rh   r   r   r   Útest_idle_thread_reuseƒ  s    z-ThreadPoolExecutorTest.test_idle_thread_reuseÚregister_at_forkzneed os.register_at_forkc              
      s   ‡ fdd„‰ t  d¡f}| ˆ |¡ tdƒD ]@}t jdtdƒd}| t¡ W d   ƒ q,1 sb0    Y  q,W d   ƒ n1 s‚0    Y  d S )Nc                    s   |   ˆ | ¡ d S r   ©rt   )Úpoolrv  r   r   rt     s    zEThreadPoolExecutorTest.test_hang_global_shutdown_lock.<locals>.submitrë   rÈ   r~   )r`   )r	   r|   rt   rx   r„   r   Útuple)rF   rw  rR   Úworkersr   rv  r   Útest_hang_global_shutdown_lock‹  s    z5ThreadPoolExecutorTest.test_hang_global_shutdown_lockN)rH   rI   rJ   ri  ro  rq  rt  rÙ   Ú
skipUnlessrd   rl  rz  r   r   r   r   re  f  s   
re  c                   @   st   e Zd Ze ejdkd¡dd„ ƒZdd„ Zdd„ Z	e
d	d
„ ƒZdd„ Ze d¡dd„ ƒZdd„ Zdd„ Zdd„ ZdS )ÚProcessPoolExecutorTestr€   zWindows-only process limitc                 C   s<   |   td¡ tjdd W d   ƒ n1 s.0    Y  d S )Nzmax_workers must be <= 61é>   rÌ   )rb  r@   r	   r„   rE   r   r   r   Útest_max_workers_too_largeœ  s    ÿz2ProcessPoolExecutorTest.test_max_workers_too_largec                 C   s`   | j  tjd¡g}tt| j j ¡ ƒƒ}| ¡  |D ]}|  	t
|j¡ q2|  	t
| j jtdd¡ d S )NrË   r•   r<  )rh   rt   r)   r*   ÚnextÚiterr   r  Ú	terminater    r   r   rµ   )rF   r	   r  rÒ   r   r   r   Útest_killed_child¢  s    z)ProcessPoolExecutorTest.test_killed_childc              	      s¬   ‡ fdd„}t tttdƒtdƒƒƒ}ˆ  t ˆ jjttdƒtdƒddƒ|¡ ˆ  t ˆ jjttdƒtdƒddƒ|¡ ˆ  t ˆ jjttdƒtdƒddƒ|¡ ˆ  t|¡ d S )Nc                      s$   t ˆ jjttdƒtdƒddƒ d S )Né(   ra  rS  )rì   rh   rí   rµ   rx   r   rE   r   r   Úbad_map¯  s    z;ProcessPoolExecutorTest.test_map_chunksize.<locals>.bad_maprƒ  r&  rS  rÈ   )rì   rí   rµ   rx   r›   rh   r    r@   )rF   r„  r@  r   rE   r   Útest_map_chunksize®  s    þþþz*ProcessPoolExecutorTest.test_map_chunksizec                 C   s   t dƒ‚d S )Né{   )r´   ©r’   r   r   r   Ú_test_traceback¾  s    z'ProcessPoolExecutorTest._test_tracebackc              	   C   sò   | j  | j¡}|  t¡}| ¡  W d   ƒ n1 s60    Y  |j}|  t|ƒt	¡ |  
|jd¡ |j}|  t|ƒtjj¡ |  d|j¡ t ¡ :}z|‚W n  t	y¾   tjt ¡ Ž  Y n0 W d   ƒ n1 sÔ0    Y  |  d| ¡ ¡ d S )N)r†  z&raise RuntimeError(123) # some comment)rh   rt   rˆ  r    r+   r   r   ZassertIsrŽ   r´   r›   r&   Ú	__cause__r	   ÚprocessÚ_RemoteTracebackrÅ   Útbr   Úcaptured_stderrr/   Ú
excepthookÚexc_infoÚgetvalue)rF   r£   r°   ÚexcÚcauseÚf1r   r   r   Útest_tracebackÂ  s"    &
2ÿz&ProcessPoolExecutorTest.test_tracebackÚmd5c                 C   s`   t | jƒ ¡ }t|ƒ}| j t|¡}| ¡  |  |j	j
dd¡ d }t ¡  | ¡  | ¡  d S )Nrë   r5  )r   r]   ÚManagerrK   rh   rt   Úidr   r®   rM   rm   r   rù   rp   rå   )rF   rN   r\  r£   r   r   r   Útest_ressources_gced_in_workersØ  s    z7ProcessPoolExecutorTest.test_ressources_gced_in_workersc                 C   s„   |   d¡}tƒ }| d¡}d|j }zPt|ƒD ]}| |j¡ q.|  t|j	ƒ|j¡ t|ƒD ]}| 
¡  q\W | ¡  n
| ¡  0 d S )Nrê   r   rp  )re   r   râ   rn  rx   rt   rÝ   r›   rÔ   r   rä   rp   )rF   rh   r`   ræ   Z	job_countrR   r   r   r   rq  ë  s    


z'ProcessPoolExecutorTest.test_saturationc                 C   s^   |   d¡}| tdd¡ ¡  | tdd¡ ¡  | tdd¡ ¡  |  t|jƒd¡ | ¡  d S )	Nrê   r  r•   r&  r'  rË   rr  rë   )re   rt   r%   r   r›   rÔ   r   rp   rs  r   r   r   Útest_idle_process_reuse_oneù  s    
z3ProcessPoolExecutorTest.test_idle_process_reuse_onec                 C   sh   |   d¡}| tdd¡ ¡  | tdd¡ | tdd¡ ¡  | tdd¡ |  t|jƒd	¡ | ¡  d S )
Nrê   é   r'  é!   é   é   é   é   r•   )re   rt   r%   r   ZassertLessEqualrÔ   r   rp   rs  r   r   r   Ú test_idle_process_reuse_multiple  s    
z8ProcessPoolExecutorTest.test_idle_process_reuse_multipleN)rH   rI   rJ   rÙ   r{  r/   r‚   r~  r‚  r…  Úclassmethodrˆ  r”  r   Zrequires_hashdigestr˜  rq  r™  r   r   r   r   r   r|  š  s   


r|  c                 C   s*   | rt  | ¡ dd l}| ¡  | ¡  d S ©Nr   )r)   r*   ÚfaulthandlerÚdisableZ_sigsegv)Údelayr£  r   r   r   Ú_crash  s
    
r¦  c                   C   s   t  d¡ d S ©Nrë   )r/   Úexitr   r   r   r   Ú_exit  s    r©  c                 C   s
   | ƒ ‚d S r   r   )ÚErrr   r   r   Ú_raise_error  s    r«  c                 C   s   dd l }| ¡ t_| ƒ ‚d S r¢  )ÚioÚStringIOr/   Ústderr)rª  r¬  r   r   r   Ú_raise_error_ignore_stderr"  s    
r¯  c                 C   s   | ƒ S r   r   r‡  r   r   r   Ú_return_instance)  s    r°  c                   @   s   e Zd Zdd„ ZdS )ÚCrashAtPicklec                 C   s
   t ƒ  d S r   ©r¦  rE   r   r   r   Ú
__reduce__0  s    zCrashAtPickle.__reduce__N©rH   rI   rJ   r³  r   r   r   r   r±  .  s   r±  c                   @   s   e Zd Zdd„ ZdS )ÚCrashAtUnpicklec                 C   s   t dfS ©Nr   r²  rE   r   r   r   r³  6  s    zCrashAtUnpickle.__reduce__Nr´  r   r   r   r   rµ  4  s   rµ  c                   @   s   e Zd Zdd„ ZdS )ÚExitAtPicklec                 C   s
   t ƒ  d S r   ©r©  rE   r   r   r   r³  <  s    zExitAtPickle.__reduce__Nr´  r   r   r   r   r·  :  s   r·  c                   @   s   e Zd Zdd„ ZdS )ÚExitAtUnpicklec                 C   s   t dfS r¶  r¸  rE   r   r   r   r³  B  s    zExitAtUnpickle.__reduce__Nr´  r   r   r   r   r¹  @  s   r¹  c                   @   s   e Zd Zdd„ ZdS )ÚErrorAtPicklec                 C   s   ddl m} |dƒ‚d S )Nr   r   zError in pickle)Úpickler   )rF   r   r   r   r   r³  H  s    zErrorAtPickle.__reduce__Nr´  r   r   r   r   rº  F  s   rº  c                   @   s   e Zd Zdd„ ZdS )ÚErrorAtUnpicklec                 C   s   ddl m} t|ffS )Nr   )ÚUnpicklingError)r»  r½  r¯  )rF   r½  r   r   r   r³  O  s    zErrorAtUnpickle.__reduce__Nr´  r   r   r   r   r¼  M  s   r¼  c                   @   s˜   e Zd ZejZdd„ Zddœdd„Zdd„ Zd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#S )$ÚExecutorDeadlockTestc                 C   s¨   dd l }ddlm} |dd.}|j|d | d¡ | ¡ }W d   ƒ n1 sR0    Y  |j ¡ D ]}| ¡  qf|j	dd t
d|› tjd |  d	|› ¡ d S )
Nr   )ÚTemporaryFilezw+)Úmode)ÚfileTrl   z
Traceback:
 zExecutor deadlock:

)r£  Útempfiler¿  Zdump_tracebackÚseekÚreadr   r  r  rp   r.   r/   Ú
__stderr__r¢   )rF   rh   r£  r¿  r   rŒ  r  r   r   r   Ú_fail_on_deadlockW  s    
&
z&ExecutorDeadlockTest._fail_on_deadlockF©Úignore_stderrc             	   G   sÚ   | j jdd | jdt| jƒd}|j|g|¢R Ž }|rBt ¡ }nt 	¡ }z`|  
|¡B | |j| jd W d   ƒ n1 s€0    Y  W d   ƒ n1 sž0    Y  W n tjyÈ   |  |¡ Y n0 |jdd d S )NTrl   r•   r^   r5  )rh   rp   re   r   r]   rt   r   r  r±   Únullcontextr    r   ÚTIMEOUTr	   r7  rÆ  )rF   ÚerrorÚfuncrÈ  r&   rh   ró   r°   r   r   r   Ú_check_crashj  s    
ÿ
Nz!ExecutorDeadlockTest._check_crashc                 C   s   |   tttƒ ¡ d S r   )rÍ  r   r—  rº  rE   r   r   r   Útest_error_at_task_pickle  s    z.ExecutorDeadlockTest.test_error_at_task_picklec                 C   s   |   tttƒ ¡ d S r   )rÍ  r   r—  r¹  rE   r   r   r   Útest_exit_at_task_unpickle†  s    z/ExecutorDeadlockTest.test_exit_at_task_unpicklec                 C   s   |   tttƒ ¡ d S r   )rÍ  r   r—  r¼  rE   r   r   r   Útest_error_at_task_unpickleŠ  s    z0ExecutorDeadlockTest.test_error_at_task_unpicklec                 C   s   |   tttƒ ¡ d S r   )rÍ  r   r—  rµ  rE   r   r   r   Útest_crash_at_task_unpickleŽ  s    z0ExecutorDeadlockTest.test_crash_at_task_unpicklec                 C   s   |   tt¡ d S r   )rÍ  r   r¦  rE   r   r   r   Ú%test_crash_during_func_exec_on_worker’  s    z:ExecutorDeadlockTest.test_crash_during_func_exec_on_workerc                 C   s   |   tt¡ d S r   )rÍ  Ú
SystemExitr©  rE   r   r   r   Ú$test_exit_during_func_exec_on_worker–  s    z9ExecutorDeadlockTest.test_exit_during_func_exec_on_workerc                 C   s   |   ttt¡ d S r   )rÍ  r´   r«  rE   r   r   r   Ú%test_error_during_func_exec_on_workerš  s    z:ExecutorDeadlockTest.test_error_during_func_exec_on_workerc                 C   s   |   ttt¡ d S r   )rÍ  r   r°  r±  rE   r   r   r   Ú)test_crash_during_result_pickle_on_workerž  s    z>ExecutorDeadlockTest.test_crash_during_result_pickle_on_workerc                 C   s   |   ttt¡ d S r   )rÍ  rÓ  r°  r·  rE   r   r   r   Ú(test_exit_during_result_pickle_on_worker£  s    z=ExecutorDeadlockTest.test_exit_during_result_pickle_on_workerc                 C   s   |   ttt¡ d S r   )rÍ  r   r°  rº  rE   r   r   r   Ú)test_error_during_result_pickle_on_worker¨  s    z>ExecutorDeadlockTest.test_error_during_result_pickle_on_workerc                 C   s   | j tttdd d S )NTrÇ  )rÍ  r   r°  r¼  rE   r   r   r   Ú3test_error_during_result_unpickle_in_result_handler­  s    þzHExecutorDeadlockTest.test_error_during_result_unpickle_in_result_handlerc                 C   s   |   ttt¡ d S r   )rÍ  r   r°  r¹  rE   r   r   r   Ú2test_exit_during_result_unpickle_in_result_handler´  s    zGExecutorDeadlockTest.test_exit_during_result_unpickle_in_result_handlerc              	   C   s˜   | j jdd | jdt| jƒdb}|| _ |jtdd}|jdd |  t¡ | 	¡  W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  d S )NTrl   r•   r^   r:   )r¥  )
rh   rp   re   r   r]   rt   r¦  r    r   r   )rF   rh   r   r   r   r   Útest_shutdown_deadlock¹  s    ÿz+ExecutorDeadlockTest.test_shutdown_deadlockc              	   C   s¶   | j jdd | jdt| jƒdx}|| _ | td¡ ¡  |j}| tt	ƒ ¡}|jdd |  
t¡ | ¡  W d   ƒ n1 s‚0    Y  W d   ƒ n1 s 0    Y  | ¡  d S )NTrl   r•   r^   r    F)rh   rp   re   r   r]   rt   r—  r   r  rº  r    r   rå   )rF   rh   Zexecutor_managerr   r   r   r   Útest_shutdown_deadlock_pickleÅ  s    ÿDz2ExecutorDeadlockTest.test_shutdown_deadlock_pickleN)rH   rI   rJ   r   r_  rÊ  rÆ  rÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  r   r   r   r   r¾  T  s"   r¾  c                   @   s¬   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)S )*ÚFutureTestsc                    s:   d ‰ ‡ fdd„}t ƒ }| |¡ | d¡ |  dˆ ¡ d S )Nc                    s   |   ¡ ‰ d S r   ©r   ©Zcallback_future©Zcallback_resultr   r   rN  é  s    z6FutureTests.test_done_callback_with_result.<locals>.fnr\   )r   Úadd_done_callbackrA  r›   ©rF   rN  r   r   rà  r   Útest_done_callback_with_resultç  s    

z*FutureTests.test_done_callback_with_resultc                    s@   d ‰ ‡ fdd„}t ƒ }| |¡ | tdƒ¡ |  dˆ j¡ d S )Nc                    s   |   ¡ ‰ d S r   ©r   rß  ©Zcallback_exceptionr   r   rN  ô  s    z9FutureTests.test_done_callback_with_exception.<locals>.fnr=  ©r=  )r   rá  Úset_exceptionr+   r›   r&   râ  r   rå  r   Ú!test_done_callback_with_exceptionò  s    
z-FutureTests.test_done_callback_with_exceptionc                    s<   d ‰ ‡ fdd„}t ƒ }| |¡ |  | ¡ ¡ |  ˆ ¡ d S )Nc                    s   |   ¡ ‰ d S r   rÏ   rß  ©Zwas_cancelledr   r   rN  ÿ  s    z6FutureTests.test_done_callback_with_cancel.<locals>.fn)r   rá  r®   Úcancelrâ  r   ré  r   Útest_done_callback_with_cancelý  s    
z*FutureTests.test_done_callback_with_cancelc                    s”   t  ¡ x}d‰d‰ ‡fdd„}‡ fdd„}tƒ }| |¡ | |¡ | d¡ |  ˆ¡ |  ˆ ¡ |  d| ¡ ¡ W d   ƒ n1 s†0    Y  d S )NFc                    s   d‰ t dƒ‚d S )NTúdoh!©r+   rß  )Úraising_was_calledr   r   Ú
raising_fn  s    z9FutureTests.test_done_callback_raises.<locals>.raising_fnc                    s   d‰ d S )NTr   rß  )Úfn_was_calledr   r   rN    s    z1FutureTests.test_done_callback_raises.<locals>.fnr\   zException: doh!)r   r  r   rá  rA  r®   rÅ   r  )rF   r®  rï  rN  r   r   )rð  rî  r   Útest_done_callback_raises  s    





z%FutureTests.test_done_callback_raisesc                    s:   d ‰ ‡ fdd„}t ƒ }| d¡ | |¡ |  dˆ ¡ d S )Nc                    s   |   ¡ ‰ d S r   rÞ  rß  rà  r   r   rN     s    z=FutureTests.test_done_callback_already_successful.<locals>.fnr\   )r   rA  rá  r›   râ  r   rà  r   Ú%test_done_callback_already_successful  s    

z1FutureTests.test_done_callback_already_successfulc                    s@   d ‰ ‡ fdd„}t ƒ }| tdƒ¡ | |¡ |  dˆ j¡ d S )Nc                    s   |   ¡ ‰ d S r   rä  rß  rå  r   r   rN  +  s    z9FutureTests.test_done_callback_already_failed.<locals>.fnr=  ræ  )r   rç  r+   rá  r›   r&   râ  r   rå  r   Ú!test_done_callback_already_failed)  s    
z-FutureTests.test_done_callback_already_failedc                    s<   d ‰ ‡ fdd„}t ƒ }|  | ¡ ¡ | |¡ |  ˆ ¡ d S )Nc                    s   |   ¡ ‰ d S r   rÏ   rß  ré  r   r   rN  6  s    z<FutureTests.test_done_callback_already_cancelled.<locals>.fn)r   r®   rê  rá  râ  r   ré  r   Ú$test_done_callback_already_cancelled4  s    
z0FutureTests.test_done_callback_already_cancelledc                 C   sn   t  ¡ R}dd„ }tƒ }| d¡ | |¡ |  d| ¡ ¡ |  d| ¡ ¡ W d   ƒ n1 s`0    Y  d S )Nc                 S   s   t dƒ‚d S )Nrì  rí  rß  r   r   r   rï  A  s    zKFutureTests.test_done_callback_raises_already_succeeded.<locals>.raising_fnr\   zexception calling callback forrì  )r   r  r   rA  rá  rÅ   r  )rF   r®  rï  r   r   r   r   Ú+test_done_callback_raises_already_succeeded?  s    


z7FutureTests.test_done_callback_raises_already_succeededc                 C   sd   |   ttƒd¡ |   ttƒd¡ |   ttƒd¡ |   ttƒd¡ |   ttƒd¡ |   ttƒd¡ d S )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ú   ÚreprrE  rF  r  r  r#  r  rE   r   r   r   Ú	test_reprO  s(    
ÿ
ÿ
ÿ
ÿþþzFutureTests.test_reprc                 C   sî   t td}t td}t td}t td}t ttƒ d}t tdd}|  | ¡ ¡ |  	|j
t¡ |  | ¡ ¡ |  	|j
t¡ |  | ¡ ¡ |  	|j
t¡ |  | ¡ ¡ |  	|j
t¡ |  | ¡ ¡ |  	|j
t¡ |  | ¡ ¡ |  	|j
t¡ d S )Nr   r   r\   r!   )r   r
   r   r   r   r   ÚOSErrorr®   rê  r›   r   r¾   )rF   r“  Úf2Zf3Zf4Zf5Zf6r   r   r   Útest_cancel`  s$    



zFutureTests.test_cancelc                 C   sX   |   t ¡ ¡ |   t ¡ ¡ |  t ¡ ¡ |  t ¡ ¡ |   t ¡ ¡ |   t ¡ ¡ d S r   )	r¾   rE  rÐ   rF  r®   r  r  r#  r  rE   r   r   r   Útest_cancelledz  s    zFutureTests.test_cancelledc                 C   sX   |   t ¡ ¡ |   t ¡ ¡ |  t ¡ ¡ |  t ¡ ¡ |  t ¡ ¡ |  t ¡ ¡ d S r   )	r¾   rE  rÕ   rF  r®   r  r  r#  r  rE   r   r   r   Ú	test_done‚  s    zFutureTests.test_donec                 C   sX   |   t ¡ ¡ |  t ¡ ¡ |   t ¡ ¡ |   t ¡ ¡ |   t ¡ ¡ |   t ¡ ¡ d S r   )	r¾   rE  Úrunningr®   rF  r  r  r#  r  rE   r   r   r   Útest_runningŠ  s    zFutureTests.test_runningc                 C   sz   | j tjtjdd | j tjtjdd | j tjtjdd | j tjtjdd | j t	t
jdd |  tjddd¡ d S )Nr   r5  r    )r    r	   r7  rE  r   rF  ÚCancelledErrorr  r  rø  r#  r›   r  rE   r   r   r   Útest_result_with_timeout’  s    ÿÿÿÿz$FutureTests.test_result_with_timeoutc                    sJ   ‡ fdd„}t td‰ tj|d}| ¡  |  ˆ jddd¡ | ¡  d S )Nc                      s   t  d¡ ˆ  d¡ d S )Nrë   r    )r)   r*   rA  r   ©r“  r   r   Únotification   s    
z:FutureTests.test_result_with_success.<locals>.notificationr   ©Útargetr\   r5  r    )r   r
   rá   ÚThreadÚstartr›   r   rå   ©rF   r  r,   r   r  r   Útest_result_with_successž  s    
z$FutureTests.test_result_with_successc                    sL   ‡ fdd„}t td‰ tj|d}| ¡  | jtjˆ jt	j
d | ¡  d S )Nc                      s   t  d¡ ˆ  ¡  d S r§  )r)   r*   rê  r   r  r   r   r  ®  s    
z9FutureTests.test_result_with_cancel.<locals>.notificationr   r  r5  )r   r
   rá   r  r  r    r	   rÿ  r   r   r_  rå   r  r   r  r   Útest_result_with_cancel¬  s    
ÿz#FutureTests.test_result_with_cancelc                 C   s€   | j tjtjdd | j tjtjdd | j tjtjdd | j tjtjdd |  	t
tjddtƒ¡ |  tjddd ¡ d S )Nr   r5  )r    r	   r7  rE  r   rF  rÿ  r  r  r®   Ú
isinstancer#  rø  r›   r  rE   r   r   r   Útest_exception_with_timeout»  s     ÿÿÿÿÿz'FutureTests.test_exception_with_timeoutc                    sP   ‡ fdd„}t td‰ tj|d}| ¡  |  tˆ jtj	dt
ƒ¡ | ¡  d S )Nc                      sL   t  d¡ ˆ j( tˆ _tƒ ˆ _ˆ j ¡  W d   ƒ n1 s>0    Y  d S r§  )r)   r*   Ú
_conditionr   r   rø  r   Ú
notify_allr   r  r   r   r  É  s
    
z=FutureTests.test_exception_with_success.<locals>.notificationr   r  r5  )r   r
   rá   r  r  r®   r
  r   r   r_  rø  rå   r  r   r  r   Útest_exception_with_successÈ  s    
z'FutureTests.test_exception_with_successc                 C   sn   t td}| d¡ |  tjd¡ | d¡ W d   ƒ n1 sB0    Y  |  | ¡ ¡ |  | 	¡ d¡ d S )Nr   rë   z=FINISHED: <Future at 0x[0-9a-f]+ state=finished returned int>r•   )
r   r
   rA  rb  r	   ÚInvalidStateErrorr®   rÕ   r›   r   )rF   r   r   r   r   Útest_multiple_set_resultØ  s    

þ(z$FutureTests.test_multiple_set_resultc                 C   sh   t td}tƒ }| |¡ |  tjd¡ | tƒ ¡ W d   ƒ n1 sJ0    Y  |  | 	¡ |¡ d S )Nr   zBFINISHED: <Future at 0x[0-9a-f]+ state=finished raised ValueError>)
r   r
   r@   rç  rb  r	   r  r+   r›   r   )rF   r   rï   r   r   r   Útest_multiple_set_exceptionæ  s    

þ*z'FutureTests.test_multiple_set_exceptionN)rH   rI   rJ   rã  rè  rë  rñ  rò  ró  rô  rõ  r÷  rú  rû  rü  rþ  r   r  r	  r  r  r  r  r   r   r   r   rÝ  æ  s(   rÝ  c                  C   s.   t  tjj¡ t ¡ } t jtjg| ¢R Ž  d S r   )rÙ   ZaddModuleCleanupÚmultiprocessingÚutilÚ_cleanup_testsr   rU   rY   )Úthread_infor   r   r   ÚsetUpModuleõ  s    r  Ú__main__)N)N)]r=  r   Úimport_moduleZ*skip_if_broken_multiprocessing_synchronizeZtest.supportr   Ztest.support.script_helperr   r±   r9  r;   Zlogging.handlersr   rl  r«   r/   rá   r)   rÙ   r?  r»  r   Ú
concurrentr	   Úconcurrent.futures._baser
   r   r   r   r   r   r   Zconcurrent.futures.processr   r  r   Zmultiprocessing.processZmultiprocessing.utilr   rE  rF  r  r  rø  r#  r  r5   r%   r(   r-   r3   r6   r7   rC   ÚobjectrD   rK   rS   ZTestCaserT   r[   r{   r}   r…   r‡   r“   r”   r   r³   rÛ   rÿ   r
  r*  r1  rI  re  r|  r¦  r©  r«  r¯  r°  r±  rµ  r·  r¹  rº  r¼  r¾  rÝ  r  rH   Úmainr   r   r   r   Ú<module>   sÜ   
$





	*

ýÿ
;kaIþÿmþÿRV4pþÿ
	 þÿ  
