a ze@sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZejdZeddlZddl Z!ddl"Z!ddl#Z!ddl$Z!ddl%Z!ddl&Z!ddl!m'Z'zddl!m(Z(e(j)Z*Wne+ybdZ*Yn0zdd l,m-Z-m.Z.d Z/Wne+ydZ/Yn0zdd l!m0Z0d Z1Wne+ydZ1Yn0z ddl2Z2Wne+ydZ2Yn0d d Z3ddZ4ddZ5ej6dkr"ddl!m7Z7ddZ8e'j9Z:dZ;dZZ?n d\Z=Z>Z?e@edd ZAejBdkZCddl mDZDddZEzeFdZGWndZGYn0d d!gZHzdd"lImJZJmKZKmLZLmMZMWn$e+yeNZJdZKZLZMYn0d#d$ZOGd%d&d&eNZPGd'd(d(eNZQd)d*ZRGd+d,d,ZSGd-d.d.eQZTGd/d0d0e!jUZVGd1d2d2eQZWd3d4ZXd5d6ZYGd7d8d8eQZZGd9d:d:eQZ[Gd;d<dd>eQZ]Gd?d@d@eQZ^GdAdBdBeNZ_dCdDZ`GdEdFdFeNZaGdGdHdHeNZbGdIdJdJeQZcGdKdLdLeQZdGdMdNdNeQZeGdOdPdPeQZfddRdSZgdTdUZhdVdWZidXdYZjGdZd[d[eNZkGd\d]d]elZmd^d_ZnGd`dadaeQZodbdcZpdddeZqGdfdgdgeQZrGdhdidieQZsddjl$mtZtmuZumvZvGdkdldleNZwdmdnZxGdodpdpeuZyGdqdrdretZzezj{dsewdtezj{duewdvdwezj{dnexeydxGdydzdzeQZ|e}Z~d{d|ZGd}d~d~etZej{d|edtGdddetZe{d|dZGdddeQZedGdddeQZe3dZGdddeQZGdddeQZGdddeQZGdddeQZee*dedGdddeQZGdddeQZGdddeJZGdddeQZee1dedGdddeQZGdddeQZGdddejZGdddeQZGdddeQZGdddejZedGdddejZddZedGdddejZddZddZddZddZGdddeNZGdddejZGdddejZGdddejZGdddejZGdddejZGdddejZGddÄdejZGddńdejZGddDŽdejZGddɄdejZeejBdkdʡGdd̄dejZGdd΄dejZGddЄdejZedGdd҄dejZGddԄdejZGddքdeNZGdd؄deZGddڄdeZGdd܄deZddބZdS)N)support)hashlib_helper) socket_helper_multiprocessing)util) reductionF)ValuecopyT) shared_memorycCs |dS)Nlatin)encode)srN/opt/bitninja-python-dojo/embedded/lib/python3.9/test/_test_multiprocessing.pyr Hsr cCs"t|tjjr||dSN) isinstancemultiprocessingqueuesQueueclose join_threadqueuerrr close_queueLsrcCst|dSr)rr)processrrr join_processRsrposix)resource_trackercCstj||dSr)r_CLEANUP_FUNCS)namertyperrr_resource_unlink[sr!皙?)g= ףp=?gffffff?gffffff?)r"r"r"ZHAVE_BROKEN_SEM_GETVALUEwin32waitcCs |dur|dkrd}t|g|S)Nr$)handletimeoutrrrwait_for_handlewsr) SC_OPEN_MAX__main__z$test.test_multiprocessing_forkserver) Structurec_intc_double c_longlongc CsRd}ztd}Wnttfy*YdS0|dks<||kr@dStd|dS)zACheck that the system supports enough semaphores to run the test.r+SC_SEM_NSEMS_MAXNzHThe OS doesn't support enough semaphores to run the test (required: %d).)ossysconfAttributeError ValueErrorunittestSkipTest)Z nsems_minZnsemsrrrcheck_enough_semaphoressr9c@seZdZddZddZdS) TimingWrappercCs||_d|_dSr)funcelapsed)selfr;rrr__init__szTimingWrapper.__init__cOs>t}z |j|i|Wt||_St||_0dSr)time monotonicr;r<)r=argskwdstrrr__call__s zTimingWrapper.__call__N__name__ __module__ __qualname__r>rDrrrrr:sr:c@s,eZdZdZddZddZddZeZdS) BaseTestCase) processesmanagerthreadscCstr|||ddSN) CHECK_TIMINGSassertAlmostEqualr=abrrrassertTimingAlmostEqualsz$BaseTestCase.assertTimingAlmostEqualcGs0z ||}WntyYn0|||SdSr)NotImplementedError assertEqual)r=valuer;rAresrrrassertReturnsIfImplementeds   z'BaseTestCase.assertReturnsIfImplementedcGs tddS)Nz#shouldn't try to pickle a test case)rU)r=rArrr __reduce__szBaseTestCase.__reduce__N)rFrGrH ALLOWED_TYPESrTrYrZ __reduce_ex__rrrrrIs  rIcCsjz |WStydz |jWYSty^z|jWYYStyXtYn0Yn0Yn0dSr) get_valuer5Z_Semaphore__value_valuerUr=rrrr]s     r]c@seZdZddZdS) DummyCallablecCst|tsJ|ddSN)rr`put)r=qcrrrrDszDummyCallable.__call__N)rFrGrHrDrrrrr`sr`c@seZdZdZddZddZeddZdd Zed d Z d d Z eddZ eddZ ddZ eejdddZeddZeddZeddZddZdd Zd!d"Zd#d$Zd%d&Zed'd(Zd)d*Zed+d,Zd-d.ZedPd1d2Zd3d4Z d5d6Z!d7d8Z"ed9d:Z#d;d<Z$ed=d>Z%d?d@Z&eifdAdBZ'dCdDZ(dEdFZ)edQdHdIZ*dJdKZ+dLdMZ,dNdOZ-d0S)R _TestProcessrJrLcCs|jdkr|d|j|}|j}||||j ||t |t |dk| |j t | |jddS)NrLtest not appropriate for {}r)TYPEskipTestformatcurrent_processauthkey assertTrueis_alivedaemonassertIsInstancebyteslenrVidentr3getpidexitcode)r=currentrmrrr test_currents  z_TestProcess.test_currentcCsz|jdkr|d|j|j|jd}||j|j|j|jdd}||j|j|jdd}| |jdS)NrLrhtargetTrzrpF) rirjrkProcess_testrVrprlrn assertFalse)r=Zproc0Zproc1proc2rrrtest_daemon_arguments  z!_TestProcess.test_daemon_argumentcOsR|}||||||j|jdkrN|t|j||jdS)NrL)rlrcrrirrrmpid)clsrdrArBrwrrrr}s    z_TestProcess._testcCs|jdkr|d|j|||jdd\}}|j|j|fd}|| | \}}| || j | |t| || jdS)NrLrhFduplexrzrA)rirjrk assertIsNoneparent_processPiper|_test_send_parent_processstartjoinrecvrVrlrr3rur)r=rconnwconnpZ parent_pid parent_namerrrtest_parent_process_attributes s  z+_TestProcess.test_parent_process_attributescCs&ddlm}||j|jgdS)Nrr)multiprocessing.processrsendrrrrrrrrrs z&_TestProcess._test_send_parent_processcCs|jdkr|d|j|jdd\}}|j|j|fd}||jtj ds\t d| }| |d| ||jtj dst d| }| |d dS) NrLrhFrrr(z(Could not communicate with child processalive not alive)rirjrkrr|_test_create_grandchild_processrpollr LONG_TIMEOUTAssertionErrorrrV terminater)r=rrrZparent_process_statusrrrtest_parent_process s"  z _TestProcess.test_parent_processcCs(|j|j|fd}|tddS)Nri,)r|_test_report_parent_statusrr?sleep)rrrrrrr9sz,_TestProcess._test_create_grandchild_processcCsPddlm}||rdnd|jtjd||rFdnddS)Nrrrrr)rrrrorr SHORT_TIMEOUTrrrrr?s z'_TestProcess._test_report_parent_statuscCs|d}|}|ddf}ddd}d}|j|j|||d}d|_|}|jd krf||j|j|| d ||jd| || | t | tu||jd|||jd|| d||| |||dd||||||j|jd krX|||j|||j|||jd || d | || t|dS) NrNgRQ@)helloZbyeZ SomeProcess)rzrAkwargsrTrLFr)rEventr|r}rprlrirVrmro assertNotInactive_childrenrntypelistrvrassertIngetrrrr)r=rderArrrrwrrr test_processFs@      z_TestProcess.test_processzneeds native_idcCsr|jdkr|d|jtj}|d}|j|j|fd}| | }| t || ||dS)NrLrhrNr)rirjrk threading main_thread native_idrr|"_test_process_mainthread_native_idrrrrassertNotEqual)r=Zcurrent_mainthread_native_idrdrZchild_mainthread_native_idrrr!test_process_mainthread_native_idns   z._TestProcess.test_process_mainthread_native_idcCstj}||dSr)rrrrc)rrdZmainthread_native_idrrrrs z/_TestProcess._test_process_mainthread_native_idcCstddS)Ndr?rrrrr _sleep_somesz_TestProcess._sleep_somecCst|dSrr)rdelayrrr _test_sleepsz_TestProcess._test_sleepc s|jdkr|d|j|j|jdd_|d| | |j dt j }||dd||jd|d||dd||jd|dtd|ttd rVfd d }ttj|}z4td ||dWtdttj|ntdttj|0n||d||jd|d ||  j S)NrLrhryTrr&r2rNalarmcstddS)Nzjoin took too long: %s RuntimeErrorrArrrhandlersz+_TestProcess._kill_process..handler F)rirjrkr|rrprrVrorrrvr:rrTr<r?rhasattrsignalSIGALRMrr)r=methrrZ old_handlerrrr _kill_processsB        z_TestProcess._kill_processcCs,|tjj}tjdkr(||tj dSNnt) rrr|rr3rrVrSIGTERMr=rvrrrtest_terminates z_TestProcess.test_terminatecCs,|tjj}tjdkr(||tj dSr) rrr|killr3rrVrSIGKILLrrrr test_kills z_TestProcess.test_killcCsHz t}Wnty"d}Yn0|t|tu||dkdSrM)r cpu_countrUrnrint)r=Zcpusrrrtest_cpu_counts    z_TestProcess.test_cpu_countcCsp|t|t|jtjtfd}|||d|_ | | ||| |||dSNrT) rVrrrr|r?rDELTArrprrrr=rrrrtest_active_childrensz!_TestProcess.test_active_childrencCsR||t|dkrNtdD].}|j|j|||gfd}||qdS)Nrr)rrsranger|_test_recursionrr)rridirrrrrs   z_TestProcess._test_recursioncCsx|jdd\}}||gttg}|rB||q*gdgddgddgdgddgddgg}|||dS)NFrrrN) rrr?rrrappendrrV)r=rrresultexpectedrrrtest_recursions   z_TestProcess.test_recursioncCs|ddS)N$@r$reventrrr_test_sentinelsz_TestProcess._test_sentinelcCs|jdkr|d|j|}|j|j|fd}|t|jWdn1s\0Y| | |j |j}| |t |t|dd|| |t|dddS)NrLrhrr&rrN)rirjrkrr|r assertRaisesr6sentinelr addCleanuprrqrr~r)setrn)r=rrrrrr test_sentinels  $  z_TestProcess.test_sentinelrNcCs|dur|t|dSr)rsysexit)rrcrdrrr _test_closesz_TestProcess._test_closecCs|jdkr|d|j|}|j|jd|id}d|_||| d| t | Wdn1s~0Y| d||| d||jd| | t | Wdn1s0Y| t |Wdn1s0Y| t |Wdn1sP0Y| t|}~t||dt|dS)NrLrhrd)rzrTFr)rirjrkrr|rrprrVrorr6rrcrrvrweakrefrefgccollectassertIsr)r=rdrwrrrr test_closes4  &  & ( ( z_TestProcess.test_closecs*jdkrdjt}|dkr0dnd}fddt|D}|D] }|qN|D] }t|q`|D]}|j dqrfd dt|D}|D] }|qt d |D] }| q|D] }t|qt jd kr&tj g}tjd kr |tj |D]}|j |qdS) NrLrhspawnrbrcsg|]}jjddqS)){Gz?r)r|r.0rr_rr ?sz4_TestProcess.test_many_processes..rcsg|]}jjdqS)ry)r|rrr_rrrHsMbP?rdarwin)rirjrkrget_start_methodrrrrVrvr?rrr3rrrrplatformrrr)r=smNprocsrZ exitcodesrr_rtest_many_processes7s:            z _TestProcess.test_many_processescCsnt}t|}|}|j|||fd}~||t| |d| | dt |dS)Nrrb) r`rrrr|rrrrrrVrr)r=rerrdrrrrtest_lose_target_refZs z!_TestProcess.test_lose_target_refcCs|tj|dSr)rctestrZfd_countr%)r=evtrdrrr_test_child_fd_inflationgsz%_TestProcess._test_child_fd_inflationc sjdkrdjt}|dkr<d|d}fddt|D}|D] }|qnzRfddt|D} t t |d|W |D] }| qt n$ |D] }| qt 0dS) NrLrhforkrbcs g|]}jjfdqSr)r|rrrrdr=rrr|sz8_TestProcess.test_child_fd_inflation..csg|] }qSrrrrdrrrrN)rirjrkrrrrrrrVrsrrr)r=rrrrZ fd_countsrrrtest_child_fd_inflationls0     z$_TestProcess.test_child_fd_inflationcs>fdd}fdd}tj|dtj|dddS)NcstddS)N?r?rrrrrrfunc1s z2_TestProcess._test_wait_for_threads..func1cstddS)N)r?rclearrr rrfunc2s z2_TestProcess._test_wait_for_threads..func2ryTr{)rThreadr)r=rr rrr r_test_wait_for_threadss  z#_TestProcess._test_wait_for_threadscCsX|jdkr|d|j|}|j|j|fd}|||| dS)NrLrhr) rirjrkrr|rrrrnis_set)r=rprocrrrtest_wait_for_threadss z"_TestProcess.test_wait_for_threadscCsT|D]>\}}|dkr*t}|n|dks6Jd}tt|dq|dS)Nrremove)itemsioStringIOrsetattrrr)r=rZbreak_std_streams stream_nameactionstreamrrr_test_error_on_stdio_flushs  z'_TestProcess._test_error_on_stdio_flushc Cstdg}|ddD]}|D]}tt|}tt||zV|}|j|j|fd}| | | | | |jdWtt||q$tt||0q$qdS)Nrstdoutstderrr)rrrgetattrrrrr|rrrrnrrVrv)r=Zstreamsrr old_streamrrrrrtest_error_on_stdio_flush_1s     z(_TestProcess.test_error_on_stdio_flush_1c CsdD]}dD]z}tt|}z\|}|j|j|||ifd}||||| |j dWt t||q t t||0q qdS)Nr)rrrr) r"rrr|rrrrnrrVrvr)r=rrr#rrrrrtest_error_on_stdio_flush_2s  z(_TestProcess.test_error_on_stdio_flush_2r&cCst||dSrr )r=rrrrr_sleep_and_set_events z!_TestProcess._sleep_and_set_eventc Cs|jdkr|d|jt}|dkr<|d|ddlm}|d}|}|j |j ||fd}| |j }t ||t|d|}|j |j |fd} | | |||| jd|||||jd dS) NrLrh forkserverr) _forkserverr r@)r)rirjrkrrZmultiprocessing.forkserverr(ensure_runningrr|r&rZ_forkserver_pidr3rr?rrrnrrVrvr) r=signumrr(rrrrZevt2rrrrcheck_forkserver_deaths.   z#_TestProcess.check_forkserver_deathcCs|tjdSr)r-rSIGINTr_rrrtest_forkserver_sigintsz#_TestProcess.test_forkserver_sigintcCstjdkr|tjdSr)r3rr-rrr_rrrtest_forkserver_sigkills z$_TestProcess.test_forkserver_sigkill)rN)r&).rFrGrHr[rxr classmethodr}rrrrrrr7 skipUnlessr_HAVE_THREAD_NATIVE_IDrrrrrrrrrrrrrrrrrrr rrrr$r%r&r-r/r0rrrrrfsj     (     3     #      &rfc@s,eZdZddZddZddZddZd S) _UpperCasercCs tj|t\|_|_dSr)rr|r>r child_conn parent_connr_rrrr>s z_UpperCaser.__init__cCs<|jt|jjdD]}|j|q|jdSr)r6riterr5rrupperr=r rrrruns z_UpperCaser.runcCs&t|tusJ|j||jSr)rstrr6rrr9rrrsubmits z_UpperCaser.submitcCs$|jd|j|jdSr)r6rrr5r_rrrstops  z_UpperCaser.stopN)rFrGrHr>r:r<r=rrrrr4 sr4c@s@eZdZdZddZddZeddZedd Zd d Z d S) _TestSubclassingProcessrJcCsLt}d|_|||dd||dd||dS)NTrZHELLOZworldZWORLD)r4rprrVr<r=r)r=Z uppercaserrrrtest_subclassing'sz(_TestSubclassingProcess.test_subclassingcCs|jdkr|d|jtjj}|tjj||j|j |fd}| | t |d<}| }|d||d||d|Wdn1s0YdS)NrLrhrrZeroDivisionErrorztest_multiprocessing.pyz 1/0 # MARKER)rirjrkrrTESTFNrunlinkr|_test_stderr_flushrropenreadr)r=testfnrferrrrrtest_stderr_flush0s    z)_TestSubclassingProcess.test_stderr_flushcCs6t|tjtjBtjB}t|dddt_dddS)NwFclosefdrNr)r3rFO_WRONLYO_CREATO_EXCLrr!)rrHfdrrrrEAsz*_TestSubclassingProcess._test_stderr_flushcCs8t|tjtjBtjB}t|dddt_t|dS)NrLFrM)r3rFrOrPrQrr!r)rreasonrHrRrrr_test_sys_exitHsz&_TestSubclassingProcess._test_sys_exitc CsJ|jdkr|d|jtjj}|tjj|gddfD]}|j|j ||fd}d|_ | t || |jdt|d}|}Wdn1s0Y| |t|t|q@gd }|D]j\}}|j|d D|jtj|d}d|_ | t || |j|Wdq1s:0YqdS) NrLrh)rNrz ignore thisrTrNrA)))TrN))Fr))rV)rr)rrr)rirjrkrrrCrrDr|rTrprrrVrvrFrGrstripr;r3subTestrr) r=rHrSrrIZcontentZcasesrArrrr test_sys_exitNs0  &  z%_TestSubclassingProcess.test_sys_exitN) rFrGrHr[r@rKr1rErTrYrrrrr>#s   r>cCs"t|dr|S|dkSdS)Nemptyr)rrZqsizerrrr queue_emptyzs r\cCs"t|dr|S||kSdS)Nfull)rr]r[)rdmaxsizerrr queue_fulls r_c@seZdZeddZddZeddZddZed d Zd d Z d dZ eddZ ddZ ddZ ddZddZddZddZdS) _TestQueuecCs*|tdD] }|q|dS)N)r%rrr)rrchild_can_startparent_can_continuerrrr _test_puts  z_TestQueue._test_putcCsd}|j|d}|}|}|j|j|||fd}d|_||t|d|t||d| d| dd| ddd| d d| d dd| dt t |t|d|t||dt|j }t|j }|tj|d d||jd |tj|d dd||jd |tj|d ||jd |tj|d dt||jt|tj|d dt||jd |jtj|d dtd ||jt|||t|d|t||d|t|dS)Nrar^rTFrNrrUrbrr)rrr|rdrprrVr\r_rc put_nowaitr?rrr:rpyqueueFullrTr<TIMEOUT1TIMEOUT2TIMEOUT3rr%rr)r=ZMAXSIZErrbrcrrcrhrrrtest_putsR        z_TestQueue.test_putcCs<||d|d|d|d|dS)NrrUrfrb)r%rcrrrrbrcrrr _test_gets     z_TestQueue._test_getcCs|}|}|}|j|j|||fd}d|_||t|d|| t t |t|d|| ddd|| dd||j ddd||d |t|dt|j }t|j}|tj|d||jd |tj|dd||jd |tj|||jd |tj|dt||jt|tj|dt||jd |jtj|td||jt|t|dS) NrTFrrUrNrrfrbr)rrr|rprprrVr\rr%r?rrr get_nowaitr:rriEmptyrTr<rkrlrmrr)r=rrbrcrrrqrrrtest_getsF   z_TestQueue.test_getcCstddD]}||q dS)Nrr)rrc)rrrrrr _test_fork sz_TestQueue._test_forkcCs|}tdD]}||qtt|j|j|fd}d|_| tdD]}| | |qR| t j|j d|t|dS)NrrTrF)rrrcr?rrr|rtrprrVrrrirrrr)r=rrrrrr test_forks    z_TestQueue.test_forkcCs|}z||dWnty8|dYn0|d||d|d||d|||d|||dt|dS)Nrzqsize method not implementedrNrbr)rrVr[rUrjrcrrr=rdrrr test_qsize/s   z_TestQueue.test_qsizecCs(t|jdD]}tt|q dSr)r7rr?rr task_done)rrdobjrrr_test_task_done?s z_TestQueue._test_task_donecsfddtdD}|D]}d|_|q$tdD]}|q@|D]}dq\|D] }|qptdS)Ncsg|]}jjfdqSr)r|rzrrr=rrrHsz-_TestQueue.test_task_done..rfTr) JoinableQueuerrprrcrr)r=workersrrrr{rtest_task_doneEs      z_TestQueue.test_task_donec Cstjd}t|dd}|dWdn1s>0Ytjt<z t|Wnt j y| dYn0Wdn1s0YWdn1s0YdS)NZimported_by_an_imported_modulez.pyrLzif 1: import multiprocessing q = multiprocessing.Queue() q.put('knock knock') q.get(timeout=3) q.close() del q z?Probable regression on import lock contention; see Issue #22853) rrZtemp_cwdrFwriteZ DirsOnSysPathr3getcwd __import__rirrfail)r= module_namerIrrrtest_no_import_lock_contention[s (  z)_TestQueue.test_no_import_lock_contentioncCsHt}t}|tj|jddt|}||dt |dS)NTg?r") rrr?r@rrirrrassertGreaterEqualr)r=rdrdeltarrr test_timeoutps   z_TestQueue.test_timeoutc Cs4|jdkr|d|jGdddt}tjJ|}|||d| |j tj dt |Wdn1s0Ytj|jdd}|||dz| |dWntyYn0| |j tj d| |t |Wdn1s&0YdS) NrJrhc@seZdZddZdS)zF_TestQueue.test_queue_feeder_donot_stop_onexc..NotSerializablecSstdSr)r5r_rrrrZszQ_TestQueue.test_queue_feeder_donot_stop_onexc..NotSerializable.__reduce__NrFrGrHrZrrrrNotSerializablesrTrrNre)rirjrkobjectrrcaptured_stderrrrcrnrrrrVr[rUrZ)r=rrdrrr"test_queue_feeder_donot_stop_onexc{s(    &     z-_TestQueue.test_queue_feeder_donot_stop_onexccs|jdkr|d|jGdddtGfdddtjj}}tj F|t d}| || d| |j tjd Wdn1s0Y| |j| |jdS) NrJrhc@s eZdZdZddZddZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializablezMock unserializable objectcSsd|_d|_dSNF)reduce_was_called on_queue_feeder_error_was_calledr_rrrr>szT_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializable.__init__cSsd|_tdSNT)rr5r_rrrrZszV_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializable.__reduce__N)rFrGrH__doc__r>rZrrrrrsrcs eZdZdZefddZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error..SafeQueuez1Queue with overloaded _on_queue_feeder_error hookcst|trt|rd|_dSr)rr5r)rryrrr_on_queue_feeder_errors z\_TestQueue.test_queue_feeder_on_queue_feeder_error..SafeQueue._on_queue_feeder_errorN)rFrGrHr staticmethodrrrrr SafeQueuesr)ctxTr)rirjrkrrrrrrr get_contextrcrnrrrr)r=rZnot_serializable_objrdrrr'test_queue_feeder_on_queue_feeder_errors     2 z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc CsttfD]v}||td|dWdn1sH0Y|td|Wdq1s|0YqdS)Nz is closedfoo)rrr|rassertRaisesRegexr6rcrrvrrr$test_closed_queue_put_get_exceptionss (z/_TestQueue.test_closed_queue_put_get_exceptionsN)rFrGrHr1rdrnrprsrtrurwrzr~rrrrrrrrrr`s$ ; 5    &r`c@s$eZdZddZddZddZdS) _TestLockcCsR|}||d||dd||d|ttjf|jdS)NTF)LockrVacquirereleaserr6r ThreadErrorr=lockrrr test_locks z_TestLock.test_lockcCs~|}||d||d||d||d||d||d|ttf|jdSr)RLockrVrrrrrrrrr test_rlocksz_TestLock.test_rlockcCs,|Wdn1s0YdSr)rr_rrrtest_lock_contexts z_TestLock.test_lock_contextN)rFrGrHrrrrrrrrs rc@s,eZdZddZddZddZddZd S) _TestSemaphorecCs|dt|||d|dt|||d|dt|||dd|dt|||d|dt|||d|dt|dS)NrTrNrF)rYr]rVrrr=semrrr_test_semaphoresz_TestSemaphore._test_semaphorecCsT|d}||||d|dt|||d|dt|dS)NrrUrf) SemaphorerrVrrYr]rrrrtest_semaphores   z_TestSemaphore.test_semaphorecCs|d}||dSNr)BoundedSemaphorerrrrrtest_bounded_semaphores z%_TestSemaphore.test_bounded_semaphorecCs|jdkr|d|j|d}t|j}||dd||jd||ddd||jd||dt d||jd||dt d||jt ||t dd||jt dS)NrJrhrFr&Tr) rirjrkrr:rrVrTr<rkrlrm)r=rrrrrrs   z_TestSemaphore.test_timeoutN)rFrGrHrrrrrrrrrs rc@seZdZedddZddZddZdd Zd d Zd d Z ddZ eddZ e edddZeddZe edddZeddZddZdS)_TestConditionNcCs.||||||dSr)rrr%)rcondsleepingwokenr(rrrrIs  z_TestCondition.fc Cs`tdD]<}z||krWqFWnty8YqFYn0ttqtt|||dSNr)rrUr?rrrY)r=r;rWrrrrassertReachesEventually$s       z&_TestCondition.assertReachesEventuallycCsX|jdkrTz6|j|j}||d||jdWntyRYn0dS)NrJr)ri_sleeping_countr] _woken_countrV_wait_semaphorerU)r=rsleepersrrrcheck_invariant/s   z_TestCondition.check_invariantcCs|}|d}|d}|j|j|||fd}d|_|||jtj |j|||fd}d|_|||j| | t t |dt|| ||t t |dt|| ||t t |dt||||dS)NrrTrNr) Conditionrr|rIrprrrrrrr?rrrYr]notifyrr)r=rrrrrrr test_notify:s6        z_TestCondition.test_notifycs|}|d}|dtdD]h}|j|j||tfd}d|_|||j t j |j||tfd}d|_|||j q$tdD] }| qtdD] } q| dt||tdD]d}|j|j||fd}d|_|||j t j |j||fd}d|_|||j qtdD]}| qHtt| dt| |||fddd||dS)NrrUrTracstSrr]rrrrrz0_TestCondition.test_notify_all..)rrrr|rIrkrprrrrrrrYr]rr?rr notify_allrrr=rrrrrCrrrtest_notify_allgsP                z_TestCondition.test_notify_allcsP|}|d}|dtdD]d}|j|j||fd}d|_|||jt j |j||fd}d|_|||jq$tdD] }| qt t|dt| |jdd||fdd d| |jd d||fd d d| |jdd||dt||dS) NrrUrTrar)ncstSrrrrrrrrz._TestCondition.test_notify_n..rfcstSrrrrrrrr)rrrr|rIrprrrrrrr?rrrYr]rrrrrrrr test_notify_ns:          z_TestCondition.test_notify_ncCsH|}t|j}||t}|||d||jtdSr) rr:r%rrkrrVrTr<)r=rr%rXrrrrs  z_TestCondition.test_timeoutcs`|Hd_||fdd}|r4jdkr>tdWdn1sR0YdS)Nrcs jdkSNrfrWrstaterrrrz0_TestCondition._test_waitfor_f..rfrN)rWrwait_forrr)rrrrrrr_test_waitfor_fs z_TestCondition._test_waitfor_fzneeds sharedctypesc s|}|dd|j|j|fd}d|_||:|fdd}|||j dWdn1sz0Yt dD]H}t d |&j d 7_ | Wdq1s0Yqt|||jddS) Nrr2rTcs jdkSNrrrrrrrrz-_TestCondition.test_waitfor..rrfrrN)rrr|rrprrrnrVrWrr?rrrrv)r=rrrrrrr test_waitfors   ,  (z_TestCondition.test_waitforcs||hd}t}|jfdd|d}t|}|sf|d|kr\|dkrfnnd|_Wdn1sz0YdS)Nr"cs jdkSrrrrrrrrz8_TestCondition._test_waitfor_timeout_f..rg333333?rT)rr?r@rrW)rrrsuccessrrdtrrrr_test_waitfor_timeout_fs $z&_TestCondition._test_waitfor_timeout_fc Cs|}|dd}|dd}|d}|j|j||||fd}d|_|||jt j dt dD]H}t d|&|jd 7_|Wdql1s0Yqlt|||jdS) NrrFrTrrUrrN)rrrr|rrprrnrrrrr?rrWrr)r=rrrrrrrrrtest_waitfor_timeout s"      (z#_TestCondition.test_waitfor_timeoutcCsP||Wdn1s"0Ytd|durLt|tjdSrM)rr?rr3rrr.)rrerrrr_test_wait_result%s & z _TestCondition._test_wait_resultcCst|trtjdkrt}nd}|}||||d||d|j |j ||fd}| | |d|dur| t|jd|Wdn1s0YdS)Nr#rr"r<)rProcessesMixinrrr3rurr~r%r|rrrnrKeyboardInterruptr)r=rrerrrrtest_wait_result-s z_TestCondition.test_wait_result)N)rFrGrHr1rIrrrrrrrr7r2HAS_SHAREDCTYPESrrrrrrrrrrs&   ->2       rc@s eZdZeddZddZdS) _TestEventcCstt|dSr)r?rrlrrrrr _test_eventDs z_TestEvent._test_eventcCs|}t|j}||d||dd||jd||td||jt|||d||d||jd||td||jd| |j |j |fd}d|_ | ||d|dS)NFr&Tr)rr:r%rVrrTr<rkrrr|rrprr)r=rr%rrrr test_eventIs& z_TestEvent.test_eventN)rFrGrHr1rrrrrrrBs rc@s4eZdZddZddZddZddZd d Zd S) _DummyListcCs6tjtd}t}|||fd|jd<dS)Nrr)rheap BufferWrapperstructcalcsizer __setstate__ _lengthbuf)r=wrapperrrrrr>wsz_DummyList.__init__cCs"|\|_|_|jd|_dS)Nr)_wrapper_lockcreate_memoryviewcastr)r=rrrrr}s z_DummyList.__setstate__cCs |j|jfSr)rrr_rrr __getstate__sz_DummyList.__getstate__cCs<|j"|jdd7<Wdn1s.0YdSNrrNrr)r=_rrrrsz_DummyList.appendcCs4|j|jdWdS1s&0YdSrrr_rrr__len__sz_DummyList.__len__N)rFrGrHr>rrrrrrrrrus rcCstddS)Nrrrrrr_waitsrc@sBeZdZdZdddZddZddZd d Zd d Zd dZ dS)Bunchz A bunch of threads. Fc Cs||_||_||_||_||_||_|s>|jg}t |D]*}|j |j d}d|_ | ||qJdd} t|| ||_dS)z Construct a bunch of `n` threads running the same function `f`. If `wait_before_exit` is True, the threads won't terminate until do_finish() is called. ryTcSs|D] }|qdSr)r)rLrrrrfinalizesz Bunch.__init__..finalizeN)rIrAr DummyListstartedfinishedr _can_exitrrr|taskrprrrr _finalizer) r= namespacerIrArZwait_before_exitrLrrrrrrr>s       zBunch.__init__c Csxt}|j|z6|j|jW|j||jd|j stJn(|j||jd|j srJ0dS)N) r3rurrrIrArrr%rr=rrrrrs     z Bunch.taskcCst|j|jkrtqdSr)rsrrrr_rrrwait_for_startedszBunch.wait_for_startedcCst|j|jkrtqdSr)rsrrrr_rrrwait_for_finishedszBunch.wait_for_finishedcCs|jdSr)rrr_rrr do_finishszBunch.do_finishcCs |dSr)rr_rrrrsz Bunch.closeN)F) rFrGrHrr>rrrrrrrrrrs  rc@seZdZddZddZdS) AppendTruecCs ||_dSr)ry)r=ryrrrr>szAppendTrue.__init__cCs|jddSr)ryrr_rrrrDszAppendTrue.__call__NrErrrrrsrc@seZdZdZdZdZddZddZdd Zd d Z e d d Z d6ddZ ddZ e ddZddZe ddZddZe ddZddZe dd Zd!d"Ze d#d$Zd%d&Ze d'd(Zd)d*Ze d+d,Zd-d.Zd/d0Ze d1d2Zd3d4Zd5S)7 _TestBarrierz$ Tests for Barrier objects. rbg>@cCs|j|j|jd|_dS)Nr)BarrierrdefaultTimeoutbarrierr_rrrsetUpsz_TestBarrier.setUpcCs|jd|_dSr)rabortr_rrrtearDowns z_TestBarrier.tearDowncCs,|jdkrgS|jdkr"|jStSdS)NrLrK)rirKrrr_rrrrs    z_TestBarrier.DummyListcCs@t||||jd}z|||W|n |0dSrM)rrrr)r=rIrArSrrr run_threadss  z_TestBarrier.run_threadscCs|j}||jksJt|D]d}|ddt|d||ksFJ||ddt|d|d|ksxJ|qz|jdksJWntyYn0|jrJdS)NrTrN) partiesrrrrsr% n_waitingrUbroken)rrresultsrmrrrr multipasss   z_TestBarrier.multipassrNcCs*||g}||j|j||fdS)z; Test that a barrier is passed in lockstep N)rrr r)r=passesrrrr test_barriersz_TestBarrier.test_barriercCs |dS)zC Test that a barrier works for 10 consecutive runs r)r r_rrrtest_barrier_10sz_TestBarrier.test_barrier_10cCs|}||dSr)r%rc)rrrrXrrr_test_wait_return_f sz _TestBarrier._test_wait_return_fcsR|||j|jffddt|jD}||ddtdS)z9 test the return value from barrier.wait csg|] }qSrrrrrrrrz1_TestBarrier.test_wait_return..rrNN) rrr rrrrVcountrr=rrrrtest_wait_returns z_TestBarrier.test_wait_returncCs|t|dkrtdSrM)r%rsr)rrrrrr_test_action_fs z_TestBarrier._test_action_fcCsB|}|j|jt|d}||j||f|t|ddS)z, Test the 'action' callback )rrNN)rrrrrrrVrs)r=rrrrr test_action"sz_TestBarrier.test_actioncCslz0|}||jdkrt||dWn6tjyN|dYntyf|Yn0dSNrT)r%rrrrBrokenBarrierErrorr)rrresults1results2rrrr _test_abort_f+s z_TestBarrier._test_abort_fcCs^|}|}||j|j||f|t|d|t||jd||jjdS)zK Test that an abort will put the barrier in a broken state rrNN) rrrrrVrsrrnr)r=rrrrr test_abort8s z_TestBarrier.test_abortcCs|}||jdkr<|j|jdkr2tdq|n6z||dWntjyp|dYn0||ddS)NrrNrT) r%rrr?rresetrrr)rrrrresults3rrrr _test_reset_fDs  z_TestBarrier._test_reset_fcCsl|}|}|}||j|j|||f|t|d|t||jd|t||jdS)zL Test that a 'reset' on a barrier frees the waiting threads rrNN)rrrrrVrsr)r=rrrrrr test_resetVs z_TestBarrier.test_resetcCsz0|}||jdkrt||dWn6tjyN|dYntyf|Yn0||jdkr||||ddSr)r%rrrrrrr)rrbarrier2rrrrrrr_test_abort_and_reset_fcs z$_TestBarrier._test_abort_and_reset_fcCsz|}|}|}||j}||j|j||||f|t|d|t||jd|t||jdS)zF Test that a barrier can be reset after being broken. rrNN)rrrrrrrVrs)r=rrrrrrrtest_abort_and_resetys z!_TestBarrier.test_abort_and_resetcCsR|}||jdkr tdz|dWntjyL|dYn0dS)Nr?r T)r%rr?rrrrrrrrrrr_test_timeout_fs z_TestBarrier._test_timeout_fcCs4|}||j|j|f|t||jjdS)z$ Test wait(timeout) N)rrr"rrVrsrrrrrrsz_TestBarrier.test_timeoutcCsT||j}||jdkr$tdz |WntjyN|dYn0dS)Nrr T)r%rrr?rrrrr!rrr_test_default_timeout_fs   z$_TestBarrier._test_default_timeout_fcCs@|j|jdd}|}||j||f|t||jdS)z4 Test the barrier's default timeout r rN)rrrrr#rVrsr)r=rrrrrtest_default_timeoutsz!_TestBarrier.test_default_timeoutcCs|d}||dSrM)rr%)r=rSrrrtest_single_threads z_TestBarrier.test_single_threadc CsHt|D]:}||||Wdq1s80YqdSr)rr%r)rrr connrrrrr_test_thousand_fs z_TestBarrier._test_thousand_fcCs|jdkr|d|jd}|}|d\}}t|jD]2}|j|j|j |||fd}| | |j q@t|D]$}t|jD]}| ||qq|dS)NrKrhFr)rirjrkrrrrr|r'rrrrrVr)r=r rr&r5jrrrrr test_thousands   z_TestBarrier.test_thousandN)rN)rFrGrHrrrrrrrr1r r r r rrrrrrrrrr"rr#r$r%r'r*rrrrrsH               rc@sZeZdZdZdddddededfgZd d Zed d ZdddZ ddZ ddZ dS) _TestValuer?)rii^)dg @g)hi)rdrexycCsts|ddSNz%requires multiprocessing.sharedctypesrrjr_rrrrsz_TestValue.setUpcCs$t||jD]\}}|d|_q dSr)zip codes_valuesrW)rvaluessvcvrrrr}sz_TestValue._testFcs|rfddjD}nfddjD}t|jD]\}}|j|dq:jj|fd}d|_||t|jD]\}}|j|dqdS)Ncsg|]\}}}||qSr)RawValuercoderWrr_rrrsz)_TestValue.test_value..csg|]\}}}||qSr)rr;r_rrrsrNrTr) r6r5rVrWr|r}rprr)r=rawr7r8r9rrr_r test_values  z_TestValue.test_valuecCs|jdddSNT)r=)r>r_rrr test_rawvaluesz_TestValue.test_rawvaluec Cs|dd}|}|}|jdddd}|}|}|}|jdd|d}|} |} ||| |jdddd} |t| d|t| d|jt|jdddd| dd} |t| d|t| ddS)NrrbrFget_lockget_objZnavalue) rrBrCrrVr~rrr5r:) r=Zval1lock1obj1Zval2lock2obj2rZval3lock3obj3arr4arr5rrrtest_getobj_getlocks$   z_TestValue.test_getobj_getlockN)F) rFrGrHr[r r6rr1r}r>r@rLrrrrr+s  r+c@s~eZdZdZeddZeeduddddZ eedudd d Z eedudd d Z eedudd dZ dS) _TestArrayr?cCs0tdt|D]}||||d7<qdSrM)rrs)rseqrrrrrIsz _TestArray.fNzrequires _ctypesFcCsgd}|r|d|}n |d|}|t|t|||d|d|t|ddt|ddtdgd|dd<|dd<|t|dd||||j|j|fd }d |_| | |t|dd|dS) N) iirii5i$iii?rrUrrg)rNrrUrfrfrVrT) RawArrayArrayrVrsrarrayrIr|rprr)r=r=rNarrrrrr test_arrays $$ z_TestArray.test_arraycCsrd}tdD]`}|d|}|t|||t|dg|td|dd<|t|ttd~q dS)NrrUrr)rrRrVrsr)r=sizerrTrrrtest_array_from_size7s  z_TestArray.test_array_from_sizecCs|jdddSr?)rUr_rrr test_rawarrayFsz_TestArray.test_rawarrayc Cs |dttd}|}|}|jdttddd}|}|}|}|jdttd|d}|} |} ||| |jdtddd} |t| d|t| d|j t |jdtddd| dtd} |t| d|t| ddS)NrrrAFrBrCZnotalock) rRrrrBrCrrVr~rrr5rQ) r=Zarr1rDrEZarr2rFrGrZarr3rHrIrJrKrrrtest_getobj_getlock_objJs( z"_TestArray.test_getobj_getlock_obj)F) rFrGrHr[r1rIr7skipIfr.rUrWrXrYrrrrrMs    rMc@sPeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dS)_TestContainersrKcCs^|ttd}||ddttd|}||ddg|ttd||ddttd||dd||ddgd|d9}||ddgd||ddggd||ddttd||g}||}|dd |Dgd gdg||g}|d ||d ddgd dS)Nrrbr)rrUrf) rrNrrUrfrrNrrUrfra) rrNrrUrfrrNrrUrfrbracSsg|]}|ddqSrr)relementrrrrrz-_TestContainers.test_list..) rrNrrUrfrbrargrV rr) rrNrrUrfrbrargrVr^r)rrrVextendr)r=rRrSr,rrIrrr test_listls*    z_TestContainers.test_listcCsf|ttd}t|}|t|ttd|t|gt|}d|d<|t|ddS)Nrrr)rrr7rVnext)r=rRitrrrtest_list_itersz_TestContainers.test_list_itercsfddtdD}dd|Dgdgdd|dd<|dddgd td dD] }||ddgdqn|d d t|d d tddd D]}t||dq~}||~dS) Ncsg|]}tdqS)rU)rr)rZ_ir_rrrrz;_TestContainers.test_list_proxy_in_list..rUcSsg|]}|ddqSrr)rinnerrrrrr)rrNr7rr2)rrNrerNr)rrrVpoprsr)r=rRrrSrr_rtest_list_proxy_in_lists   z'_TestContainers.test_list_proxy_in_listcCs|}ttdd}|D]}t|||<q||tdd|D|t|||t|dd|D|t| dd|DdS)NAFcss|]}|t|fVqdSrchrrrrr rz,_TestContainers.test_dict..cSsg|] }t|qSrrjrrrrrrz-_TestContainers.test_dict..cSsg|]}|t|fqSrrjrrrrrr) dictrrrkrVr sortedkeysr7r)r=r,indicesrrrr test_dictsz_TestContainers.test_dictcCsv|}ttdd}|D]}t|||<qt|}|t|||t|gt|}||tt |dS)Nrhri) rmrrrkr7rVrrrra)r=r,rprrbrrrtest_dict_itersz_TestContainers.test_dict_itercCs|jddd}|jddd}|j||d}||dd||d ddd |d d <||d d ||d d d d |d d<||dd ||d dd ~~||d ddd|d d <||d d d|d }|d }d |d<||dd ||d dd ||t|d||dd ||dd|||g}d|dd<||dd||ddd~~||ddd|ddg|g}||dt||dddddS)Nrrf)ferretshamstersrrU)waterfeed)petssuppliesrurxrbZblanketsrgrwrs rrtrNZmarmotsXcr2rv)rmrVrrsrrq)r=rwrxr,lZouterrrrtest_dict_proxy_nestedsF    z&_TestContainers.test_dict_proxy_nestedcCsr|}|||dd||dd|}||d<|dd||dddS)Nr{)rrrrcrVrrmrQrrrtest_nested_queues z!_TestContainers.test_nested_queuecCsh|}d|_d|_d|_||j|jfd|`|t|d|t|d|t|d dS)NBobBuilderZhidden)rrzNamespace(name='Bob')rjob) NamespacerrZ_hiddenrVr;rnr)r=rrrrtest_namespacesz_TestContainers.test_namespaceN) rFrGrHr[r`rcrgrqrrr}rrrrrrr[hs   . r[r&cCst|||Srr)r1r%rrrsqr s rcCs||Srrr1r2rrrmul srcCst|tdddS)Nr1i)r?rr6r$rrrraise_large_valuerror s rcCs|Srrr1rrridentity src@s eZdZdZddZddZdS) CountedObjectrcCs|jd7_t|SrM) n_instancesr__new__rrrrr szCountedObject.__new__cCst|jd8_dSrM)rrr_rrr__del__ szCountedObject.__del__N)rFrGrHrrrrrrrr src@s eZdZdS) SayWhenErrorNrFrGrHrrrrr rrccs8|dkrtdt|D]}||kr,td|VqdS)Nr2zSomebody said when)rr)totalZwhenrrrrexception_throwing_generator! s  rcseZdZefddZefddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zed+d,Zd-d.Zed/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Z Z!S); _TestPoolcst|d|_dSr)super setUpClassPoolpoolr __class__rrr, s z_TestPool.setUpClasscs(|j|jd|_tdSr)rrrr tearDownClassrrrrr1 s  z_TestPool.tearDownClasscCs@|jj}||tdtd||tddditdddS)N)rbrbrr1rUr)rapplyrVr)r=Zpapplyrrr test_apply8 sz_TestPool.test_applyc Csh|jj}||tttdtttttd||tttdddtttttddS)Nrrr chunksize)rmaprVrrr)r=Zpmaprrrtest_map= s ,z_TestPool.test_mapcCs|jj}tttdtddd}||t|ttt|tttdtddd}||t|ddttt|dS)Nrr^r2rr{rr)rstarmaprr5rrVr itertools)r=Zpsmaptuplesrrr test_starmapC s z_TestPool.test_starmapcCsDtttdtddd}||jt|tt t|dS)Nrr{r2) rr5rrVrZ starmap_asyncrrrr)r=rrrrtest_starmap_asyncL sz_TestPool.test_starmap_asyncc Cs8||jtttdtttttddSr)rVr map_asyncrrrrrr_rrrtest_map_asyncQ sz_TestPool.test_map_asynccCs|jdkr|jng}|jjtdg|j|jd|dt ||dg|d|jjtdg|j|jd|dt || |dt dS)NrK1)callbackerror_callbackrNrrRr) rirKrrrrrr%rVrsrqr6)r=Z call_argsrrrtest_map_async_callbacksU s    z"_TestPool.test_map_async_callbackscCsp|jdkr|d|jGdddt}|t&|jt|gdWdn1sb0YdS)NrLrhc@seZdZddZdS)z*_TestPool.test_map_unplicklable..AcSs tddS)Nz cannot picklerr_rrrrZg sz5_TestPool.test_map_unplicklable..A.__reduce__NrrrrrAf srr) rirjrkrrrrrr)r=rrrrtest_map_unplicklableb s   z_TestPool.test_map_unplicklablecCsBz|jjtgddjtdWntjy<|dYn0dS)NrNrrz2pool.map_async with chunksize stalled on null list)rrrrrkr TimeoutErrorrr_rrrtest_map_chunksizel sz_TestPool.test_map_chunksizecCsj|jdkr|d|j|t&|jttdddWdn1sR0Y|t&|jttdddWdn1s0Y|t&|jttdddWdn1s0YGddd}|t"|jt|dWdn1s0Y|t"|jt|dWdn1s\0YdS) NrKrhrNr2rrUc@s$eZdZddZddZddZdS)zE_TestPool.test_map_handle_iterable_exception..SpecialIterablecSs|Srrr_rrr__iter__ szN_TestPool.test_map_handle_iterable_exception..SpecialIterable.__iter__cSstdSr)rr_rrr__next__ szN_TestPool.test_map_handle_iterable_exception..SpecialIterable.__next__cSsdSrMrr_rrrr szM_TestPool.test_map_handle_iterable_exception..SpecialIterable.__len__N)rFrGrHrrrrrrrSpecialIterable sr) rirjrkrrrrrr)r=rrrr"test_map_handle_iterable_exceptionr s  4 4 4 2 z,_TestPool.test_map_handle_iterable_exceptioncCs<|jtdtf}t|j}||d||jtdS)Nrg1) r apply_asyncrrkr:rrVrTr<r=rXrrrr test_async s z_TestPool.test_asynccCsD|jtdtdf}t|j}|jtj|td| |j tdS)Nrar r) rrrrlr:rrrrrTr<rrrrtest_async_timeout s z_TestPool.test_async_timeoutc Cs|jtttd}|t|tttttd|jtttd}tdD]}|t|||qV|t |j |jjtttddd}tdD]}|t|||q|t |j dSNrr(rr) rimaprrrrVrrar StopIterationrr=rbrrrr test_imap s"  z_TestPool.test_imapcCs<|jdkr|d|j|jttddd}|t|j |jttddd}|t|j |jttddd}t dD]}| t |||q|t|j |jttddd }t d D]}| t |||q|t|j |jttddd }t d D]}| t |||q|t|j dS) NrKrhrNr2rrUrrgrrarf) rirjrkrrrrrrrrrVrarrrr#test_imap_handle_iterable_exception s$    z-_TestPool.test_imap_handle_iterable_exceptionc Csx|jtttd}|t|tttttd|jjtttddd}|t|tttttddSr)rimap_unorderedrrrrVrnr)r=rbrrrtest_imap_unordered s"z_TestPool.test_imap_unorderedcCsp|jdkr|d|j|jttddd}|t|j |jttddd}|t|j |jttddd}t t tt t d}|t<t dD]"}t |}|||||qWdn1s0Y|jttddd }t t tt t d}|t>t dD]$}t |}|||||q&Wdn1sb0YdS) NrKrhrNr2rrUrrgr)rirjrkrrrrrrrrrrrarr)r=rbZexpected_valuesrrWrrr-test_imap_unordered_handle_iterable_exception s@    *   z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCs|jdkrtnt}|||jd|||jd|jdkr|d}z&|dt|jW|| n|| 0dS)NrKr2rrU) ri RemoteErrorr6rrrVrs_poolrr)r=Zexpected_errorrrrrtest_make_pool s   z_TestPool.test_make_poolcCsP|jjtjddtdDdd}|jt|jj}|||j ddS)NcSsg|]}dqS)r"rrrrrr rz,_TestPool.test_terminate..i'rNrr)) rrr?rrrr:r assertLessr<)r=rrrrrr s  z_TestPool.test_terminatecCsz|d}||tgg|t|tgg|t|tgg||tgg| | dSrM) rrVrrrrrrrrrrrrrtest_empty_iterable s z_TestPool.test_empty_iterablecCs|jdkrttd}dd|D}|d,}|t|}|||Wdn1s`0Y|| t |jt|dS)NrJrcSsg|] }t|qSr)rrrrrr rz*_TestPool.test_context..r) rirrrrrrVrrrr6)r=LrrrArrr test_context s    .z_TestPool.test_contextcCs tddS)Nr~rrrrr_test_traceback sz_TestPool._test_tracebackc Cs|jdkr|dT}z||jWn(tyP}z|}WYd}~nd}~00|dWdn1sp0Y||t|t | |j d|j }|t|t jj|d|jtj:}z|Wn t ytjtYn0Wdn1s0Y|d||d|}z|ttdddWn*ty|}z|}WYd}~nd}~00|d|t|t||j dWdn1s0Y|dS)NrJrNzexpected RuntimeError)r~z&raise RuntimeError(123) # some commentr2zexpected SayWhenError)rirrr ExceptionrrrrrrVrA __cause__rrZRemoteTracebackrtbrrrr excepthookexc_infogetvaluerrrr)r=rrexccausef1rrrtest_traceback s<  (  4  .z_TestPool.test_tracebackcCs tddS)Nrrrrrr_test_wrapped_exceptionD sz!_TestPool._test_wrapped_exceptionc Csl|dF}|t||jWdn1s80YWdn1sV0Y|dSrM)rrrrrrrrrrtest_wrapped_exceptionH s  Hz _TestPool.test_wrapped_exceptionc Cst}|t|d\}z.|tddgWtd|| ntd|| 0Wdn1s0YWdn1s0Y| t|ddS)NrrrNr g?) r?r@rr6rrrrrr assertGreater)r=Zt_startrrrrtest_map_no_failfastO s    Fz_TestPool.test_map_no_failfastcCspddtdD}dd|D}|jt|~ttt| t dd|Ddh| t j ddS)NcSsg|] }tqSr)rrrrrrf rz4_TestPool.test_release_task_refs..rcSsg|]}t|qSr)rr)rorrrrg rcss|] }|VqdSrr)rrrrrrlm rz3_TestPool.test_release_task_refs..r) rrrrrrr?rrrVrrr)r=ZobjsZrefsrrrtest_release_task_refsc s z _TestPool.test_release_task_refsc Cs|jdkr|d|d}|Wdn1s80Y|t4|Wdn1sh0YWdn1s0Y|dS)NrKtest not applicable to managerrN)rirjrrr6rr=rrrr test_enterr s    <z_TestPool.test_entercCsv|jdkr|d|d}||tjj|_t dt fd}t Wdn1sh0YdS)NrKrrNz%unclosed running multiprocessing pool) rirjrrrrrZRUN_staterZcheck_warningsResourceWarning gc_collectrrrrtest_resource_warning s    z_TestPool.test_resource_warning)"rFrGrHr1rrrrrrrrrrrrrrrrrrrrrrrrrrrrr __classcell__rrrrr* sB   $    & rcCs tddS)Nkey)KeyErrorrrrrraising srcCsddS)NcSsdS)N*rrrrrr rz%unpickleable_result..rrrrrunpickleable_result src@s eZdZdZddZddZdS)_TestPoolWorkerErrorsr?csjtd}dgfdd}|jt|d}|t|j|d|dt| | dS)Nrcs |d<dSrrrZ scratchpadrrerrback sz@_TestPoolWorkerErrors.test_async_error_callback..errbackrr) rrrrrrrrnrqrr)r=rrrXrrrtest_async_error_callback s  z/_TestPoolWorkerErrors.test_async_error_callbackcsddlm}td}tdD]l}dgfdd}|jt|d}|||jd}| || d|| |j | |j q||dS)Nr)MaybeEncodingErrorrrcs |d<dSrrrrrrr sz?_TestPoolWorkerErrors.test_unpickleable_result..errbackr)multiprocessing.poolrrrrrrrrrnrqZassertIsNotNonerrWrr)r=rrZ iterationrrXwrappedrrrtest_unpickleable_result s      z._TestPoolWorkerErrors.test_unpickleable_resultN)rFrGrHr[rrrrrrr src@s(eZdZdZddZddZddZdS) _TestPoolWorkerLifetimer?c Cstjddd}|dt|jdd|jD}g}tdD]}||t|fq.r2css|]}|VqdSrrorrrrrl rzD_TestPoolWorkerLifetime.test_pool_worker_lifetime..rNcSsg|] }|jqSrrrrrrr r)rrrVrsrrrrr enumeraterZ_repopulate_poolallr?rrrrrnrr) r=rZorigworkerpidsrrr)rXZ countdownZfinalworkerpidsrrrtest_pool_worker_lifetime s&    z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd}g}tdD]}||t|dfq||t|D]\}}| | t|qNdS)NrUrNrrag333333?) rrrrrrrrrrVr)r=rrrr)rXrrr%test_pool_worker_lifetime_early_close s z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closecCs*d}tjjd|\}}}||ddS)Naif 1: from multiprocessing import Pool problem = None class A: def __init__(self): self.pool = Pool(processes=1) def test(): global problem problem = A() problem.pool.map(float, tuple(range(10))) if __name__ == "__main__": test() -cr)rr script_helperassert_python_okrVr=cmdroutrJrrr>test_worker_finalization_via_atexit_handler_of_multiprocessing s zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rFrGrHr[rrrrrrrr s r) BaseManager BaseProxyrc@s$eZdZddZddZddZdS)FooBarcCsdS)Nf()rr_rrrrI szFooBar.fcCstdSr)r6r_rrrg szFooBar.gcCsdS)N_h()rr_rrr_h sz FooBar._hN)rFrGrHrIrr rrrrr srccstdD]}||VqdSr)r)rrrrbaz s r c@s eZdZdZddZddZdS) IteratorProxy)rcCs|Srrr_rrrr szIteratorProxy.__iter__cCs |dS)Nr) _callmethodr_rrrr szIteratorProxy.__next__N)rFrGrHZ _exposed_rrrrrrr  sr c@s eZdZdS) MyManagerNrrrrrr srFoo)callableBar)rIr )rZexposed)rZ proxytypec@s0eZdZdZddZddZddZdd Zd S) _TestMyManagerr\cCs<t}||||||jjdtj fdSr) rrcommonshutdownr_processrvrrr=rKrrrtest_mymanager$ s  z_TestMyManager.test_mymanagercCsLt}||Wdn1s&0Y||jjdtj fdSr)rrrrrvrrrrrrtest_mymanager_context/ s(z%_TestMyManager.test_mymanager_contextcCsPt}||||Wdn1s20Y||jjddSr)rrrrVrrvrrrr!test_mymanager_context_prestarted7 s (z0_TestMyManager.test_mymanager_context_prestartedcs|||}fdddD}fdddD}||ddg||ddg|d|tj|dd|t jd|d| d |dd|dd |t |d dt d DdS) Ncsg|]}t|r|qSrrrr)rrrrC rz)_TestMyManager.common..)rIrr csg|]}t|r|qSrrr)barrrrD rrIrr rr cSsg|] }||qSrrrrrrrS rr) rrr rVrIrr6rr rr rr)r=rKr Z foo_methodsZ bar_methodsr)rrrr> s z_TestMyManager.commonN)rFrGrHr[rrrrrrrrr s  rcCstSr)_queuerrrr get_queue[ src@seZdZdZdS) QueueManagerz$manager class used by server processNrFrGrHrrrrrr^ src@seZdZdZdS) QueueManager2z@manager class which specifies the same interface as QueueManagerNr rrrrr!b sr! xmlrpclibc@s8eZdZdZgdZeddZeddZddZdS)_TestRemoteManagerr\) hello worldNT@uhallå världenuпривіт світs hall vrldenNcCs2t||td}||}|t|jdS)NaddressrmZ serializer)r! SERIALIZERconnectrrctupler7rr'rmrKrrrr_putters s z_TestRemoteManager._puttercCstd}ttjdf|td}|||j|j |j |j |fd}d|_ |t |j |td}||}|||j|t|jtj~dS)N rr&rT)r3urandomrrHOSTr(rrrr|r,r'rpr!r)rrVrrrrrcr?r)r=rmrKrZmanager2rrrr test_remote} s"   z_TestRemoteManager.test_remote) rFrGrHr[r7rr1r,r0rrrrr#i s   r#md5c@s eZdZeddZddZdS)_TestManagerRestartcCs,t||td}||}|ddS)Nr&r$)rr(r)rrcr+rrrr, s z_TestManagerRestart._putterc Cs:td}ttjdf|td}zv|}|j}|j | |j |j |j|fd}| | |}||d~Wt|dr|nt|dr|0t||td}z| ||jWndty4}zJ|jtjkrtdt||td}t|dr ||jWYd}~n d}~00dS)Nr-rr&rr$rr )r3r.rrr/r(Z get_serverr'listenerrrr|r,rrrVrrrrOSErrorerrnoZ EADDRINUSEr?r)r=rmrKZsrvraddrrrrrrrtest_rapid_restart sD         z&_TestManagerRestart.test_rapid_restartN)rFrGrHr1r,r7rrrrr2 s r2c@seZdZdZeddZddZddZdd Zd d Z ed d Z ed$ddZ e edddZe ede ejdkde edkde eeddddZeddZe ede ejdkddd Zd!d"Zd#S)%_TestConnectionrgcCs(t|jtD]}||q |dSr)r7 recv_bytesSENTINEL send_bytesr)rr&msgrrr_echo s z_TestConnection._echoc CsL|\}}|j|j|fd}d|_|gd}td}|d}tdttd}|j dkrv| t | t | ||d| ||| ||d| |||j dkr tdd gd}t|d gdt|} | ||d| ||t||j| t|| tdd gd}d gd t|d gd t|} | ||d| ||d |jt||j| t|| ttd }| ||dz||} Wn8tjy} z| | j|fWYd} ~ nd} ~ 00|d | t|j} | | d|| jd | | dd|| jd | | td|| jt|dt d| | td|| jd | |dtdd} || | || |t!|"|j dkr@| |j#d| |j$d|%t&|j|%t&|j|'dS)NrT)rNr%Nr$rrrfrJrrUrgz( zexpected BufferTooShort, got %sFr2r"Xi)(rr|r>rprr rSrrrirVrfilenorrrr<r:rsrecv_bytes_intoitemsize bytearrayrBufferTooShortrArr:rrTr<rkr?rr;rreadablewritablerEOFErrorr)r=r&r5rrNr=ZlongmsgrTbufferrrXrrZreally_big_msgrrrtest_connection sv     $  &       z_TestConnection.test_connectioncCs|jdd\}}||dd||d|jdkr||jd||jd||jd||jd|t|jd|t|j|t|j dS)NFrrNrJTr) rrVrrrirErFrr4r)r=readerwriterrrrtest_duplex_false* s z!_TestConnection.test_duplex_falsecCst|\}}|j|j|fd}d|_||td}|||| ||t || dS)NrTr) rr|r>rprrr r<rVr:r;r)r=r&r5rr=rrrtest_spawn_close7 s   z _TestConnection.test_spawn_closecCs:|jdkr|d|jtd}|\}}|||||||d|||dd||dd|||dd||d||td ||dd ||td |t |j|d |t |j|d d|t |j|dd |t |j|d|t |j|dddS)NrJrhabcdefghijklmnopqrstuvwxyzrbrgrVr8rrNr2rf) rirjrkr rr<rVr:rr6)r=r=rRrSrrrtest_sendbytesL s&     z_TestConnection.test_sendbytesc CsXzt|Wn@tyN}z(|jtjkr8WYd}~dSWYd}~nd}~00dSdS)NFT)r3fstatr4r5EBADF)rrRrrrr_is_fd_assignedl s z_TestConnection._is_fd_assignedFcCsd|r.tddD]}||st||qt|}trJt|tj }t ||t |dS)Nrr+) rrVr3dup2r@r recv_handlemsvcrtopen_osfhandlerOrr)rr&dataZcreate_dummy_fdsrrRrrr_writefdw s   z_TestConnection._writefd$test needs multiprocessing.reductioncCs|jdkr|d|jdd\}}|j|j|dfd}d|_||tj j tj j t tj j d6}| }trt|}t|||jWdn1s0Y|t tj j d }||dWdn1s0YdS) NrJonly makes sense with processesTrsfoorwbrb)rirjrr|r\rprrrrrDrCrFr@rYZ get_osfhandler send_handlerrrVrG)r=r&r5rrIrRrrrtest_fd_transfer s   .z _TestConnection.test_fd_transferr#*test semantics don't make sense on Windowsr+z)largest assignable fd number is too smallrWztest needs os.dup2()c Cs>|jdkr|d|jdd\}}|j|j|ddfd}d|_||tj j tj j t tj j dx}| }tdtD]}||s~qq~|d t||zt|||jWt|n t|0Wdn1s0Y|t tj j d  }||dWdn1s00YdS) NrJr^Trsbarrr_r+z2could not find an unassigned large file descriptorr`)rirjrr|r\rprrrrrDrCrFr@rMAXFDrVrr3rWrrarrrrVrG)r=r&r5rrIrRZnewfdrrrtest_large_fd_transfer s(     6z&_TestConnection.test_large_fd_transfercCst|ddS)N)r3rr@r=r&rrr_send_data_without_fd sz%_TestConnection._send_data_without_fdzdoesn't make sense on WindowscCs`|jdkr|d|jdd\}}|j|j|fd}d|_||tt j || dS)NrJr^Trr) rirjrr|rhrprrrrrXrr=r&r5rrrrtest_missing_fd_transfer s  z(_TestConnection.test_missing_fd_transferc Cs|\}}|p|L|d||d|jdkrT||j||jWdn1sh0YWdn1s0Y|jdkr||j||j|t |j|t |jdSNrJ) rrrVrrir~closedrnrr4rQrrrr s     H   z_TestConnection.test_contextN)F)rFrGrHr[r1r>rIrLrMrSrVr\r7r2 HAS_REDUCTIONrbrZrrrdrr3rerhrjrrrrrr9 s< O            r9c@s6eZdZdZddZddZeej dddZ d S) _TestListenerr?cCsB|jjD]4}|jj|d}||j|t|jj|j|qdS)Nfamily) connectionfamiliesListenerrrrr4r')r=rqr|rrrtest_multiple_bind s    z _TestListener.test_multiple_bindc Cs|j}|j|jR}|*}|d||dWdn1sT0YWdn1sr0YWdn1s0Y|jdkr| t |jdSrk rrrtClientr'acceptrrVrrirr4)r=r|rer,rrrr s   j z_TestListener.test_contextz"test needs abstract socket supportc Cs|jd}|j|jR}|*}|d||dWdn1sV0YWdn1st0YWdn1s0Y|jdkr| t |jdS)Nz somethingrlrJrv)r=r3clientr,rrrtest_abstract_socket s  j z"_TestListener.test_abstract_socketN) rFrGrHr[rurr7r2rabstract_sockets_supportedrzrrrrro s roc@s4eZdZdZeddZddZddZdd Zd S) _TestListenerClientrgcCs"|j|}|d|dS)Nr)rrrwrr)rr'r&rrrr} s  z_TestListenerClient._testcCsj|jjD]\}|jj|d}|j|j|jfd}d|_||}| | d| | qdS)NrprTr) rrrsrtr|r}r'rprrxrVrrr)r=rqr|rr&rrrtest_listener_client s z(_TestListenerClient.test_listener_clientcCsj|j}|j|j|jfd}d|_|td| }| | d| | | dS)NrTrNr)rrrtr|r}r'rprr?rrxrVrrr)r=r|rr&rrrtest_issue14725 s  z#_TestListenerClient.test_issue14725cCsh|jjD]Z}|jj|d}|j|j}|}|d||d| | | qdS)NrphellorN) rrrsrtrwr'rxr<rnrr)r=famr|rerRrrrtest_issue16955! s  z#_TestListenerClient.test_issue16955N) rFrGrHr[r1r}r}r~rrrrrr| s   r|c@sTeZdZdZddZeddZddZedd Zd d Z ed d Z ddZ dS) _TestPollrgcCsJ|\}}||d|d||d||ddS)NFrT)rrVrr<rQrrrtest_empty_string0 s   z_TestPoll.test_empty_stringcCs*|D]}td||q|dSNr")r?rr<r)rr&stringsr rrr_child_strings7 s  z_TestPoll._child_stringscCsrd}|\}}|j|j||fd}||D]4}tdD]}|dr<qPq<|}|||q0|dS)N)rrabrsbyersloprr) rr|rrrrr:rVr)r=rrRrSrr rr1rrr test_strings> s   z_TestPoll.test_stringscCs|ddSra)r)rrArrr_child_boundariesM sz_TestPoll._child_boundariescCsr|d\}}|j|j|fd}|tdddg}|D]}||q>||| | |dS)NFrrsfirstssecond) rr|rrr?rr<rrrr:)r=rArLrrryrrrtest_boundariesU s  z_TestPoll.test_boundariescCs"|d|d|ddS)Nrrcd)r<)rrSrrr_child_dont_mergea s  z_TestPoll._child_dont_mergecCs|\}}||dd||dd|j|j|fd}|||d||dd||dd||d||dd||dd||dd||d |dS) Nr&Fr"rrr Trr)rrVrr|rrr:r)r=rRrSrrrrtest_dont_mergeg s z_TestPoll.test_dont_mergeN) rFrGrHr[rr1rrrrrrrrrrr, s    rr]c@sPeZdZdZeddZeddZeddZdd Zed d Z d d Z dS)_TestPicklingConnectionsr?cCsddlm}|jtjddS)Nr)resource_sharerr)rrr=rr)rrrrrr s z&_TestPicklingConnections.tearDownClasscCs|D]@}|jj|d}||j|}||||qttj df}|| |\}}||||| dS)Nrpr) rrrtrr'rxrsocket create_serverrr/ getsocknamer)rr&rsrr|new_connr6rrr _listener s     z"_TestPicklingConnections._listenercCsxt|jdD]*\}}|j|}|||q |\}}t}||| |||dSr) r7rrrrwrr8rrr)sendall)rr&r'r=ryrrr_remote s    z _TestPicklingConnections._remotecCs`|jj}|\}}|j|j||fd}d|_|||\}}|j|j|fd}d|_|||D]D}d| d} | } | | | f| } | | | qv| dtd} | } | | | f| } g} | d} | sq| | qd| } | | | | | d||||dS)NrTzThis connection uses family %sasciiz$This connection uses a normal socketrr)rrrsrr|rrprrrr rrrVr8r rr)r=rsZlconnZlconn0ZlprZrconn0Zrprr=r'rbufr rrr test_pickling sF       z&_TestPicklingConnections.test_picklingcCsD|}|d||}|}||d|dS)N all is wellr)rrr)rr&rLrAr=rrr child_access s z%_TestPicklingConnections.child_accesscCs|\}}|j|j|fd}d|_|||jdd\}}|||||d||jdd\}}||||d|||d| dS)NrTFrrZfoobarZ foobarfoobar) rr|rrprrrrVrr)r=r&r5rrArLrrr test_access s"    z$_TestPicklingConnections.test_accessN) rFrGrHr[r1rrrrrrrrrrr~ s   . rcs<eZdZdZfddZfddZddZdd ZZS) _TestHeapr?cs*ttjjj|_tjtjj_dSr)rrrrr_heapold_heapZHeapr_rrrr s  z_TestHeap.setUpcs|jtjj_tdSr)rrrrrrrr_rrrrs z_TestHeap.tearDownc Csjd}d}g}tjjj}d|_t|D]L}ttddd}tj|}| |t ||krnt |}||=~q$|j bg}d} d} t |jD]@} | D]6\} } }| |j| | ||| df| || 7} qq|jD]B\} }|D]4\} }| |j| | ||| df| || 7} qq|| | tdd |jD|tt |dD]n}||dd \} } }||ddd \}}}| |kr|||j| j||dn |||q^Wdn1s0Yt||r |q||j|j|t |jd|t |jd|t |jd|j|t |jddS) NrrrNr(freeoccupiedcss|] }|jVqdSrrV)rarenarrrrl:rz&_TestHeap.test_heap..rU)rrrrZ_DISCARD_FREE_SPACE_LARGER_THANrrrandomlognormvariaterrs randrangerrZ _len_to_seqr7Z_arenasindexZ_allocated_blocksrrVsumsortrVshufflerfZ_n_freesZ _n_mallocsZ_pending_free_blocks)r=Z iterationsZ maxblocksZblocksrrrVrSrrrrrrr=Z arena_blocksZnarenaZnstartZnstoprrr test_heaps`          0  z_TestHeap.test_heapcCsxtst|tjt}|jtjg|RtdtdD](}tj d}tj d}||_ ||_ qJdS)NrrrN) r isenabledenablerdisable get_threshold set_thresholdrrrrZbuddy)r=Z thresholdsrrRrSrrrtest_free_from_gcTs     z_TestHeap.test_free_from_gc) rFrGrHr[rrrrrrrrrrs   @rc@s"eZdZdefdefdefgZdS)_Foor1r2zN)rFrGrHr.r/r0Z_fields_rrrrrnsrc@s>eZdZdZddZeddZdddZd d Zd d Z d S)_TestSharedCTypesr?cCsts|ddSr3r4r_rrrrysz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|D]}||d9<q`dSr)rWr1r2rrs)rr1r2rrrTstringrrrr_double}sz_TestSharedCTypes._doubleFc Cstdd|d}ttd|d}ttd|d}ttdd|d}|jdttd |d}|jd d |d}td |_|j |j ||||||fd }d|_ | | ||jd||jd||jd||jd||jdtd D]} ||| | dq||jtddS)NrrgrAgUUUUUU?r/rUrr,rrerrrTgUUUUUU?r0ra@Z hellohello)rr/r0rrRrrr rWr|rrprrrVrPr1r2) r=rr1r2rrrTrrrrrrtest_sharedctypess&  z#_TestSharedCTypes.test_sharedctypescCs|jdddS)NTrA)rr_rrrtest_synchronizesz"_TestSharedCTypes.test_synchronizecCsTtddd}t|}d|_d|_d|_||jd||jd||jddS)Nr@r/r)rr r1r2rrVrP)r=rrrrr test_copys z_TestSharedCTypes.test_copyN)F) rFrGrHr[rr1rrrrrrrrrus rz&requires multiprocessing.shared_memoryc@seZdZdZeddZddZee j dkddd Z d d Z ee jd kd ddZee jd kdddZddZddZddZddZdS)_TestSharedMemoryr?cCs8t|trt|}n|}||jdt|<|dSr)rr;r SharedMemoryrrsr)Zshmem_name_or_objZ binary_dataZ local_smsrrr!_attach_existing_shmem_then_writes   z3_TestSharedMemory._attach_existing_shmem_then_writecCs|ttSr)r;r3ru)r=prefixrrr _new_shm_namesz_TestSharedMemory._new_shm_namer#ztest is broken on Windowsc s|d}tj|ddd}||j||j|||jd|t |j |jd|j d<||j ddt|}||j dd| tj|d|jd}| |jd|j| | ttjdd dWdn1s0Y| ttjd d Wdn1s,0Ytjd }tj|d |dg}fdd|D}||_tjddd}||j||j|d||_tjddd}||j||j|dWdn1s0Ytjr|d} tj| ddd} | tXz<|| jdt| } | | | W| n | 0Wdn1s0Y| t tj|ddd} Wdn1s0YtjrGdddtj} | |}||j|j| | t"td}|Wdn1s40Y| | ttjddd}Wdn1sv0Y| ttjddd}Wdn1s0Y| ttjdd }Wdn1s0YdS)NZ test01_tsmbTcreaterVrrrrFrz,multiprocessing.shared_memory._make_filenameZ test01_fnZ test02_fncsg|] }|qSrrrZ NAME_PREFIXrrrrz?_TestSharedMemory.test_shared_memory_basics..rNZtest01_dblunlinkrc@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics..OptionalAttachSharedMemoryN)rFrGrHr3rPO_RDWRZ_flagsrrrrOptionalAttachSharedMemory!srZtest01_nottherer2)rr rrrDrVrrrVrsrrrrr6r7mockZpatchZ_SHM_NAME_PREFIXZ side_effect_nameZ _USE_POSIXFileNotFoundErrorFileExistsError)r=Z name_tsmbsmsZalso_smsZsame_smsZmock_make_filenamenamesZshm1Zshm2Zname_dblunlinkZsms_unoZsms_duoZthere_can_only_be_one_smsrZok_if_exists_smsZnonexisting_smsZ sms_invalidrrrtest_shared_memory_basicss     , ,  2    4 &  ( . . z+_TestSharedMemory.test_shared_memory_basicscCstjddd}||j|j|j|jdfd}d|_|| | t |j ddd|j|j|dfd}d|_|| | t |j ddd| dS)NTrrshowdyrrbsHELLO)r rrrDr|rrrprrrVrrrr)r=rrrrr#test_shared_memory_across_processes;s& z5_TestSharedMemory.test_shared_memory_across_processesrz#not feasible in non-posix platformscCstj}||td}t|jj t j |td}| t "ttt j Wdn1sr0Y|dSr)rmanagersSharedMemoryManagerr ShareableListrr3rrrrr.rrrur)r=smmslZsl2rrr4test_shared_memory_SharedMemoryServer_ignores_sigintWs  0zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlycCs(d}tjjd|\}}}||dS)Nzif 1: from multiprocessing.managers import SharedMemoryManager smm = SharedMemoryManager() smm.start() sl = smm.ShareableList(range(10)) smm.shutdown() r)rrrrr~rrrr>test_shared_memory_SharedMemoryManager_reuses_resource_trackeros zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc stj|tjddWdn1s60YfddtddD}fddtdd d D}tj |d j j d }| t |dtj|d j d }|t |jd|d j }tjd kr|ttj|d }Wdn1s0Ytj.}| d}|jd d} |j j }Wdn1sX0Ytjd kr|ttj |d } Wdn1s0YdS)Nr^rcsg|]}t|qSr)rrrZsmm1rrrrzS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics..rbrcsg|]}j|dqS)r)r)rr)rrrrrr-rrr#howdy)rrrrr6rrrr rshmrrVrsrrrrrr) r=ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z held_nameZ absent_shmZsmm2rrZ absent_slrrr-test_shared_memory_SharedMemoryManager_basicss,  *   ,   (  z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc Cstgd}||jj||jd|t|dt `t d| t | dWdn1sx0Y|| ddWdn1s0Y||dd ||d d |t|dd |d<||dd d |d<||dd ||jd|t dd|d<Wdn1sL0Y||dd d|d<||dd||dd|t dd|d<Wdn1s0Y||dd|t dd|d<Wdn1s0Y||ddt Pt d||d d||dd||ddWdn1sz0Y|d}tj||d}z||jj|jj|||jj|t|t|||j|jd|d<||dd||dd|jW|jn |j0tj|jjd}||jj|jjd|d<||dd|j|jt}z~|t|d||jd||dd| t | dWdn1s0Y|jW|jn |j0dS) N)rHoWdYgX9vqrNTrz8s8sdqxxxxxx?xxxxxxxx?qrgignoreZ100rrUrrrTrZsomerfz8s8sdq8sxxxxxxx?qzexceeds available storagez far too manyuencodésrNru encodéess 123456789rsadiosZtest03_duplicaterMr2ipr8any)r rrrrDrVrkrswarningscatch_warnings simplefilterrr6rr*rrrrrrr)r=rZname_duplicateZsl_copyZ sl_tetheredZempty_slrrr'test_shared_memory_ShareableList_basicss   (0(((  2     * z9_TestSharedMemory.test_shared_memory_ShareableList_basicscCsttd}||jjt|}t|}| t |tj| |dd| ||ud|d<| |dddt |jj}ttd}||jjt|}| t |t |k|j|j|jdS)Nrr2r^changedrfrRi)r rrrrrDpickledumpsloadsrnrr~rVrsrr)r=rZ serialized_slZdeserialized_slrZ larger_slZserialized_larger_slrrr)test_shared_memory_ShareableList_picklings&      z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc Csd}tjtjdd|gtjtjd}|j}| | t t j}d}t |krt |t|dd}ztj|dd }WqXtyYqYqX0qXtd tjd krtd |d |j}|d|Wdn1s0YdS)NaXif 1: import os, time, sys from multiprocessing import shared_memory # Create a shared_memory segment, and send the segment name sm = shared_memory.SharedMemory(create=True, size=10) sys.stdout.write(sm.name + '\n') sys.stdout.flush() time.sleep(100) -Errr"rrbFrzJA SharedMemory segment was leaked after a process was abruptly terminated.r/r z[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown) subprocessPopenr executablePIPEr readlinestripdecoderr%r?r@rrrminr rrrr3rr unregisterr!rGr)r=rrrdeadlinerCrrJrrr4test_shared_memory_cleaned_after_process_terminations4      zF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rFrGrHr[rrrr7rZrrrrr3rrrrrrrrrrrrs  x  `rc@s<eZdZdZddZddZeddZdd Zd d Z d S) _TestFinalizer?cCstj|_tjdSr)r_finalizer_registryr registry_backuprr_rrrrUs z_TestFinalize.setUpcCs&t|tjtj|jdSr)rrr~rrupdaterr_rrrrYs z_TestFinalize.tearDownc Cs&Gdddt}|}tj||jdd~t|}tj||jdd}||~t|}tj||jdd|}tj||jddd |}tj||jd d d |} tj| |jd d d |} tj| |jd d d tjd|jddd tjd|jddd t|t d dS)Nc@s eZdZdS)z)_TestFinalize._test_finalize..FooNrrrrrr`sr)rRr)rS)re)d10rN)rA exitpriority)d01r)d02)d03ri)STOPi) rrFinalizerrr_exit_functionrr3_exit) rr&rrRrSZclose_brerrrrrrr_test_finalize^s4z_TestFinalize._test_finalizecCs^|\}}|j|j|fd}d|_||ddt|jdD}||gddS)NrTcSsg|]}|qSrr)rryrrrrrz/_TestFinalize.test_finalize..r)rRrSrrrrr) rr|r rprrr7rrV)r=r&r5rrrrr test_finalizes z_TestFinalize.test_finalizec s ddGfdddtddfdd}fdd }t}t}ztd td d d tj|d tj|d g}t j |t d dWdn1s0YdurʈWt|tj|tnt|tj|t0dS)NcSsdSrrrrrrcbsz,_TestFinalize.test_thread_safety..cbcseZdZfddZdS)z-_TestFinalize.test_thread_safety..Foocs"||_tj|tddddS)NrNr)r)rrrrrandintr_r rrr>sz6_TestFinalize.test_thread_safety..Foo.__init__N)rFrGrHr>rrrrrsrFc sRsNttdz tWqtyJ}z|WYd}~qd}~00qdSr)r?rrr_run_finalizersrr)rfinishrrrun_finalizerss  z8_TestFinalize.test_thread_safety..run_finalizersc sdi}s`z$fddtdD|td<Wqty\}z||WYd}~qd}~00qdS)Ncsh|] }qSrrr)rrr rzL_TestFinalize.test_thread_safety..make_finalizers..rrb)rr getrandbitsrr)r,r)rrrrrmake_finalizerss$z9_TestFinalize.test_thread_safety..make_finalizersgư>rbryrT)rrgetswitchintervalrrsetswitchintervalrrrrrZ start_threadsr?rr)r=rrZ old_intervalZ old_thresholdrLr)rr rrrtest_thread_safetys2      "    z _TestFinalize.test_thread_safetyN) rFrGrHr[rrr1r r rrrrrrQs ' rc@seZdZddZddZdS)_TestImportStarcCshddl}tjtj}tj||d}||}dd|D}dd|D}|d| d|S)Nrz*.pycSs(g|] }tjtj|ddqS)rNr)r3pathsplitextsplit)rrIrrrrrz4_TestImportStar.get_module_names..cSsg|] }d|qS)zmultiprocessing.r)rrrrrrrzmultiprocessing.__init__r) globr3rdirnamer__file__rescaperr)r=rZfolderpatternfilesmodulesrrrget_module_namess   z _TestImportStar.get_module_namescCs|}tjdkr2|d|d|dn|dtsJ|dtdur\|d|D]N}t|tj|}|t |d||j D]}|t ||d||fqq`dS) Nr#zmultiprocessing.popen_forkz multiprocessing.popen_forkserverz!multiprocessing.popen_spawn_posixz!multiprocessing.popen_spawn_win32zmultiprocessing.sharedctypes__all__z%r does not have attribute %r) r$rrrrnr.rr#rnrr%)r=r#rmodattrrrr test_imports&          z_TestImportStar.test_importN)rFrGrHr$r(rrrrrs rc@s,eZdZdZddZeddZddZdS) _TestLoggingr?cCsDt}|tj||du|d|d|tdS)Nzthis will not be printedz nor will this) r get_loggersetLevelr SUBWARNINGrndebuginfo LOG_LEVEL)r=loggerrrrtest_enable_loggings    z _TestLogging.test_enable_loggingcCst}||dSr)rr*rgetEffectiveLevel)rr&r0rrr _test_levelsz_TestLogging._test_levelc Csd}d}t}t}|j}tjdd\}}|||j|j|fd}| | || | | |tj|||j|j|fd}| | || | | |||jtddS)Nr-%Frr)level)rr*logging getLoggerr5rr+r|r3rrVrrrNOTSETr/) r=ZLEVEL1ZLEVEL2r0Z root_loggerZ root_levelrJrKrrrr test_levels*    z_TestLogging.test_levelN)rFrGrHr[r1r1r3r9rrrrr)s  r)c@s6eZdZdZeddZeee ddddZ dS) _TestPollEintrr?cCstdt|tjdSr)r?rr3rrSIGUSR1)rrrrr_killer@s z_TestPollEintr._killerr;requires SIGUSR1c sdgfdd}t}ttj|}z|j|j|fd}|z,|jtjdd}|| W| n | 0| d| |j dWttj|nttj|0dS)NFcs dd<dS)NTrrrZ got_signalrrrecordHsz._TestPollEintr.test_poll_eintr..recordr)rr) r3rurr;r|r<rr?rrrnrVrv)r=r?rZ oldhandlerZkillerrrr>rtest_poll_eintrEs  z_TestPollEintr.test_poll_eintrN) rFrGrHr[r1r<r7r2rrr@rrrrr:<s  r:c@s eZdZeedddZdS)TestInvalidHandleskipped on Windowsc Cs^tjd}z.z |Wnttfy0Yn0Wd|_nd|_0|ttftjjddS)NiMr2)rrr Connectionrr6r4_handlerrgrrrtest_invalid_handles`s   z&TestInvalidHandle.test_invalid_handlesN)rFrGrHr7rZWIN32rErrrrrA^s rAc@seZdZddZddZdS) OtherTestcCs,Gdddt}|tjtjj|ddS)Nc@seZdZddZddZdS)zFOtherTest.test_deliver_challenge_auth_failure.._FakeConnectioncSsdS)Nsomething bogusrr=rVrrrr:vszQOtherTest.test_deliver_challenge_auth_failure.._FakeConnection.recv_bytescSsdSrrr=r[rrrr<xszQOtherTest.test_deliver_challenge_auth_failure.._FakeConnection.send_bytesN)rFrGrHr:r<rrrr_FakeConnectionusrKabc)rrrAuthenticationErrorrrdeliver_challenger=rKrrr#test_deliver_challenge_auth_failurets z-OtherTest.test_deliver_challenge_auth_failurecCs,Gdddt}|tjtjj|ddS)Nc@s$eZdZddZddZddZdS)zEOtherTest.test_answer_challenge_auth_failure.._FakeConnectioncSs d|_dSr)rr_rrrr>szNOtherTest.test_answer_challenge_auth_failure.._FakeConnection.__init__cSs2|jd7_|jdkr tjjS|jdkr.dSdS)NrNrrHr)rrrr CHALLENGErIrrrr:s   zPOtherTest.test_answer_challenge_auth_failure.._FakeConnection.recv_bytescSsdSrrrJrrrr<szPOtherTest.test_answer_challenge_auth_failure.._FakeConnection.send_bytesN)rFrGrHr>r:r<rrrrrKsrKrL)rrrrMrranswer_challengerOrrr"test_answer_challenge_auth_failure~s  z,OtherTest.test_answer_challenge_auth_failureN)rFrGrHrPrSrrrrrGqs rGcCs|jd7_dSrM)r)nsrrr initializersrUc@s,eZdZddZddZddZddZd S) TestInitializerscCs"t|_|j|_d|j_dSr)rManagermgrrrTrr_rrrrs  zTestInitializers.setUpcCs|j|jdSr)rXrrr_rrrrs zTestInitializers.tearDowncCsNtj}|t|jd|t|jf||jj d| | dSrM) rr SyncManagerr TypeErrorrrUrTrVrrr)r=rrrrtest_manager_initializers  z)TestInitializers.test_manager_initializercCsH|jttjddtdt|jf}||||jj ddS)NrN)rU) rrZrrrUrTrrrVrrrrrtest_pool_initializers z&TestInitializers.test_pool_initializerN)rFrGrHrrr[r\rrrrrVsrVcCs*z|jdd}Wntjy$Yn0dS)NF)block)rrirr)rditemrrr_this_sub_processsr_cCs2t}tjt|fd}d|_||dSr)rrr|r_rprr)rZsubProcrrr _test_processs r`cCs||Srrrrrr_afuncsracCs0tjdd}|tgd}||dS)Nrfr?)rNrrUrfrbrarg)rrrrarr)rr1rrrpool_in_processs rbc@s0eZdZddZeddZddZddZd S) _file_likecCs||_d|_dSr) _delegate_pid)r=Zdelegaterrrr>sz_file_like.__init__cCs$t}||jkr||_g|_|jSr)r3rure_cacherrrrcaches  z_file_like.cachecCs|j|dSr)rgrrJrrrrsz_file_like.writecCs|jd|jg|_dS)Nr8)rdrrrgrfr_rrrflushsz_file_like.flushN)rFrGrHr>propertyrgrrhrrrrrcs  rcc@s$eZdZddZddZddZdS)TestStdinBadfiledescriptorcCs tjtd}||dSNry)rr|r`rr)r=rrrrtest_queue_in_processs z0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd}||dSrk)rr|rbrrrrrrtest_pool_in_processs z/TestStdinBadfiledescriptor.test_pool_in_processcsJt}t|dtjfddd}|dksFJdS)NrcsSr)rhrZflikerrrrz:TestStdinBadfiledescriptor.test_flushing..ry)rrrcrrr|rhr)r=siorrrnr test_flushings  z(TestStdinBadfiledescriptor.test_flushingN)rFrGrHrlrmrprrrrrjsrjc@sleZdZeddZdddZeddZddd Zd d Zd d Z ddZ eddZ ddZ ddZ dS)TestWaitcCsBtdD],}|r"ttd||tfq|dS)Nrr")rr?rrrr3rur)rrLslowrrrr_child_test_waits  zTestWait._child_test_waitFc sddlm}g}gg}tdD]^}tjdd\}}tj|j||fd}d|_|| | | || |j q |r||D]@}z | } Wn$ty||| Yq0| | qq|tfdd td D} ||| dS) Nrr$rfFrrTc3s"|]}D]}||jfVq qdSrr)rrrrrrrlrz%TestWait.test_wait..r)multiprocessing.connectionr%rrrr|rsrprrrrrrrGrrrnrV) r=rrr%readersmessagesrrArLrr=rrrtr test_waits0        zTestWait.test_waitcCsVt}||tdD].}|r4ttd|d|dq|dS)Nrr"%s r) rr)rr?rrrr r)rr'rrr rrrr_child_test_wait_sockets  z TestWait._child_test_wait_socketcCs2ddlm}ttjdf}|}g}g}i}tdD]<}tj |j ||fd} d| _ | | | || jq8tdD]"}|\} } | | g|| <q~||r||D]4} | d} | s|| | q||  | qqddd td Dd } |D]}|d || qdS) Nrr$rfrTr-r8css|]}d|VqdS)ryNrrrrrrlFrz,TestWait.test_wait_socket..rrr)rur%rrrr/rrrr|rzrprrrrrxrrrr r7rV)r=rrr%r|r6rvrZdicrrrArr=rvrrrtest_wait_socket's:            zTestWait.test_wait_socketcCs|ddSr)rxr_rrrtest_wait_slowJszTestWait.test_wait_slowcCs|ddSr)r|r_rrrtest_wait_socket_slowMszTestWait.test_wait_socket_slowcCsddlm}d}t\}}t}|||g|}t|}||g|||d|||d| dt}|||gd}t|}|||g||ddS)Nrr$rbrr r皙?) rur%rrr?r@rVrrr)r=r%rrRrSrrXrrrrtest_wait_timeoutPs      zTestWait.test_wait_timeoutcCs|t|dSr)rr?r)rrZperiodrrrsignal_and_sleepgszTestWait.signal_and_sleepc Csddlm}d}dd}td}t\}}tj|j||fd}|||j t | |j ddt }|||j |g|d} t |} || |j g|| |d || |d |dt }|||j |gd} t |} ||| ||j |g|| d |dt }|||j |gd} t |} ||| |||j |g|| d ||dS) Nrr$rUcSst|dddS)NcSst|Sr)rrrrrrprz>TestWait.test_wait_integer....)r)rn)r|rrrrprz,TestWait.test_wait_integer..rrrrr)rur%rrrr|rrrqrrrnrr?r@rVrrrrr) r=r%rZsorted_rrRrSrrrXrrrrtest_wait_integerls>          zTestWait.test_wait_integercCsfddlm}t\}}t}||gdd}t|}||g||d||dS)Nrr$r2rrN) rur%rrr?r@rVrr)r=r%rRrSrCrXrrrtest_neg_timeouts     zTestWait.test_neg_timeoutN)F)F)rFrGrHr1rsrxrzr|r}r~rrrrrrrrrqs   # +rqc@s4eZdZeedddZeedddZdS)TestInvalidFamilyrBcCs:|ttjdWdn1s,0YdS)Nz\\.\testrr6rrrrtr_rrrtest_invalid_familys z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCs:|ttjdWdn1s,0YdS)Nz/var/test.piperr_rrrtest_invalid_family_win32s z+TestInvalidFamily.test_invalid_family_win32N) rFrGrHr7rZrFrr2rrrrrrs   rc@s,eZdZeddZeddZddZdS) TestFlagscCs|ttjdSr)rr*rflagsrr&rrrrun_in_grandchildszTestFlags.run_in_grandchildcCsrddl}tjdd\}}tj|j|fd}||}|||t t j |f}t | |dS)NrFrr)jsonrrr|rrrrrr*rrprintr)rrrArLrgrandchild_flagsrrrr run_in_childszTestFlags.run_in_childcCsHddl}d}ttjdddd|g}||d\}}|||dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()rz-Sz-Orr)rr check_outputrrrrrV)r=rprogr[Z child_flagsrrrr test_flagsszTestFlags.test_flagsN)rFrGrHr1rrrrrrrrs   rc@s eZdZeddZddZdS) TestTimeoutscCs>td|d|tj|}|d|dS)NrNr~r)r?rrrrrrrw)rchildr'r&rrr _test_timeouts     zTestTimeouts._test_timeoutc Cst}ztdtjdd\}}tjjdd}tj|j||j fd}| | | | d| |}| | d| | t|Wt|n t|0dS) Nr"TrAF_INETrprr~r)rgetdefaulttimeoutsetdefaulttimeoutrrrrrtr|rr'rrrVrrxr)r=Z old_timeoutparentrr|rr&rrrrs$  zTestTimeouts.test_timeoutN)rFrGrHr1rrrrrrrs rc@seZdZddZdS)TestNoForkBombcCst}tjtjtd}|dkrVtjj ||\}}}| |d| d|n2tjj ||\}}}| |d| |ddS)Nzmp_fork_bomb.pyrrs RuntimeErrors123)rrr3rrrrrrrZassert_python_failurerVrrrW)r=rrrrrJrrrtest_noforkbombs zTestNoForkBomb.test_noforkbombN)rFrGrHrrrrrrsrc@s eZdZeddZddZdS)TestForkAwareThreadLockcCsV|dkr:tj|j|d|fd}||t|n|ttj |dS)NrNr) rr|rrrrrrsr_afterfork_registry)rrr&rrrrrs zTestForkAwareThreadLock.childcCsdtd\}}t}ttj}tj|jd|fd}|| | }t || ||dS)NFrbr) rrrForkAwareThreadLockrsrr|rrrrrZassertLessEqual)r=rArLr|Zold_sizerZnew_sizerrrrs z!TestForkAwareThreadLock.test_lockN)rFrGrHr1rrrrrrr s rc@s0eZdZddZddZeddZddZd S) TestCloseFdscCsZtrtSt}g}|dkr>||t|}q |D]}t|qB|SdS)Nr)rFrdetachrr3dupr)r=rRto_closer1rrrget_high_socket_fd*s     zTestCloseFds.get_high_socket_fdcCs,trtjtjtj|dn t|dS)N)r@)rFrr SOCK_STREAMrr3)r=rRrrrr<szTestCloseFds.closec Cs\zt|tjtj}Wn.tyD}z||WYd}~nd}~00||ddSr)rfromfdrrrrr)rr&rRr rrrr_test_closefdsBs  zTestCloseFds._test_closefdsc Cststdt\}}|}zRtj|j||fd}|| | }t |W| || | n| || | 0t dkr| |dn.d}||t||jtjkp|j|k|dS)Nzrequires fd picklingrri6')rnr7r8rrrr|rrrrrrrrqr4rnr5rUwinerror)r=rJrKrRrrZ WSAENOTSOCKrrr test_closefdLs2         zTestCloseFds.test_closefdN)rFrGrHrrr1rrrrrrr(s  rc@sfeZdZeejejZeddZ e e e ddddZeddZe e e ddd d Zd S) TestIgnoreEINTRcCsFdd}ttj||d|}|||d|jdS)NcSsdSrrr,framerrrrqsz-TestIgnoreEINTR._test_ignore..handlerreadyx)rr;rrr< CONN_MAX_SIZE)rr&rr1rrr _test_ignoreos   zTestIgnoreEINTR._test_ignorer;r=cCst\}}ztj|j|fd}d|_||||dt dt |j tjt d|d||dt dt |j tj||d|jt d|W|n |0dS)NrTrr"ir)rrr|rrprrrVrr?rr3rrrr;rr:rrrirrr test_ignoreys(       zTestIgnoreEINTR.test_ignorecCsbdd}ttj|tj.}||j|}|dWdn1sT0YdS)NcSsdSrrrrrrrsz6TestIgnoreEINTR._test_ignore_listener..handlerwelcome)rr;rrrrtrr'rx)rr&rr|rRrrr_test_ignore_listeners   z%TestIgnoreEINTR._test_ignore_listenercCst\}}ztj|j|fd}d|_|||}t dt |j t jt dtj|}||d|W|n |0dS)NrTr"r)rrr|rrprrrr?rr3rrrr;rrrwrVr)r=r&r5rr'ryrrrtest_ignore_listeners      z$TestIgnoreEINTR.test_ignore_listenerN)rFrGrHmaxrZ PIPE_MAX_SIZEZ SOCK_MAX_SIZErr1rr7r2rrrrrrrrrrjs   rc@s@eZdZeddZddZddZddZd d Zd d Z d S)TestStartMethodcCs|tdSr)rrrrrrr_check_contextszTestStartMethod._check_contextcCs^|jdd\}}|j|j|fd}|||}|||||dS)NFrr) rr|rrrrrrVr)r=rrArLrZ child_methodrrr check_contextszTestStartMethod.check_contextc Cs~dD]t}zt|}Wnty,YqYn0|||||||t|jd|t|jd||qdS)Nrrr'r) rrr6rVrrrset_start_methodr)r=methodrrrrrs  zTestStartMethod.test_contextc Csttd}t}zdD]}ztj|ddWntyHYqYn0|t|t}||||t |j |||j j ||t|d7}qWtj|ddntj|dd0||ddS)NrrTforcerN)rset_forkserver_preloadPRELOADrrr6rVrrnrrFlower startswithr|rr)r=rZ old_methodrrrrr test_set_gets(      zTestStartMethod.test_set_getcCs\t}tjdkr"||dgn6||ddgkpT|ddgkpT|gdkpT|gdkdS)Nr#rrr)rrr')rget_all_start_methodsrrrVrn)r=methodsrrr test_get_alls    zTestStartMethod.test_get_allcCstdkr|dtjtjtd}tj j |\}}}| }| }| dksd|dkr~t|t||ddS)Nr'z*test only relevant for 'forkserver' methodz mp_preload.pyokr8z(failed spawning forkserver or grandchild)rrrjr3rrrrrrrrrrWrr)r=rrrrJrrrtest_preload_resourcess  z&TestStartMethod.test_preload_resourcesN) rFrGrHr1rrrrrrrrrrrs    rrcc@sHeZdZddZddZddZddZd d Zed d Z d dZ dS)TestResourceTrackerc Csd}tjD]}|j|d|dkr6Wdq t\}}tjtjdd|j ||dg|gtj d}t |t |dd d 4}| d }| d }Wdn1s0Yt||||ttj} t| krbtd zt||Wqty^} z0|| jtjtjfWYd} ~ qrWYd} ~ qd} ~ 00qtd |d|jd} |j d |} | | | | | d|Wdq 1s0Yq dS)Na+if 1: import time, os, tempfile import multiprocessing as mp from multiprocessing import resource_tracker from multiprocessing.shared_memory import SharedMemory mp.set_start_method("spawn") rand = tempfile._RandomNameSequence() def create_and_register_resource(rtype): if rtype == "semaphore": lock = mp.Lock() return lock, lock._semlock.name elif rtype == "shared_memory": sm = SharedMemory(create=True, size=10) return sm, sm._name else: raise ValueError( "Resource type {{}} not understood".format(rtype)) resource1, rname1 = create_and_register_resource("{rtype}") resource2, rname2 = create_and_register_resource("{rtype}") os.write({w}, rname1.encode("ascii") + b"\n") os.write({w}, rname2.encode("ascii") + b"\n") time.sleep(10) )r Znooprr)rLr )pass_fdsr!r`TrMrr zA z= resource was leaked after a process was abruptly terminated.zutf-8z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!rrrXr3piperrrrrkrrrFrrWrr!rr%r?r@rrrr4rr5ENOENTEINVALrr!rGZ assertRegex) r=rr rArLrrIZname1Zname2rrrJrrrrtest_resource_trackersJ   0  &   z)TestResourceTracker.test_resource_trackerc Csdddlm}|j}|dur:t|tjtj|tj dt "t d| Wdn1sj0Y|j}t||t dtd}t j dd}t d |}||t|}~t|||r0|t|d |d} |t| jt|d t| j vn|t|dWdn1sV0YdS) Nr_resource_tracker)rvrr rT)r?alwaysrNzresource_tracker: process died)! multiprocessing.resource_trackerrrer3rrrrZ wait_processrrrr+r?rrrrrrrrrrrrVrsrn issubclasscategory UserWarningr;message) r=r,Z should_dierrrZall_warnrrZthe_warnrrrcheck_resource_tracker_deathCs:   &      z0TestResourceTracker.check_resource_tracker_deathcCs|tjddSr)rrr.r_rrrtest_resource_tracker_siginthsz0TestResourceTracker.test_resource_tracker_sigintcCs|tjddSr)rrrr_rrrtest_resource_tracker_sigtermlsz1TestResourceTracker.test_resource_tracker_sigtermcCs|tjddSr)rrrr_rrrtest_resource_tracker_sigkillpsz1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}||jd|fv}||M}||dS)Nrr)rrr+reZ _check_aliver)r&rrZreusedrrr_is_resource_tracker_reusedts   z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}||j}tjdd\}}tj|j||fd}|| }| | | | |dS)NrrFrr) rrr+rerrr|rrrrrrn)r=rrrArLrZis_resource_tracker_reusedrrrtest_resource_tracker_reused~s z0TestResourceTracker.test_resource_tracker_reusedN) rFrGrHrrrrrrrrrrrrrsJ% rc@s8eZdZeddZddZddZejj ddZ d S) TestSimpleQueuecCs@|z(||||W|n |0dSr)r%rcrZrrorrr _test_emptys zTestSimpleQueue._test_emptycCst}t}t}tj|j|||fd}d|_|||| | | || | d| | d|||dS)NrTF)r SimpleQueuerr|rrprrnrZrr%r~rVrr)r=rrbrcrrrr test_emptys"zTestSimpleQueue.test_emptycCst}||dSr)rrrr=rrrrrszTestSimpleQueue.test_closecCs0t}|||jj||jjdSr)rrrrn_readerrm_writerrrrr test_closedszTestSimpleQueue.test_closedN) rFrGrHr1rrrrrZ cpython_onlyrrrrrrs  rc@seZdZddZdS)TestPoolNotLeakOnFailurecsdgGfddd}|td:tjjdtjj|dd}|| Wdn1sh0Y| t dd DdS) NrUcs<eZdZfddZfddZddZddZd d Zd S) zRTestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcesscs d|_d|_d|_|dS)Nz Fake Process)rrvrr)r=r)forked_processesrrr>sz[TestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.__init__cs"dkrtdd8d|_dS)NrManually induced OSErrorrNr)r4rr_) will_fail_inrrrszXTestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.startcSs d|_dS)Nstoppingrr_rrrrsz\TestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.terminatecSs|jdkrd|_dS)Nrstoppedrr_rrrrs zWTestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.joincSs|jdkp|jdkS)Nrrrr_rrrrosz[TestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.is_aliveN)rFrGrHr>rrrrorrrrrFailingForkProcesss   rrrb)r|)contextcss|]}|VqdSrr)rrrrrrlrzITestPoolNotLeakOnFailure.test_release_unused_processes..) rr4rrrr7rZ MagicMockrrr~r)r=rrrrrtest_release_unused_processess &z6TestPoolNotLeakOnFailure.test_release_unused_processesN)rFrGrHrrrrrrsrc@sdeZdZdZejjZddZddZ e ddZ e Z dd Z d d Ze d d ZddZe ddZdHddZe ddZdIddZe ddZdJddZddZe d d!Zd"d#Ze d$d%Zd&d'Ze d(d)Zd*d+Ze d,d-ZdKd/d0Zd1d2Z e d3d4Z!d5d6Z"e d7d8Z#d9d:Z$e d;d<Z%d=d>Z&e d?d@Z'dAdBZ(e dCdDZ)dEdFZ*dGS)LTestSyncManagerTypesa}Test all the types which can be shared between a parent and a child process by using a manager which acts as an intermediary between them. In the following unit-tests the base type is created in the parent process, the @classmethod represents the worker process and the shared object is readable and editable between the two. # The child. @classmethod def _test_list(cls, obj): assert obj[0] == 5 assert obj.append(6) # The parent. def test_list(self): o = self.manager.list() o.append(5) self.run_worker(self._test_list, o) assert o[1] == 6 cCs||_|jd|_dSr) manager_classrKrrr_rrrrs  zTestSyncManagerTypes.setUpcCsB|jdur(|jr(|j|j|jd|_d|_dSr)rrorrrKrr_rrrr s    zTestSyncManagerTypes.tearDowncCs tdSr)r reap_childrenrrrrrszTestSyncManagerTypes.setUpClasscCsxt|jt}d}ttdkrtt||d9}t|}|dkrdtj _ t dtd|dqtqdS) NrrNrrT"multiprocessing.Manager still has  active children after  seconds) rrr?r@rsrrrrrenvironment_altered print_warning)r= start_timerCrrrrwait_proc_exits    z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd|_d|j_|j|||jjddS)NrTr)rr|rrprrrVrv)r=Zworkerryrrr run_worker+s  zTestSyncManagerTypes.run_workercCs*|s J|||ddSNr)rr%rrryrrrr2s z TestSyncManagerTypes._test_eventcCs:|j}|||j||r,J|ddSr)rKrrrrrr%r=rrrrr9s   zTestSyncManagerTypes.test_eventcCs |dSrrrrrr _test_lock@szTestSyncManagerTypes._test_lockrcCs6t|j|}||j|||t|jdSr)r"rKrrrrrr=ZlnamerrrrrDszTestSyncManagerTypes.test_lockcCs||dSrrrrrrr _test_rlockJsz TestSyncManagerTypes._test_rlockcCs t|j|}||j|dSr)r"rKrrrrrrrOszTestSyncManagerTypes.test_rlockcCs |dSrrrrrrrSsz$TestSyncManagerTypes._test_semaphorercCs(t|j|}||j||dSr)r"rKrrr)r=snamerrrrrWsz#TestSyncManagerTypes.test_semaphorecCs|jdddS)Nr)r)rr_rrrr\sz+TestSyncManagerTypes.test_bounded_semaphorecCs||dSrrrrrr_test_condition_sz$TestSyncManagerTypes._test_conditioncCs|j}||j|dSr)rKrrrrrrrtest_conditionds z#TestSyncManagerTypes.test_conditioncCs|jdksJ|dSra)rrrrrr _test_barrierhsz"TestSyncManagerTypes._test_barriercCs|jd}||j|dSra)rKrrrrrrrr ms z!TestSyncManagerTypes.test_barriercCs(|Wdn1s0YdSrrrrrr _test_poolqszTestSyncManagerTypes._test_poolcCs |jjdd}||j|dS)Nrfr?)rKrrrrrrr test_poolwszTestSyncManagerTypes.test_poolcCsd|dksJ|sJ|r(J|dks8J|rDJ|dksTJ|s`JdSNrrbra)r[r]rZrrrrr _test_queue{s   z TestSyncManagerTypes._test_queuercCsNt|j|d}|d|d||j||s>J|rJJdSr)r"rKrcrrrZr])r=Zqnamerrrr test_queues    zTestSyncManagerTypes.test_queuecCs|ddS)Nr|)rr_rrrtest_joinable_queuesz(TestSyncManagerTypes.test_joinable_queuecCst|ddksJ|ddks"J|ddks4J|||D]}qHt|dks^J|ddkspJdS)NrrbrN)rrrreversersrf)rryr1rrr _test_listszTestSyncManagerTypes._test_listcCs>|j}|d||j||r*J|t|ddS)Nrbr)rKrrrr rVrsrrrrr`s   zTestSyncManagerTypes.test_listcCst|dksJ|ddks J|ddks2Jt|dgksHJt|dgks^Jt|dgkstJ|ddiksJ|dksJdS)NrNrrb)rrb)rsrrrror7r popitemrrrr _test_dictszTestSyncManagerTypes._test_dictcCs<|j}d|d<||j||r(J|t|ddS)Nrbrr)rKrmrr rVrsrrrrrqs  zTestSyncManagerTypes.test_dictcCs,|jdksJ|dksJ|ddS)NrNr)rWrrrrrr _test_valuesz TestSyncManagerTypes._test_valuecCs>|jdd}||j|||jd||ddS)NrrNr)rKrrrrVrWrrrrrr>szTestSyncManagerTypes.test_valuecCsH|ddksJ|ddks Jt|dks0Jt|ddgksDJdS)NrrNr)rsrrrrr _test_arraysz TestSyncManagerTypes._test_arraycCs$|jdddg}||j|dS)NrrrN)rKrRrrrrrrrUszTestSyncManagerTypes.test_arraycCs |jdksJ|jdksJdSrrrrrr_test_namespacesz$TestSyncManagerTypes._test_namespacecCs(|j}d|_d|_||j|dSr)rKrr1r2rrrrrrrs z#TestSyncManagerTypes.test_namespaceN)r)r)r)r)+rFrGrHrrrrYrrrr1rrrrrrrrrrrrrrrrr rrrrr r r`r rqrr>rrUrrrrrrrsd                 rc@seZdZddZdS) MiscTestCasecCstj|ttjddgddS)NSUBDEBUGr,)extraZ blacklist)rZ check__all__rr%r_rrr test__all__s zMiscTestCase.test__all__N)rFrGrHrrrrrrsrc@s$eZdZeddZeddZdS) BaseMixincCstjjtjf|_dSr)rr _danglingr rdanglingrrrrrs zBaseMixin.setUpClasscCstjttjjt|jd}|r@dtj_t d|d}tt jt|jd}|rxdtj_t d|d}dS)NrTDangling processes: rNDangling threads: ) rrrrrrrrrrr)rrJrLrrrrs zBaseMixin.tearDownClassN)rFrGrHr1rrrrrrrs rc@seZdZdZejZejZeejZeej Z eej Z eej Z eej Z eej Z eejZeejZeejZeejZeejZeejZeejZeejZeejZeejZeejZeejZdS)rrJN)rFrGrHrirr|rrrrlrrrrrr|rrrrrrrrrRr:rQrrrrrs*                 rcs eZdZdZejZeedZ eedZ eedZ eedZ eedZ eedZeedZeed Zeed Zeed Zeed Zeed ZeedZeedZeddZefddZefddZZS) ManagerMixinrKz manager.Queuezmanager.JoinableQueuez manager.Lockz manager.RLockzmanager.Semaphorezmanager.BoundedSemaphorezmanager.Conditionz manager.Eventzmanager.Barrierz manager.Valuez manager.Arrayz manager.listz manager.dictzmanager.NamespacecOs|jj|i|Sr)rKr)rrArBrrrr$szManagerMixin.Poolcstt|_dSr)rrrrWrKrrrrr(s zManagerMixin.setUpClasscst}d}ttdkrjt||d9}t|}|dkr dtj_t dtd|dqjq t |j d krdtj_t d t |j |j |j d|_ tdS) NrrNrrTrrrrz5Shared objects which still exist at manager shutdown:)r?r@rsrrrrrrrrrrKZ_number_of_objectsZ _debug_inforrrr)rrrCrrrrr-s.      zManagerMixin.tearDownClass)rFrGrHrirr|rioperator attrgetterrr|rrrrrrrrrRrrmrr1rrrrrrrrrs, rc@seZdZdZejjZejjZeejj Z eejj Z eejj Z eejj Z eejj Z eejjZeejjZeejjZeejjZeejjZeejjZeejjZeejjZeejjZeejjZdS) ThreadsMixinrLN)rFrGrHrirdummyr|rrrrlrrrrr|rrrrrrrrrRrrrrrOs$              rc sT|d}t}hd}|D]\}}t|ts2qt|tr|turFqt|j|ks^J|j|jD]r}d||dd}||d} Gddd|| t j } |dkrt d | } || _ | _|| _| ||<qdqt|t j rGd dd|t} || _ | _|| _| ||<qddgdgfd d } fd d} | |d<| |d<dS)NrF>rJrLrKZWithrNMixinc@s eZdZdSz*install_tests_in_module_dict..TempNrrrrrTempvsr!rKr1c@s eZdZdSr rrrrrr!~scstttjtjjd<tjd<tjddd<ztj ddWn t ytt dYn0t jdrz t}Wntyt dYn0ttttdS) NrrNT) allow_nonerz start method not supportedlinuxz1OSError raises on RLock creation, see issue 3111!)rrrr_cleanuprr rrrr6r7r8rrrrr4r9r get_temp_dirr*r+r/rArold_start_method start_methodrr setUpModules&       z1install_tests_in_module_dict..setUpModulecsd}tjtjdddttjjtd}|rXd}dtj_t d|d}tt jtd}|rd}dtj_t d|d}|rt dtj dS) NFrTrrrNrr )rrrrrrrrrrrr?rr_cleanup_tests)Z need_sleeprJrL)rr'rrtearDownModules$  z4install_tests_in_module_dict..tearDownModuler)r+)globalsrrrrrIrr[ capitalizer7TestCaserrequires_hashdigestrFrHrGr) Z remote_globsr(rGZ local_globsZ ALL_TYPESrbasetype_Znewnamerr!r)r+rr&rinstall_tests_in_module_dictgs<        r2)r&)r7Z unittest.mockrrir?rrrr3rr5rrSrrr6rrrrrrZ test.supportrZtest.support.script_helperrrr import_modulerZ*skip_if_broken_multiprocessing_synchronizerrurZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrmultiprocessing.queuesrrHAVE_SEND_HANDLErn ImportErrorZmultiprocessing.sharedctypesrr rr Z HAS_SHMEMrYr rrrrr!r,r/rrOrkrlrmr"Z HAVE_GETVALUErrFr%r)r4rdrZctypesr-r.r/r0rr9r:rIr]r`rfr|r4r>r\r_r`rrrrrrrrrr+rMr[rrrrrr6rrrrrrrrrrrr r rregisterrrrrrr!r(r#r/r2r;r9ror|rr2rrrrrrr.rr)r:rArGrUrVr_r`rarbrcrjrqrrrrrrrrrZrrrrrrrrrr2rrrrs                    -WG6*39FS   j(C: 14 "0R h8 %{+E"!2 "BCH 3)k =