Your IP : 216.73.216.52


Current Path : /lib/python3.9/test/libregrtest/__pycache__/
Upload File :
Current File : //lib/python3.9/test/libregrtest/__pycache__/runtest_mp.cpython-39.pyc

a

ؒd�D�@s&ddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlm
Z
mZmZmZmZddlmZddlmZddlmZddlmZmZmZmZmZmZmZddl m!Z!dd	l"m#Z#m$Z$d
Z%e%eks�J�dZ&e&e%ks�J�d
Z'e(ed��oe(ed
�Z)dddd�dd�Z*dd�dd�Z+dddd�dd�Z,dddd�dd �Z-Gd!d"�d"�Z.Gd#d$�d$e
�Z/e�r�e0Z1e2ed%e/fe2ed&e1fBZ3Gd'd(�d(e4�Z5Gd)d*�d*e	j6�Z7d+d+d,�d-d.�Z8Gd/d0�d0�Z9d1d2d3�d4d5�Z:Gd6d7�d7ej;�Z<d8d9d:�d;d<�Z=d=d�d>d?�Z>dS)@�)�annotationsN)�
NamedTuple�NoReturn�Literal�Any�
TYPE_CHECKING)�support)�	Namespace)�Regrtest)�runtest�	is_failed�
TestResult�Interrupted�Timeout�
ChildError�PROGRESS_MIN_TIME)�setup_tests)�format_duration�
print_warningg>@g�r@�setsid�killpgr
r	�bool)�result�ns�returncCs&t|t�rdS|jr"t||�r"dSdS)NTF)�
isinstancerZfailfastr)rr�r�1/usr/lib/python3.9/test/libregrtest/runtest_mp.py�	must_stop)s

rztuple[Namespace, str]�rcCs$t�|�\}}tfi|��}||fS�N)�json�loadsr	)�worker_args�ns_dict�	test_namerrrr�parse_worker_args1sr&�strzsubprocess.Popen)�testnamerrcCsxt|�}||f}t�|�}tjgt���d�d�d�d�|�}i}trNd|d<tj	|ftj
tj
dtjdktj
d�|��S)	Nz-uz-mz
test.regrtestz
--worker-argsTZstart_new_session�nt)�stdout�stderrZuniversal_newlinesZ	close_fds�cwd)�varsr!�dumps�sys�
executablerZargs_from_interpreter_flags�USE_PROCESS_GROUP�
subprocess�Popen�PIPE�os�nameZSAVEDCWD)r(rr$r#�cmd�kwrrr�run_test_in_subprocess7s4
�������r9r)rr%rcCs<t|�t||�}t�ttj|td�dd�t�d�dS)N)�clsT��flushr)rr�printr!r.�EncodeTestResultr/�exit)rr%rrrr�run_tests_workerPs

r@c@s0eZdZdZdd�Zdd�Zdd�Zdd	�Zd
S)�MultiprocessIteratorz8A thread-safe iterator over tests for multiprocess mode.cCst��|_||_dSr )�	threadingZLock�lock�
tests_iter)�selfrDrrr�__init__as
zMultiprocessIterator.__init__cCs|Sr r�rErrr�__iter__eszMultiprocessIterator.__iter__cCsB|j�(|jdurt�t|j�Wd�S1s40YdSr )rCrD�
StopIteration�nextrGrrr�__next__hs
zMultiprocessIterator.__next__cCs0|j�d|_Wd�n1s"0YdSr )rCrDrGrrr�stopnszMultiprocessIterator.stopN)�__name__�
__module__�__qualname__�__doc__rFrHrKrLrrrrrA]s
rAc@s.eZdZUded<ded<ded<ded<dS)�MultiprocessResultr
rr'r*r+�	error_msgN)rMrNrO�__annotations__rrrrrQss
rQFTc@seZdZdS)�
ExitThreadN)rMrNrOrrrrrTsrTcs�eZdZdddd��fdd�Zdd�d	d
�Zdd�dd�Zdd�d
d�Zd$ddddd�dd�Zddd�dd�Zddd�dd�Z	dd�dd�Z
dd�dd�Zd dd!�d"d#�Z�Z
S)%�TestWorkerProcess�intz'MultiprocessTestRunner'�None)�	worker_id�runnerrcsZt���||_|j|_|j|_|j|_|j|_|j|_d|_	d|_
d|_d|_d|_
dS)NF)�superrFrX�pending�outputr�worker_timeout�timeout�regrtest�current_test_name�
start_time�_popen�_killed�_stopped)rErXrY��	__class__rrrF�s
zTestWorkerProcess.__init__r'rcCs�d|j��g}|��r"|�d�n
|�d�|j}|rF|�d|���|j}|dur�t��|j}|�d|jj	��dt
|���f�dd�|�S)	NzTestWorkerProcess #�runningZstoppedztest=zpid=ztime=z<%s>� )rX�is_alive�appendr`rb�time�	monotonicra�extend�pidr�join)rE�info�test�popen�dtrrr�__repr__�s
�zTestWorkerProcess.__repr__c
Cs�|j}|durdS|jrdSd|_tr2|�d�}n|�}td|��tjdd�z"trft�|jt	j
�n|��WnHty�Yn8t
y�}z td|�d|���WYd}~n
d}~00dS)NTz process groupzKill ��filer<zFailed to kill z: )rbrcr1r=r/r+r5rrn�signal�SIGKILL�kill�ProcessLookupError�OSErrorr)rErrZwhat�excrrr�_kill�s$zTestWorkerProcess._killcCsd|_|��dS)NT)rdr}rGrrrrL�szTestWorkerProcess.stop�Nr
rQ)�test_resultr*r+rcCst��|j|_t||||�Sr )rkrlra�duration_secrQ)rErr*r+�err_msgrrr�mp_result_error�sz!TestWorkerProcess.mp_result_errorztuple[int, str, str])r%rcCsJt��|_||_zt||j�}d|_||_Wnd|_�Yn0z�z�|jrX|�	�t
�z(|j|jd�\}}|j
}|dus~J�WnNtjy�|jr�t
�|�	�d}d}}Yn.ty�|jr�t
��Yn0|��}|��}|||fWW|��d|_d|_S|�	��Yn0W|��d|_d|_n|��d|_d|_0dS)NF�r^r~)rkrlrar`r9rrcrbrdr}rTZcommunicater^�
returncoder2�TimeoutExpiredr{�strip�rstrip�_wait_completed)rEr%rrr*r+�retcoderrr�_run_process�sV

�
�zTestWorkerProcess._run_processc	
Cs�|�|�\}}}|dur*|�t|�||�Sd}|dkr@d|}nb|�d�\}}}|��}|sbd}n@ztj|td�}Wn,ty�}zd|}WYd}~n
d}~00|dur�|�t	|�|||�St
||||�S)NrzExit code %s�
zFailed to parse worker stdout)Zobject_hookzFailed to parse worker JSON: %s)r�r�r�
rpartitionr�r!r"�decode_test_result�	ExceptionrrQ)	rEr%r�r*r+r��_rr|rrr�_runtests&

�zTestWorkerProcess._runtestcCs�|js�zXzt|j�}Wnty.YWq�Yn0|�|�}|j�d|f�t|j|j	�r\Wq�Wqt
ytYq�Yqty�|j�dt�
�f�Yq�Yq0qdS)NFT)rdrJr[rIr�r\ZputrrrrT�
BaseException�	traceback�
format_exc)rEr%�	mp_resultrrr�run#s
zTestWorkerProcess.runc
Csv|j}|j��|j��z|�t�WnHtjtfyp}z*t	d|�dt
t��d|���WYd}~n
d}~00dS)NzFailed to wait for z completion (timeout=z): )rbr*�closer+�wait�JOIN_TIMEOUTr2r�r{rr)rErrr|rrrr�6s


��z!TestWorkerProcess._wait_completed�float)rarcCsd|�d�|��sq`t��|}|j�d|�dt|����|tkrtd|�dt|����q`qdS)Ng�?zWaiting for z thread for zFailed to join z in )	rorirkrlr_�logrr�r)rErarsrrr�wait_stoppedEs
�zTestWorkerProcess.wait_stopped)r~r~N)rMrNrOrFrtr}rLr�r�r�r�r�r��
__classcell__rrrerrU�s�
;rUzlist[TestWorkerProcess])�workersrcCsNg}|D]@}|j}|sqt��|j}|tkrd|t|�f}|�|�q|S)Nz%s (%s))r`rkrlrarrrj)r�rg�workerr`rs�textrrr�get_running]sr�c@steZdZddd�dd�Zdd�dd�Zdd�d	d
�Zdd�dd
�Zddd�dd�Zddd�dd�Zdd�dd�Z	dS)�MultiprocessTestRunnerr
rW�r_rcCsj||_|jj|_|j|_t��|_t|jj�|_|jj	durZt
|jj	d|jj	d�|_nd|_d|_dS)Ng�?i,)
r_r�r�queueZQueuer\rAZtestsr[r^�minr]r�)rEr_rrrrFks


�zMultiprocessTestRunner.__init__rcs|�fdd�td�jjd�D��_dt�j��d�}�jjrZ|dt�jj�t�j�f7}��|��jD]}|�	�qjdS)Ncsg|]}t|���qSr)rU)�.0�indexrGrr�
<listcomp>|s�z8MultiprocessTestRunner.start_workers.<locals>.<listcomp>�zRun tests in parallel using z child processesz" (timeout: %s, worker timeout: %s))
�rangerZuse_mpr��lenr^rr]r��start)rE�msgr�rrGr�
start_workers{s
�
��

z$MultiprocessTestRunner.start_workerscCs6t��}|jD]}|��q|jD]}|�|�q"dSr )rkrlr�rLr�)rErar�rrr�stop_workers�s



z#MultiprocessTestRunner.stop_workerszQueueOutput | NonecCs�|jjdu}t}tdd�|jD��r�|r6tjtdd�z|jj	|d�WSt
jyZYn0t|j�}|r|jj
s|�dd�|��qz|jj	dd�WSt
jy�YdS0dS)	Ncss|]}|��VqdSr )ri)r�r�rrr�	<genexpr>��z5MultiprocessTestRunner._get_result.<locals>.<genexpr>T)r?r�zrunning: %s�, r)rr^�PROGRESS_UPDATE�anyr��faulthandlerZdump_traceback_later�MAIN_PROCESS_TIMEOUTr\�getr�ZEmptyr��pgor�ro)rEZuse_faulthandlerr^rgrrr�_get_result�s$�
z"MultiprocessTestRunner._get_resultrQ)r�rcCs�|j}t|�}|jdur(|d|j7}n$|jtkrL|jjsL|dt|j�7}t|j	�}|rt|jjst|dd�
|�7}|j�|j
|�dS)Nz (%s)z -- running: %sr�)rr'rRr�rrr�rr�r�ror_Zdisplay_progress�
test_index)rEr�rr�rgrrr�display_result�s

z%MultiprocessTestRunner.display_result�QueueOutputr)�itemrcCs�|dr"|d}td|���dS|jd7_|d}|j�|j�|�|�|jrdt|jdd�|jr�|j	j
s�t|jtjdd�t|j|j	�r�dSdS)z&Returns True if test runner must stop.rr�zregrtest worker thread failed: Tr;ruF)
rr�r_Zaccumulate_resultrr�r*r=r+rr�r/r)rEr�r�r�rrr�_process_result�s
z&MultiprocessTestRunner._process_resultcCs�|��d|_ztz(|��}|dur$q6|�|�}|rq6qWn tyXt�d|j_Yn0W|jj	durpt
��|j�
�|��n(|jj	dur�t
��|j�
�|��0dS)NrT)r�r�r�r��KeyboardInterruptr=r_Zinterruptedrr^r�Zcancel_dump_traceback_laterr[rLr�)rEr�rLrrr�	run_tests�s(


�
z MultiprocessTestRunner.run_testsN)
rMrNrOrFr�r�r�r�r�r�rrrrr�jsr�r
rWr�cCst|���dSr )r�r�)r_rrr�run_tests_multiprocess�sr�cs(eZdZdZddd��fdd�Z�ZS)r>z7Encode a TestResult (sub)class object into a JSON dict.r�dict[str, Any])�orcs.t|t�r"t|�}|jj|d<|St��|�S)N�__test_result__)rr
r-rfrMrZ�default)rEr�rrerrr��s

zEncodeTestResult.default)rMrNrOrPr�r�rrrerr>�sr>r�zTestResult | dict[str, Any])�drcCsBd|vr|S|�d�}t�D] }|j|kr|fi|��SqdS)z7Decode a TestResult (sub)class object from a JSON dict.r�N)�pop�get_all_test_result_classesrM)r��cls_namer:rrrr��s


r�zset[type[TestResult]]cCsJd}th}t|�|krFt|�}g}|D]}|�|���q&|�|�q
|S)Nr)r
r�rm�__subclasses__�update)Z
prev_count�classesZto_addr:rrrr�sr�)?Z
__future__rr�r!r5r�rwr2r/rBrkr��typingrrrrrrqrZtest.libregrtest.cmdliner	Ztest.libregrtest.mainr
Ztest.libregrtest.runtestrrr
rrrrZtest.libregrtest.setuprZtest.libregrtest.utilsrrr�r�r��hasattrr1rr&r9r@rArQr'ZExcStr�tupler�r�rTZThreadrUr�r�r�ZJSONEncoderr>r�r�rrrr�<module>sR$
 [