a 5êdgæã@s²ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZddlmZddlmZej d¡Ze ¡ddlZddl 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+y”dZ/Yn0zdd l!m0Z0d Z1Wne+yÂdZ1Yn0z ddl2Z2Wne+yèdZ2Yn0d d „Z3dd„Z4dd„Z5ej6dkr"ddl!m7Z7dd„Z8e'j9Z:dZ;dZZ?n d\Z=Z>Z?e@eddƒ ZAejBdkZCddl mDZDdd„ZEze Fd¡ZGWndZGYn0d d!gZHzdd"lImJZJmKZKmLZLmMZMWn$e+yàeNZJdZKZLZMYn0d#d$„ZOGd%d&„d&eNƒZPGd'd(„d(eNƒZQd)d*„ZRGd+d,„d,ƒZSGd-d.„d.eQƒZTGd/d0„d0e!jUƒZVGd1d2„d2eQƒZWd3d4„ZXd5d6„ZYGd7d8„d8eQƒZZGd9d:„d:eQƒZ[Gd;d<„d„d>eQƒZ]Gd?d@„d@eQƒZ^GdAdB„dBeNƒZ_dCdD„Z`GdEdF„dFeNƒZaGdGdH„dHeNƒZbGdIdJ„dJeQƒZcGdKdL„dLeQƒZdGdMdN„dNeQƒZeGdOdP„dPeQƒZfdßdRdS„ZgdTdU„ZhdVdW„ZidXdY„ZjGdZd[„d[eNƒZkGd\d]„d]elƒZmd^d_„ZnGd`da„daeQƒZodbdc„Zpddde„ZqGdfdg„dgeQƒZrGdhdi„dieQƒZsddjl$mtZtmuZumvZvGdkdl„dleNƒZwdmdn„ZxGdodp„dpeuƒZyGdqdr„dretƒZzezj{dsewdtezj{duewdvdwezj{dnexeydxGdydz„dzeQƒZ|e }¡Z~d{d|„ZGd}d~„d~etƒZ€e€j{d|edtGdd€„d€etƒZe {d|¡dZ‚Gd‚dƒ„dƒeQƒZƒe „d„¡Gd…d†„d†eQƒƒZ…e3d‡ƒZ†Gdˆd‰„d‰eQƒZ‡GdŠd‹„d‹eQƒZˆGdŒd„deQƒZ‰GdŽd„deQƒZŠe ‹e*d¡e „d„¡Gd‘d’„d’eQƒƒƒZŒGd“d”„d”eQƒZGd•d–„d–eJƒZŽGd—d˜„d˜eQƒZe ‹e1d™¡e „d„¡Gdšd›„d›eQƒƒƒZGdœd„deQƒZ‘GdždŸ„dŸej’ƒZ“Gd d¡„d¡eQƒZ”Gd¢d£„d£eQƒZ•Gd¤d¥„d¥ej’ƒZ–e „d„¡Gd¦d§„d§ej’ƒƒZ—d¨d©„Z˜e „d„¡Gdªd«„d«ej’ƒƒZ™d¬d­„Zšd®d¯„Z›d°d±„Zœd²d³„ZGd´dµ„dµeNƒZžGd¶d·„d·ej’ƒZŸGd¸d¹„d¹ej’ƒZ Gdºd»„d»ej’ƒZ¡Gd¼d½„d½ej’ƒZ¢Gd¾d¿„d¿ej’ƒZ£GdÀdÁ„dÁej’ƒZ¤GdÂdÄdÃej’ƒZ¥GdÄdÅ„dÅej’ƒZ¦GdÆdÇ„dÇej’ƒZ§GdÈdÉ„dÉej’ƒZ¨e ©ejBdkdÊ¡GdËdÌ„dÌej’ƒƒZªGdÍd΄dÎej’ƒZ«GdÏdЄdÐej’ƒZ¬e „d„¡GdÑdÒ„dÒej’ƒƒZ­GdÓdÔ„dÔej’ƒZ®GdÕdÖ„dÖeNƒZ¯Gd×dØ„dØe¯ƒZ°GdÙdÚ„dÚe¯ƒZ±GdÛdÜ„dÜe¯ƒZ²dÝdÞ„Z³dS)àéN)Úsupport)Úhashlib_helper)Ú socket_helperÚ_multiprocessing)Úutil)Ú reductionF)ÚValueÚcopyT)Ú shared_memorycCs | d¡S)NÚlatin)Úencode)Ús©rú6/usr/local/lib/python3.9/test/_test_multiprocessing.pyr Hsr cCs"t|tjjƒr| ¡| ¡dS©N)Ú isinstanceÚmultiprocessingÚqueuesÚQueueÚcloseÚ join_thread©ÚqueuerrrÚ close_queueLsrcCst |¡dSr)rr)ÚprocessrrrÚ join_processRsrÚposix)Úresource_trackercCstj||ƒdSr)rÚ_CLEANUP_FUNCS)ÚnameÚrtyperrrÚ_resource_unlink[sr!çš™™™™™¹?)g= ×£p=ê?gffffffÖ?gffffffö?)r"r"r"ZHAVE_BROKEN_SEM_GETVALUEÚwin32©ÚwaitcCs |dur|dkrd}t|g|ƒS)Nçr$)ÚhandleÚtimeoutrrrÚwait_for_handlewsr)Ú SC_OPEN_MAXéÚ__main__z$test.test_multiprocessing_forkserver)Ú StructureÚc_intÚc_doubleÚ c_longlongc CsRd}zt d¡}Wnttfy*YdS0|dks<||kr@dSt d|¡‚dS)Nr+ÚSC_SEM_NSEMS_MAXéÿÿÿÿzHThe OS doesn't support enough semaphores to run the test (required: %d).)ÚosÚsysconfÚAttributeErrorÚ ValueErrorÚunittestÚSkipTest)Z nsems_minZnsemsrrrÚcheck_enough_semaphoressÿr9c@seZdZdd„Zdd„ZdS)Ú TimingWrappercCs||_d|_dSr)ÚfuncÚelapsed)Úselfr;rrrÚ__init__¤szTimingWrapper.__init__cOs>t ¡}z |j|i|¤ŽWt ¡||_St ¡||_0dSr)ÚtimeÚ monotonicr;r<)r=ÚargsÚkwdsÚtrrrÚ__call__¨s þzTimingWrapper.__call__N©Ú__name__Ú __module__Ú __qualname__r>rDrrrrr:¢sr:c@s,eZdZdZdd„Zdd„Zdd„ZeZdS) Ú BaseTestCase)Ú processesÚmanagerÚthreadscCstr| ||d¡dS©Né)Ú CHECK_TIMINGSÚassertAlmostEqual©r=ÚaÚbrrrÚassertTimingAlmostEqual·sz$BaseTestCase.assertTimingAlmostEqualcGs0z ||Ž}WntyYn0| ||¡SdSr)ÚNotImplementedErrorÚ assertEqual)r=Úvaluer;rAÚresrrrÚassertReturnsIfImplemented»s   z'BaseTestCase.assertReturnsIfImplementedcGs tdƒ‚dS)Nz#shouldn't try to pickle a test case)rU)r=rArrrÚ __reduce__ÅszBaseTestCase.__reduce__N)rFrGrHÚ ALLOWED_TYPESrTrYrZÚ __reduce_ex__rrrrrI³s  rIcCsjz | ¡WStydz |jWYSty^z|jWYYStyXt‚Yn0Yn0Yn0dSr)Ú get_valuer5Z_Semaphore__valueÚ_valuerU©r=rrrr]Îs     r]c@seZdZdd„ZdS)Ú DummyCallablecCs| d¡dS©Né)Úput)r=ÚqÚcrrrrDßszDummyCallable.__call__N)rFrGrHrDrrrrr`Þsr`c@s†eZdZdZdd„Zdd„Zedd„ƒZdd „Zed d „ƒZ d d „Z edd„ƒZ edd„ƒZ dd„Z e ejd¡dd„ƒZedd„ƒZedd„ƒZedd„ƒZdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zed'd(„ƒZd)d*„Zed+d,„ƒZd-d.„ZedPd1d2„ƒZd3d4„Z d5d6„Z!d7d8„Z"ed9d:„ƒZ#d;d<„Z$ed=d>„ƒZ%d?d@„Z&eifdAdB„ƒZ'dCdD„Z(dEdF„Z)edQdHdI„ƒZ*dJdK„Z+dLdM„Z,dNdO„Z-d0S)RÚ _TestProcess©rJrLcCsˆ|jdkr| d |j¡¡| ¡}|j}| | ¡¡| |j ¡| |t ¡| t |ƒdk¡|  |j t  ¡¡|  |jd¡dS)NrLútest not appropriate for {}r)ÚTYPEÚskipTestÚformatÚcurrent_processÚauthkeyÚ assertTrueÚis_aliveÚdaemonÚassertIsInstanceÚbytesÚlenrVÚidentr3ÚgetpidÚexitcode)r=ÚcurrentrmrrrÚ test_currentès  z_TestProcess.test_currentcCsz|jdkr| d |j¡¡|j|jd}| |j| ¡j¡|j|jdd}| |j¡|j|jdd}|  |j¡dS)NrLrh©ÚtargetT©rzrpF) rirjrkÚProcessÚ_testrVrprlrnÚ assertFalse)r=Zproc0Zproc1Úproc2rrrÚtest_daemon_argumentös  z!_TestProcess.test_daemon_argumentcOsR| ¡}| |¡| |¡| |j¡|jdkrN| t|jƒ¡| |j¡dS)NrL)rlrcrrirrrmÚpid)ÚclsrdrArBrwrrrr}s    z_TestProcess._testcCs |jdkr| d |j¡¡| | ¡¡|jdd\}}|j|j|fd}| ¡|  ¡|  ¡\}}|  ||  ¡j ¡|  |t ¡¡|  ||  ¡j¡dS)NrLrhF©Úduplex©rzrA)rirjrkÚ assertIsNoneÚparent_processÚPiper|Ú_test_send_parent_processÚstartÚjoinÚrecvrVrlrr3rur)r=ÚrconnÚwconnÚpZ parent_pidÚ parent_namerrrÚtest_parent_process_attributes s  z+_TestProcess.test_parent_process_attributescCs&ddlm}| |ƒj|ƒjg¡dS)Nr©r‡)Úmultiprocessing.processr‡Úsendrr©r‚rŽr‡rrrr‰s z&_TestProcess._test_send_parent_processcCs®|jdkr| d |j¡¡|jdd\}}|j|j|fd}| ¡|jtj ds\t dƒ‚|  ¡}|  |d¡|  ¡| ¡|jtj ds–t dƒ‚|  ¡}|  |d ¡dS) NrLrhFrƒr…©r(z(Could not communicate with child processÚaliveú not alive)rirjrkrˆr|Ú_test_create_grandchild_processrŠÚpollrÚ LONG_TIMEOUTÚAssertionErrorrŒrVÚ terminater‹)r=rrŽrZparent_process_statusrrrÚtest_parent_process s" ÿ z _TestProcess.test_parent_processcCs(|j|j|fd}| ¡t d¡dS)Nr…i,)r|Ú_test_report_parent_statusrŠr?Úsleep)r‚rŽrrrrr™9sz,_TestProcess._test_create_grandchild_processcCsPddlm}| |ƒ ¡rdnd¡|ƒjtjd| |ƒ ¡rFdnd¡dS)Nrr’r—r˜r–)r“r‡r”ror‹rÚ SHORT_TIMEOUTr•rrrrŸ?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) NrNéégR¸…ëQ@)ÚhelloZbyeZ SomeProcess)rzrAÚkwargsrTrLFr)rÚEventr|r}rprlrirVrmroÚ assertNotInÚactive_childrenrnÚtypeÚlistrvrŠÚassertInÚgetrrr‹r)r=rdÚerAr¥rrrwrrrÚ test_processFs@    ÿ  z_TestProcess.test_processzneeds native_idcCsr|jdkr| d |j¡¡t ¡j}| d¡}|j|j|fd}|  ¡|  ¡}|  ¡t |ƒ|  ||¡dS)NrLrhrNr…)rirjrkÚ threadingÚ main_threadÚ native_idrr|Ú"_test_process_mainthread_native_idrŠr¬r‹rÚassertNotEqual)r=Zcurrent_mainthread_native_idrdrZchild_mainthread_native_idrrrÚ!test_process_mainthread_native_idns   z._TestProcess.test_process_mainthread_native_idcCst ¡j}| |¡dSr)r¯r°r±rc)r‚rdZmainthread_native_idrrrr²s z/_TestProcess._test_process_mainthread_native_idcCst d¡dS)Néd©r?r ©r‚rrrÚ _sleep_some„sz_TestProcess._sleep_somecCst |¡dSrr¶)r‚ÚdelayrrrÚ _test_sleepˆsz_TestProcess._test_sleepc s |jdkr| d |j¡¡|j|jd‰dˆ_ˆ ¡| ˆ ¡d¡|  ˆ|  ¡¡| ˆj d¡t ˆj ƒ}| |dƒd¡| |jd¡| ˆ ¡d¡| |dƒd¡| |jd¡| ˆ ¡d¡t d¡|ˆƒttd ƒrV‡fd d „}t tj|¡}z4t d ¡| |ƒd¡Wt d¡t tj|¡nt d¡t tj|¡0n| |ƒd¡| |jd¡| ˆ ¡d ¡| ˆ|  ¡¡ˆ  ¡ˆj S)NrLrhryTrr&r2rNÚalarmcstdˆƒ‚dS)Nzjoin took too long: %s©Ú RuntimeError©rA©rrrÚhandlerªsz+_TestProcess._kill_process..handleré F)rirjrkr|r¸rprŠrVror«r¨rvr:r‹rTr<r?r ÚhasattrÚsignalÚSIGALRMr»r§)r=Úmethr‹rÀZ old_handlerrr¿rÚ _kill_processŒsB       ÿ z_TestProcess._kill_processcCs,| tjj¡}tjdkr(| |tj ¡dS©NÚnt) rÆrr|rr3rrVrÃÚSIGTERM©r=rvrrrÚtest_terminate¿s z_TestProcess.test_terminatecCs,| tjj¡}tjdkr(| |tj ¡dSrÇ) rÆrr|Úkillr3rrVrÃÚSIGKILLrÊrrrÚ test_killÄs z_TestProcess.test_killcCsHz t ¡}Wnty"d}Yn0| t|ƒtu¡| |dk¡dSrM)rÚ cpu_countrUrnr©Úint)r=ZcpusrrrÚtest_cpu_countÉs    z_TestProcess.test_cpu_countcCsp| t| ¡ƒt¡|jtjtfd}| || ¡¡d|_ |  ¡|  || ¡¡|  ¡| || ¡¡dS©Nr…T) rVr©r¨rªr|r?r ÚDELTAr§rprŠr«r‹©r=rrrrÚtest_active_childrenÑsz!_TestProcess.test_active_childrencCsR| |¡t|ƒdkrNtdƒD].}|j|j|||gfd}| ¡| ¡qdS)Nr¢r…)r”rsÚranger|Ú_test_recursionrŠr‹)r‚rŽÚidÚirrrrr×Þs   ÿz_TestProcess._test_recursioncCsx|jdd\}}| |g¡t t¡g}| ¡rB| | ¡¡q*gdgddgddgdgddgddgg}| ||¡dS)NFrƒrrN) rˆr×r?r rÓršÚappendrŒrV)r=rrŽÚresultÚexpectedrrrÚtest_recursionés  ù z_TestProcess.test_recursioncCs| d¡dS)Nç$@r$©r‚ÚeventrrrÚ_test_sentinelýsz_TestProcess._test_sentinelcCsÄ|jdkr| d |j¡¡| ¡}|j|j|fd}| t¡|jWdƒn1s\0Y|  ¡|  |j ¡|j}|  |t ¡| t|dd¡| ¡|  ¡| t|dd¡dS)NrLrhr…r&r–rN)rirjrkr¦r|ráÚ assertRaisesr6ÚsentinelrŠÚ addCleanupr‹rqrÐr~r)Úsetrn)r=ràrrãrrrÚ test_sentinels  $  z_TestProcess.test_sentinelrNcCs|dur| ¡t |¡dSr)r¬ÚsysÚexit)r‚ÚrcrdrrrÚ _test_closesz_TestProcess._test_closecCs|jdkr| d |j¡¡| ¡}|j|jd|id}d|_| ¡| |  ¡d¡|  t ¡|  ¡Wdƒn1s~0Y|  d¡| ¡| |  ¡d¡| |jd¡|  ¡|  t ¡|  ¡Wdƒn1sè0Y|  t ¡| ¡Wdƒn1s0Y|  t ¡| ¡Wdƒn1sP0Y|  ¡t |¡}~t ¡| |ƒd¡t|ƒdS)NrLrhrd)rzr¥TFr)rirjrkrr|rêrprŠrVrorâr6rrcr‹rvrÚweakrefÚrefÚgcÚcollectÚassertIsr)r=rdrÚwrrrrÚ test_closes4  &  & ( ( z_TestProcess.test_closecs*ˆjdkrˆ d ˆj¡¡t ¡}|dkr0dnd}‡fdd„t|ƒDƒ}|D] }| ¡qN|D] }t|ƒq`|D]}ˆ |j d¡qr‡fd d„t|ƒDƒ}|D] }| ¡q t   d ¡|D] }|  ¡q¼|D] }t|ƒqÎt jd kr&tj g}tjd kr | tj ¡|D]}ˆ |j |¡qdS) NrLrhÚspawnrbrµcsg|]}ˆjˆjdd‘qS))ç{®Gáz„?r…)r|rº©Ú.0rÙr_rrÚ ?sÿz4_TestProcess.test_many_processes..rcsg|]}ˆjˆjd‘qS)ry)r|r¸rôr_rrröHsÿçü©ñÒMbP?rÈÚdarwin)rirjrkrÚget_start_methodrÖrŠrrVrvr?r rr3rrÃrÉrçÚplatformrÚrÍr«)r=ÚsmÚNÚprocsrZ exitcodesrr_rÚtest_many_processes7s:  ÿ   ÿ       z _TestProcess.test_many_processescCsftƒ}t |¡}| ¡}|j|||fd}~| ¡| ¡| |ƒd¡| |  ¡d¡t |ƒdS)Nr…rb) r`rërìrr|rŠr‹rïrVr¬r)r=rerðrdrrrrÚtest_lose_target_refZs z!_TestProcess.test_lose_target_refcCs| tj ¡¡| ¡dSr)rcÚtestrZfd_countr%)r=ÚevtrdrrrÚ_test_child_fd_inflationfsz%_TestProcess._test_child_fd_inflationc søˆjdkrˆ d ˆj¡¡t ¡}|dkr<ˆ d |¡¡d}ˆ ¡‰ˆ ¡‰‡‡‡fdd„t|ƒDƒ}|D] }| ¡qnzR‡fdd„t|ƒDƒ}ˆ  t t |ƒƒd|¡Wˆ  ¡|D] }|  ¡q¸t ˆƒn$ˆ  ¡|D] }|  ¡qÜt ˆƒ0dS) NrLrhÚforkrbcs g|]}ˆjˆjˆˆfd‘qS©r…)r|rrô©rrdr=rrrö{sÿz8_TestProcess.test_child_fd_inflation..csg|] }ˆ ¡‘qSr©r¬rô©rdrrröórN)rirjrkrrùr¦rrÖrŠrVrsrår‹r)r=rûrürýrZ fd_countsrrrÚtest_child_fd_inflationks0 ÿ   ý z$_TestProcess.test_child_fd_inflationcs>‡fdd„}‡fdd„}tj|d ¡tj|dd ¡dS)Ncst d¡ˆ ¡dS)Nçà?©r?r rår©rrrÚfunc1Œs z2_TestProcess._test_wait_for_threads..func1cst d¡ˆ ¡dS)Né)r?r Úclearrr rrÚfunc2s z2_TestProcess._test_wait_for_threads..func2ryTr{)r¯ÚThreadrŠ)r=rr rrr rÚ_test_wait_for_threadsŠs  z#_TestProcess._test_wait_for_threadscCsX|jdkr| d |j¡¡| ¡}|j|j|fd}| ¡| ¡| |  ¡¡dS)NrLrhr…) rirjrkr¦r|rrŠr‹rnÚis_set)r=rÚprocrrrÚtest_wait_for_threads—s z"_TestProcess.test_wait_for_threadscCsH| ¡D]2\}}|dkr*t ¡}| ¡nd}tt|dƒq| ¡dS)Nr)ÚitemsÚioÚStringIOrÚsetattrrçrå)r=rZbreak_std_streamsÚ stream_nameÚactionÚstreamrrrÚ_test_error_on_stdio_flush£s z'_TestProcess._test_error_on_stdio_flushc Cs¬t ¡dg}|d ¡dD]Š}|D]€}tt|ƒ}tt||ƒzV| ¡}|j|j|fd}|  ¡|  ¡|  |  ¡¡|  |jd¡Wtt||ƒq$tt||ƒ0q$qdS)Nr©ÚstdoutÚstderrr…)rrrÚgetattrrçrr¦r|rrŠr‹rnrrVrv)r=ZstreamsrrÚ old_streamrrrrrÚtest_error_on_stdio_flush_1¯s     ÿz(_TestProcess.test_error_on_stdio_flush_1c CsŽdD]„}dD]z}tt|ƒ}z\| ¡}|j|j|||ifd}| ¡| ¡| | ¡¡|  |j d¡Wt t||ƒq t t||ƒ0q qdS)Nr)rÚremover…r) r!rçr¦r|rrŠr‹rnrrVrvr)r=rrr"rrrrrÚtest_error_on_stdio_flush_2Âs  ÿz(_TestProcess.test_error_on_stdio_flush_2r&cCst |¡| ¡dSrr )r=rr¹rrrÚ_sleep_and_set_eventÓs z!_TestProcess._sleep_and_set_eventc Cs|jdkr| d |j¡¡t ¡}|dkr<| d |¡¡ddlm}| ¡d}| ¡}|j |j ||fd}|  ¡|j }t  ||¡t |d¡| ¡}|j |j |fd} |   ¡|  ¡| | ¡¡| | jd¡| ¡| | ¡¡| |jd ¡dS) NrLrhÚ forkserverr)Ú _forkserverr r…ç@)réÿ)rirjrkrrùZmultiprocessing.forkserverr(Úensure_runningr¦r|r&rŠZ_forkserver_pidr3rÌr?r r‹rnrrVrvr«) r=Úsignumrûr(r¹rrrZevt2rrrrÚcheck_forkserver_deathØs.   z#_TestProcess.check_forkserver_deathcCs| tj¡dSr)r-rÃÚSIGINTr_rrrÚtest_forkserver_sigintþsz#_TestProcess.test_forkserver_sigintcCstjdkr| tj¡dSrÇ)r3rr-rÃrÍr_rrrÚtest_forkserver_sigkills z$_TestProcess.test_forkserver_sigkill)rN)r&).rFrGrHr[rxr€Ú classmethodr}r‘r‰ržr™rŸr®r7Ú skipUnlessr¯Ú_HAVE_THREAD_NATIVE_IDr´r²r¸rºrÆrËrÎrÑrÕr×rÝrárærêrñrþrÿrr rrrr#r%r&r-r/r0rrrrrfäsj     (     3     #      &rfc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú _UpperCasercCs tj |¡t ¡\|_|_dSr)rr|r>rˆÚ child_connÚ parent_connr_rrrr>s z_UpperCaser.__init__cCs<|j ¡t|jjdƒD]}|j | ¡¡q|j ¡dSr)r6rÚiterr5rŒr”Úupper©r=r rrrÚruns z_UpperCaser.runcCs|j |¡|j ¡Sr)r6r”rŒr9rrrÚsubmits z_UpperCaser.submitcCs$|j d¡|j ¡|j ¡dSr)r6r”rr5r_rrrÚstops  z_UpperCaser.stopN)rFrGrHr>r:r;r<rrrrr4 sr4c@s@eZdZdZdd„Zdd„Zedd„ƒZedd „ƒZd d „Z d S) Ú_TestSubclassingProcess©rJcCsLtƒ}d|_| ¡| | d¡d¡| | d¡d¡| ¡| ¡dS)NTr¤ZHELLOZworldZWORLD)r4rprŠrVr;r<r‹)r=Z uppercaserrrrÚtest_subclassing&sz(_TestSubclassingProcess.test_subclassingcCs°|jdkr| d |j¡¡tjj}| tjj|¡|j|j |fd}|  ¡|  ¡t |dƒ<}|  ¡}| d|¡| d|¡| d|¡Wdƒn1s¢0YdS)NrLrhr…ÚrÚZeroDivisionErrorztest_multiprocessing.pyz 1/0 # MARKER)rirjrkrrÚTESTFNräÚunlinkr|Ú_test_stderr_flushrŠr‹ÚopenÚreadr«)r=ÚtestfnrÚfÚerrrrrÚtest_stderr_flush/s    z)_TestSubclassingProcess.test_stderr_flushcCs6t |tjtjBtjB¡}t|dddt_dddS)NÚwF©ÚclosefdrNr)r3rEÚO_WRONLYÚO_CREATÚO_EXCLrçr )r‚rGÚfdrrrrD@sz*_TestSubclassingProcess._test_stderr_flushcCs8t |tjtjBtjB¡}t|dddt_t |¡dS)NrKFrL)r3rErNrOrPrçr rè)r‚ÚreasonrGrQrrrÚ_test_sys_exitGsz&_TestSubclassingProcess._test_sys_exitc CsJ|jdkr| d |j¡¡tjj}| tjj|¡gd¢dfD]Œ}|j|j ||fd}d|_ |  ¡t |ƒ|  |jd¡t|dƒ}| ¡}Wdƒn1s¤0Y|  | ¡t|ƒ¡t |¡q@gd ¢}|D]j\}}|j|d D|jtj|d}d|_ |  ¡t |ƒ|  |j|¡WdƒqÚ1s:0YqÚdS) NrLrh)rNr¢éz ignore thisr…TrNr@)))TrN))Fr))érU)rr)rrr¾)rirjrkrrrBrärCr|rSrprŠrrVrvrErFÚrstripÚstrr3ÚsubTestrçrè) r=rGrRrrHZcontentZcasesrArÜrrrÚ test_sys_exitMs0 þ &  z%_TestSubclassingProcess.test_sys_exitN) rFrGrHr[r?rJr1rDrSrYrrrrr="s   r=cCs"t|dƒr| ¡S| ¡dkSdS)NÚemptyr)rÂrZÚqsizerrrrÚ queue_emptyys r\cCs"t|dƒr| ¡S| ¡|kSdS)NÚfull)rÂr]r[)rdÚmaxsizerrrÚ queue_fulls r_c@sŒeZdZedd„ƒZdd„Zedd„ƒZdd„Zed d „ƒZd d „Z d d„Z edd„ƒZ dd„Z dd„Z dd„Zdd„Zdd„Zdd„ZdS)Ú _TestQueuecCs*| ¡tdƒD] }| ¡q| ¡dS)Né)r%rÖr¬rå)r‚rÚchild_can_startÚparent_can_continuerÙrrrÚ _test_put‰s  z_TestQueue._test_putcCsüd}|j|d}| ¡}| ¡}|j|j|||fd}d|_| ¡| t|ƒd¡| t||ƒd¡|  d¡|  dd¡|  ddd¡|  d d¡|  d dd¡|  d¡t   t ¡| t|ƒd¡| t||ƒd¡t|j ƒ}t|j ƒ}| tj|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)Nra©r^r…TFrNr¢rTérbérr–)rr¦r|rdrprŠrVr\r_rcÚ put_nowaitr?r rÓr:râÚpyqueueÚFullrTr<ÚTIMEOUT1ÚTIMEOUT2ÚTIMEOUT3rår%r‹r)r=ZMAXSIZErrbrcrrcrhrrrÚtest_putsR þ       z_TestQueue.test_putcCs<| ¡| d¡| d¡| d¡| d¡| ¡dS)Nr¢rTrfrb)r%rcrå©r‚rrbrcrrrÚ _test_getËs     z_TestQueue._test_getcCs²| ¡}| ¡}| ¡}|j|j|||fd}d|_| ¡| t|ƒd¡| ¡|  ¡t   t ¡| t|ƒd¡| |  dd¡d¡| |  d¡d¡| |j ddd¡| | ¡d ¡| t|ƒd¡t|j ƒ}t|jƒ}| tj|d¡| |jd ¡| tj|dd¡| |jd ¡| tj|¡| |jd ¡| tj|dt¡| |jt¡| tj|dt¡| |jd ¡|jtj|td| |jt¡| ¡t|ƒdS) Nr…TFr¢rTrNr–rfrbr)rr¦r|rprprŠrVr\rår%r?r rÓr¬Ú get_nowaitr:râriÚEmptyrTr<rkrlrmr‹r)r=rrbrcrr¬rqrrrÚtest_getÕsFþ   z_TestQueue.test_getcCstddƒD]}| |¡q dS)NrÁr)rÖrc)r‚rrÙrrrÚ _test_fork sz_TestQueue._test_forkcCsŽ| ¡}tdƒD]}| |¡qt t¡|j|j|fd}d|_|  ¡tdƒD]}|  |  ¡|¡qR|  t j|j d¡| ¡t|ƒdS)NrÁr…TrF)rrÖrcr?r rÓr|rtrprŠrVr¬rârirrr‹r)r=rrÙrrrrÚ test_forks    z_TestQueue.test_forkcCsª| ¡}z| | ¡d¡Wnty8| d¡Yn0| d¡| | ¡d¡| d¡| | ¡d¡| ¡| | ¡d¡| ¡| | ¡d¡t|ƒdS)Nrzqsize method not implementedrNrbr¢)rrVr[rUrjrcr¬r©r=rdrrrÚ test_qsize.s   z_TestQueue.test_qsizecCs(t|jdƒD]}t t¡| ¡q dSr)r7r¬r?r rÓÚ task_done)r‚rdÚobjrrrÚ_test_task_done>s z_TestQueue._test_task_donecsŠˆ ¡‰‡‡fdd„tdƒDƒ}|D]}d|_| ¡q$tdƒD]}ˆ |¡q@ˆ ¡|D]}ˆ d¡q\|D] }| ¡qptˆƒdS)Ncsg|]}ˆjˆjˆfd‘qSr)r|rzrô©rr=rrröGsÿz-_TestQueue.test_task_done..rfTrÁ)Ú JoinableQueuerÖrprŠrcr‹r)r=ÚworkersrrÙrr{rÚtest_task_doneDs ÿ     z_TestQueue.test_task_donec CsÆtj ¡¨d}t|ddƒ}| d¡Wdƒn1s>0Ytj t ¡¡<z t|ƒWnt j y„|  d¡Yn0Wdƒn1sš0YWdƒn1s¸0YdS)NZimported_by_an_imported_modulez.pyrKzøif 1: import multiprocessing q = multiprocessing.Queue() q.put('knock knock') q.get(timeout=3) q.close() del q z?Probable regression on import lock contention; see Issue #22853) rrZtemp_cwdrEÚwriteZ DirsOnSysPathr3ÚgetcwdÚ __import__rirrÚfail)r=Ú module_namerHrrrÚtest_no_import_lock_contentionZs (  z)_TestQueue.test_no_import_lock_contentioncCsHt ¡}t ¡}| tj|jdd¡t ¡|}| |d¡t |ƒdS)NTgš™™™™™É?r") rrr?r@rârirrr¬ÚassertGreaterEqualr)r=rdrŠÚdeltarrrÚ test_timeoutos   z_TestQueue.test_timeoutc Cs4|jdkr| d |j¡¡Gdd„dtƒ}tj ¡J| ¡}| |ƒ¡| d¡|  |j tj d¡t |ƒWdƒn1s†0Ytj ¡„|jdd}| |ƒ¡| d¡z|  | ¡d¡WntyäYn0|  |j tj d¡|  | ¡¡t |ƒWdƒn1s&0YdS) NrJrhc@seZdZdd„ZdS)zF_TestQueue.test_queue_feeder_donot_stop_onexc..NotSerializablecSst‚dSr)r5r_rrrrZ€szQ_TestQueue.test_queue_feeder_donot_stop_onexc..NotSerializable.__reduce__N©rFrGrHrZrrrrÚNotSerializablesr‰Tr–rNre)rirjrkÚobjectrrÚcaptured_stderrrrcrnr¬r¡rrVr[rUrZ)r=r‰rdrrrÚ"test_queue_feeder_donot_stop_onexczs(    &     z-_TestQueue.test_queue_feeder_donot_stop_onexccsÆ|jdkr| d |j¡¡Gdd„dtƒ‰G‡fdd„dtjjƒ}ˆƒ}tj  ¡F|t  ¡d}|  |¡|  d¡|  |j tjd ¡Wdƒn1s 0Y|  |j¡|  |j¡dS) NrJrhc@seZdZdd„Zdd„ZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializablecSsd|_d|_dS©NF)Úreduce_was_calledÚ on_queue_feeder_error_was_calledr_rrrr>¢szT_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializable.__init__cSsd|_t‚dS©NT)rŽr5r_rrrrZ¦szV_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializable.__reduce__N)rFrGrHr>rZrrrrr‰ sr‰cseZdZe‡fdd„ƒZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error..SafeQueuecst|tƒrt|ˆƒrd|_dSr)rr5r)r­ry©r‰rrÚ_on_queue_feeder_error¬s ÿz\_TestQueue.test_queue_feeder_on_queue_feeder_error..SafeQueue._on_queue_feeder_errorN)rFrGrHÚ staticmethodr’rr‘rrÚ SafeQueueªsr”)ÚctxTr–)rirjrkrŠrrrrrr‹Ú get_contextrcrnr¬r¡rŽr)r=r”Znot_serializable_objrdrr‘rÚ'test_queue_feeder_on_queue_feeder_erroršs     2 z2_TestQueue.test_queue_feeder_on_queue_feeder_errorc CsŒt ¡t ¡fD]v}| ¡| td¡| d¡Wdƒn1sH0Y| td¡| ¡Wdƒq1s|0YqdS)Nz is closedÚfoo)rrr|rÚassertRaisesRegexr6rcr¬rvrrrÚ$test_closed_queue_put_get_exceptionsÀs (z/_TestQueue.test_closed_queue_put_get_exceptionsN)rFrGrHr1rdrnrprsrtrurwrzr~r„r‡rŒr—ršrrrrr`†s$ ; 5    &r`c@s$eZdZdd„Zdd„Zdd„ZdS)Ú _TestLockcCsR| ¡}| | ¡d¡| | d¡d¡| | ¡d¡| ttjf|j¡dS)NTF)ÚLockrVÚacquireÚreleaserâr6r¯Ú ThreadError©r=ÚlockrrrÚ test_lockÍs z_TestLock.test_lockcCs~| ¡}| | ¡d¡| | ¡d¡| | ¡d¡| | ¡d¡| | ¡d¡| | ¡d¡| ttf|j¡dSr)ÚRLockrVrržrârœr½r rrrÚ test_rlockÔsz_TestLock.test_rlockcCs,| ¡Wdƒn1s0YdSr)rœr_rrrÚtest_lock_contextÞs z_TestLock.test_lock_contextN)rFrGrHr¢r¤r¥rrrrr›Ës r›c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú_TestSemaphorecCsª| dt|¡| | ¡d¡| dt|¡| | ¡d¡| dt|¡| | d¡d¡| dt|¡| | ¡d¡| dt|¡| | ¡d¡| dt|¡dS)Nr¢TrNrF)rYr]rVrrž©r=ÚsemrrrÚ_test_semaphoreåsz_TestSemaphore._test_semaphorecCsT| d¡}| |¡| | ¡d¡| dt|¡| | ¡d¡| dt|¡dS)Nr¢rTrf)Ú Semaphorer©rVržrYr]r§rrrÚtest_semaphoreòs   z_TestSemaphore.test_semaphorecCs| d¡}| |¡dS©Nr¢)ÚBoundedSemaphorer©r§rrrÚtest_bounded_semaphoreús z%_TestSemaphore.test_bounded_semaphorecCsÒ|jdkr| d |j¡¡| d¡}t|jƒ}| |dƒd¡| |jd¡| |ddƒd¡| |jd¡| |dt ƒd¡| |jd¡| |dt ƒd¡| |jt ¡| |t dd¡| |jt ¡dS)NrJrhrFr&Tr–) rirjrkrªr:rrVrTr<rkrlrm)r=r¨rrrrr‡s   z_TestSemaphore.test_timeoutN)rFrGrHr©r«r®r‡rrrrr¦ãs r¦c@sžeZdZeddd„ƒZdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z edd„ƒZ e   ed¡dd„ƒZedd„ƒZe   ed¡dd„ƒZedd„ƒZdd„ZdS)Ú_TestConditionNcCs.| ¡| ¡| |¡| ¡| ¡dSr)rržr%)r‚ÚcondÚsleepingÚwokenr(rrrrHs  z_TestCondition.fc Cs`tdƒD]<}z|ƒ|krWqFWnty8YqFYn0t t¡qt t¡| ||¡dS©NrÁ)rÖrUr?r rÓrY)r=r;rWrÙrrrÚassertReachesEventually#s       z&_TestCondition.assertReachesEventuallycCsX|jdkrTz6|j ¡|j ¡}| |d¡| |j ¡d¡WntyRYn0dS)NrJr)riÚ_sleeping_countr]Ú _woken_countrVÚ_wait_semaphorerU)r=r°ÚsleepersrrrÚcheck_invariant.s ÿ  z_TestCondition.check_invariantcCs| ¡}| d¡}| d¡}|j|j|||fd}d|_| ¡| |j¡tj |j|||fd}d|_| ¡| |j¡|  ¡|  ¡t   t ¡| dt|¡|  ¡| ¡| ¡t   t ¡| dt|¡|  ¡| ¡| ¡t   t ¡| dt|¡| |¡| ¡dS)Nrr…TrNr¢)Ú Conditionrªr|rHrprŠrär‹r¯rrr?r rÓrYr]Únotifyržr¹)r=r°r±r²rrrrÚ test_notify9s6        z_TestCondition.test_notifycsª| ¡}| d¡}| d¡‰tdƒD]h}|j|j||ˆtfd}d|_| ¡| |j ¡t j |j||ˆtfd}d|_| ¡| |j ¡q$tdƒD] }|  ¡q–tdƒD] }ˆ  ¡q¬|  dtˆ¡| |¡tdƒD]d}|j|j||ˆfd}d|_| ¡| |j ¡t j |j||ˆfd}d|_| ¡| |j ¡qÚtdƒD]}|  ¡qHt t¡|  dtˆ¡|  ¡| ¡| ¡| ‡fdd„d¡| |¡dS)NrrTr…TracstˆƒSr©r]r©r²rrÚŸrz0_TestCondition.test_notify_all..)rºrªrÖr|rHrkrprŠrär‹r¯rrrYr]r¹r?r rÓÚ notify_allržr´©r=r°r±rÙrrCrr¾rÚtest_notify_allfsP    ÿ  ÿ          z_TestCondition.test_notify_allcsP| ¡}| d¡}| d¡‰tdƒD]d}|j|j||ˆfd}d|_| ¡| |j¡t j |j||ˆfd}d|_| ¡| |j¡q$tdƒD] }|  ¡q’t   t¡| dtˆ¡|  ¡|jdd| ¡| ‡fdd „d¡|  ¡|jd d| ¡| ‡fd d „d¡|  ¡|jdd| ¡| dtˆ¡| |¡dS) NrrTr…Trar¢)ÚncstˆƒSrr½rr¾rrr¿Ãrz._TestCondition.test_notify_n..rfcstˆƒSrr½rr¾rrr¿Êr)rºrªrÖr|rHrprŠrär‹r¯rrr?r rÓrYr]r»ržr´r¹rÁrr¾rÚ test_notify_n¤s:          z_TestCondition.test_notify_ncCsH| ¡}t|jƒ}| ¡|tƒ}| ¡| |d¡| |jt¡dSr) rºr:r%rrkržrVrTr<)r=r°r%rXrrrr‡Ös  z_TestCondition.test_timeoutcs`|Hdˆ_| ¡| ‡fdd„¡}|r4ˆjdkr>t d¡Wdƒn1sR0YdS)Nrcs ˆjdkS©Nrf©rWr©Ústaterrr¿ärz0_TestCondition._test_waitfor_f..rfrN)rWr»Úwait_forrçrè)r‚r°rÈrÛrrÇrÚ_test_waitfor_fßs z_TestCondition._test_waitfor_fzneeds sharedctypesc sð| ¡}| dd¡‰|j|j|ˆfd}d|_| ¡|:| ‡fdd„¡}| |¡| ˆj d¡Wdƒn1sz0Yt dƒD]H}t   d ¡|&ˆj d 7_ |  ¡WdƒqŒ1sÊ0YqŒt|ƒ| |jd¡dS) NrÙr2r…Tcs ˆjdkS©NrrÆrrÇrrr¿órz-_TestCondition.test_waitfor..rrfrórN)rºrr|rÊrprŠrÉrnrVrWrÖr?r r»rrv)r=r°rrÛrÙrrÇrÚ test_waitforès   ,  (z_TestCondition.test_waitforcsˆ| ¡|hd}t ¡}|j‡fdd„|d}t ¡|}|sf|d|kr\|dkrfnnd|_Wdƒn1sz0YdS)Nr"cs ˆjdkSrÅrÆrrÇrrr¿rz8_TestCondition._test_waitfor_timeout_f..r–g333333ã?rÞT)ržr?r@rÉrW)r‚r°rÈÚsuccessr¨rÜÚdtrÛrrÇrÚ_test_waitfor_timeout_fs $z&_TestCondition._test_waitfor_timeout_fc CsÎ| ¡}| dd¡}| dd¡}| d¡}|j|j||||fd}d|_| ¡| |jt j d¡t dƒD]H}t   d¡|&|jd 7_| ¡Wdƒql1sª0Yqlt|ƒ| |j¡dS) NrÙrFr…Tr–rTrórN)rºrrªr|rÏrprŠrnrrr›rÖr?r rWr»r)r=r°rÈrÍr¨rrÙrrrÚtest_waitfor_timeout s"    ÿ  (z#_TestCondition.test_waitfor_timeoutcCsP|| ¡Wdƒn1s"0Yt d¡|durLt |tj¡dSrM)r»r?r r3rÌrÃr.)r‚rerrrrÚ_test_wait_result$s & z _TestCondition._test_wait_resultcCs¾t|tƒrtjdkrt ¡}nd}| ¡}||| | d¡¡| | d¡¡|j |j ||fd}|  ¡|  | d¡¡|dur”|  t|jd¡| ¡Wdƒn1s°0YdS)Nr#rr"r…é<)rÚProcessesMixinrçrúr3rurºr~r%r|rÑrŠrnrâÚKeyboardInterruptr‹)r=rrerrrrÚtest_wait_result,s z_TestCondition.test_wait_result)N)rFrGrHr1rHr´r¹r¼rÂrÄr‡rÊr7r2ÚHAS_SHAREDCTYPESrÌrÏrÐrÑrÕrrrrr¯s&   ->2       r¯c@s eZdZedd„ƒZdd„ZdS)Ú _TestEventcCst t¡| ¡dSr)r?r rlrårßrrrÚ _test_eventCs z_TestEvent._test_eventcCsò| ¡}t|jƒ}| | ¡d¡| |dƒd¡| |jd¡| |tƒd¡| |jt¡| ¡| | ¡d¡| |ƒd¡| |jd¡| |tƒd¡| |jd¡|  ¡|j |j |fd}d|_ |  ¡| |ƒd¡| ¡dS)NFr&Tr…)r¦r:r%rVrrTr<rkrårr|rØrprŠr‹)r=ràr%rrrrÚ test_eventHs& z_TestEvent.test_eventN)rFrGrHr1rØrÙrrrrr×As r×c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú _DummyListcCs6tj t d¡¡}t ¡}| ||f¡d|jd<dS)NrÙr)rÚheapÚ BufferWrapperÚstructÚcalcsizerœÚ __setstate__Ú _lengthbuf)r=Úwrapperr¡rrrr>vsz_DummyList.__init__cCs"|\|_|_|j ¡ d¡|_dS)NrÙ)Ú_wrapperÚ_lockÚcreate_memoryviewÚcastrà)r=rÈrrrrß|s z_DummyList.__setstate__cCs |j|jfSr)rârãr_rrrÚ __getstate__€sz_DummyList.__getstate__cCs<|j"|jdd7<Wdƒn1s.0YdS©NrrN©rãrà)r=Ú_rrrrÚƒsz_DummyList.appendcCs4|j|jdWdƒS1s&0YdSrËrèr_rrrÚ__len__‡sz_DummyList.__len__N)rFrGrHr>rßrærÚrêrrrrrÚts rÚcCst d¡dS)Nrór¶rrrrÚ_wait‹srëc@s>eZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „ZdS)ÚBunchFc Cs’||_||_||_| ¡|_| ¡|_| ¡|_|s>|j ¡g}t |ƒD]*}|j |j d}d|_ |  ¡| |¡qJdd„} t || |¡|_dS)NryTcSs|D] }| ¡qdSr)r‹)rLrrrrÚfinalizeªsz Bunch.__init__..finalize)rHrArÃÚ DummyListÚstartedÚfinishedr¦Ú _can_exitrårÖr|ÚtaskrprŠrÚrëríÚ _finalizer) r=Ú namespacerHrArÃZwait_before_exitrLrÙrrírrrr>”s       zBunch.__init__c Cs\t ¡}|j |¡z(|j|jŽW|j |¡|j d¡n|j |¡|j d¡0dS)Né) r3rurïrÚrHrArðrñr%©r=rrrrrò°s   þ  z Bunch.taskcCst|jƒ|jkrtƒqdSr)rsrïrÃrër_rrrÚwait_for_startedºszBunch.wait_for_startedcCst|jƒ|jkrtƒqdSr)rsrðrÃrër_rrrÚwait_for_finished¾szBunch.wait_for_finishedcCs|j ¡dSr)rñrår_rrrÚ do_finishÂszBunch.do_finishcCs | ¡dSr)rór_rrrrÅsz Bunch.closeN)F) rFrGrHr>ròr÷rørùrrrrrrìs   rìc@seZdZdd„Zdd„ZdS)Ú AppendTruecCs ||_dSr)ry)r=ryrrrr>ÊszAppendTrue.__init__cCs|j d¡dSr)ryrÚr_rrrrDÌszAppendTrue.__call__NrErrrrrúÉsrúc@súeZdZdZdZdd„Zdd„Zdd„Zd d „Ze d d „ƒZ d5dd„Z dd„Z e dd„ƒZ dd„Ze dd„ƒZdd„Ze dd„ƒZdd„Ze dd„ƒZd d!„Ze d"d#„ƒZd$d%„Ze d&d'„ƒZd(d)„Ze d*d+„ƒZd,d-„Zd.d/„Ze d0d1„ƒZd2d3„Zd4S)6Ú _TestBarrierrbg>@cCs|j|j|jd|_dS)Nr–)ÚBarrierrüÚdefaultTimeoutÚbarrierr_rrrÚsetUp×sz_TestBarrier.setUpcCs|j ¡d|_dSr)rþÚabortr_rrrÚtearDownÚs z_TestBarrier.tearDowncCs,|jdkrgS|jdkr"|j ¡StƒSdS)NrLrK)rirKrªrÚr_rrrrîÞs    z_TestBarrier.DummyListcCs@t||||jdƒ}z||Ž| ¡W| ¡n | ¡0dSrM)rìrürør)r=rHrArSrrrÚ run_threadsæs  z_TestBarrier.run_threadscCs\|j}t|ƒD]0}|d d¡| ¡|d d¡| ¡qzWntyVYn0dS)NrTrN)ÚpartiesrÖrÚr%rU)r‚rþÚresultsrÃÚmrÙrrrÚ multipassîs   z_TestBarrier.multipassrNcCs*| ¡| ¡g}| |j|j||f¡dSr)rîrrrþ)r=ÚpassesrrrrÚ test_barrierÿsz_TestBarrier.test_barriercCs | d¡Sr³)rr_rrrÚtest_barrier_10sz_TestBarrier.test_barrier_10cCs| ¡}| |¡dSr)r%rc)r‚rþrrXrrrÚ_test_wait_return_f sz _TestBarrier._test_wait_return_fcsR| ¡‰| |j|jˆf¡‡fdd„t|jƒDƒ}| | d¡d¡tˆƒdS)Ncsg|] }ˆ ¡‘qSrrrôrrrrörz1_TestBarrier.test_wait_return..rrN) rrr rþrÖrürVÚcountr©r=rrrrÚtest_wait_returns z_TestBarrier.test_wait_returncCs| ¡t|ƒdkrt‚dSrM)r%rsr½)r‚rþrrrrÚ_test_action_fs z_TestBarrier._test_action_fcCsB| ¡}|j|jt|ƒd}| |j||f¡| t|ƒd¡dS)N)rrN)rîrürürúrrrVrs)r=rrþrrrÚ test_action!sz_TestBarrier.test_actioncCslz0| ¡}||jdkrt‚| ¡| d¡Wn6tjyN| d¡Yntyf| ¡Yn0dS©Nr¢T)r%rür½rÚr¯ÚBrokenBarrierErrorr)r‚rþÚresults1Úresults2rÙrrrÚ _test_abort_f*s z_TestBarrier._test_abort_fcCs^| ¡}| ¡}| |j|j||f¡| t|ƒd¡| t|ƒ|jd¡| |jj¡dSrç) rîrrrþrVrsrürnÚbroken)r=rrrrrÚ test_abort7s ÿz_TestBarrier.test_abortcCsˆ| ¡}||jdkr<|j|jdkr2t d¡q| ¡n6z| ¡| d¡Wntjyp| d¡Yn0| ¡| d¡dS)Nr¢rNr÷T) r%rüÚ n_waitingr?r ÚresetrÚr¯r)r‚rþrrÚresults3rÙrrrÚ _test_reset_fCs  z_TestBarrier._test_reset_fcCsl| ¡}| ¡}| ¡}| |j|j|||f¡| t|ƒd¡| t|ƒ|jd¡| t|ƒ|j¡dSrç)rîrrrþrVrsrü)r=rrrrrrÚ test_resetUs ÿz_TestBarrier.test_resetcCs z0| ¡}||jdkrt‚| ¡| d¡Wn6tjyN| d¡Yntyf| ¡Yn0| ¡|jdkr‚| ¡| ¡| ¡| d¡dSr)r%rür½rÚr¯rrr)r‚rþÚbarrier2rrrrÙrrrÚ_test_abort_and_reset_fbs z$_TestBarrier._test_abort_and_reset_fcCsz| ¡}| ¡}| ¡}| |j¡}| |j|j||||f¡| t|ƒd¡| t|ƒ|jd¡| t|ƒ|j¡dSrç)rîrürürrrþrVrs)r=rrrrrrrÚtest_abort_and_resetxs ÿz!_TestBarrier.test_abort_and_resetcCsR| ¡}||jdkr t d¡z| d¡WntjyL| d¡Yn0dS)Nr¢çð?r T)r%rür?r r¯rrÚ©r‚rþrrÙrrrÚ_test_timeout_f‡s z_TestBarrier._test_timeout_fcCs4| ¡}| |j|j|f¡| t|ƒ|jj¡dSr)rîrr!rþrVrsrr rrrr‡’sz_TestBarrier.test_timeoutcCsT| |j¡}||jdkr$t d¡z | ¡WntjyN| d¡Yn0dS)Nr¢rT)r%rýrür?r r¯rrÚr rrrÚ_test_default_timeout_fšs   z$_TestBarrier._test_default_timeout_fcCs@|j|jdd}| ¡}| |j||f¡| t|ƒ|j¡dS)Nr r–)rürürîrr"rVrsr)r=rþrrrrÚtest_default_timeout¥sz!_TestBarrier.test_default_timeoutcCs| d¡}| ¡| ¡dSrM)rür%)r=rSrrrÚtest_single_thread®s z_TestBarrier.test_single_threadc CsHt|ƒD]:}| ¡|| |¡Wdƒq1s80YqdSr)rÖr%r”)r‚rþrÚconnr¡rÙrrrÚ_test_thousand_f³s z_TestBarrier._test_thousand_fcCs¦|jdkr| d |j¡¡d}| ¡}| d¡\}}t|jƒD]2}|j|j|j |||fd}|  ¡|  |j ¡q@t|ƒD]$}t|jƒD]}|  | ¡|¡qŠq|dS)NrKrhéèFr…)rirjrkrœrˆrÖrür|r&rþrŠrär‹rVrŒ)r=rr¡r%r5ÚjrrÙrrrÚ test_thousandºs  ÿ z_TestBarrier.test_thousandN)rN)rFrGrHrürýrÿrrîrr1rrr r r rrrrrrrrr!r‡r"r#r$r&r)rrrrrûÐsF               rûc@sZeZdZdZdddddedƒedƒfgZd d „Zed d „ƒZddd„Z dd„Z dd„Z dS)Ú _TestValuer>)rÙi÷iª^)Údg @gÀ)Úhiÿÿÿéê)rdììreÚxÚycCsts| d¡dS©Nz%requires multiprocessing.sharedctypes©rÖrjr_rrrrÿÚsz_TestValue.setUpcCs$t||jƒD]\}}|d|_q dSr¬)ÚzipÚ codes_valuesrW)r‚ÚvaluesÚsvÚcvrrrr}Þsz_TestValue._testFcsª|r‡fdd„ˆjDƒ}n‡fdd„ˆjDƒ}t|ˆjƒD]\}}ˆ |j|d¡q:ˆjˆj|fd}d|_| ¡| ¡t|ˆjƒD]\}}ˆ |j|d¡qŠdS)Ncsg|]\}}}ˆ ||¡‘qSr)ÚRawValue©rõÚcoderWrér_rrröæsÿz)_TestValue.test_value..csg|]\}}}ˆ ||¡‘qSr)rr:r_rrröésÿrNr…Tr¢) r5r4rVrWr|r}rprŠr‹)r=Úrawr6r7r8rrr_rÚ test_valueäs ÿ ÿz_TestValue.test_valuecCs|jdddS©NT)r<)r=r_rrrÚ test_rawvalue÷sz_TestValue.test_rawvaluec Csæ| dd¡}| ¡}| ¡}|jdddd}| ¡}| ¡}| ¡}|jdd|d}| ¡} | ¡} | || ¡|jdddd} | t| dƒ¡| t| dƒ¡|jt|jdddd|  dd¡} | t| dƒ¡| t| dƒ¡dS)NrÙrb©r¡FÚget_lockÚget_objZnavalue) rrArBrœrVr~rÂrâr5r9) r=Zval1Úlock1Úobj1Zval2Úlock2Úobj2r¡Zval3Úlock3Úobj3Úarr4Úarr5rrrÚtest_getobj_getlockús$   z_TestValue.test_getobj_getlockN)F) rFrGrHr[r r5rÿr1r}r=r?rKrrrrr*Îsû  r*c@s~eZdZdZedd„ƒZe edud¡ddd„ƒZ e edud¡d d „ƒZ e edud¡d d „ƒZ e edud¡d d„ƒZ dS)Ú _TestArrayr>cCs0tdt|ƒƒD]}||||d7<qdSrM)rÖrs)r‚ÚseqrÙrrrrHsz _TestArray.fNzrequires _ctypesFcCsügd¢}|r| d|¡}n | d|¡}| t|ƒt|ƒ¡| |d|d¡| t|dd…ƒt|dd…ƒ¡t dgd¢¡|dd…<|dd…<| t|dd…ƒ|¡| |¡|j|j|fd }d |_|  ¡|  ¡| t|dd…ƒ|¡dS) N) i¨iri¦i5é–ééi$iÖiÊi?rÙrTr¢rg)rNr¢rTrfrfrUr…T) ÚRawArrayÚArrayrVrsrªÚarrayrHr|rprŠr‹)r=r<rMÚarrrrrrÚ test_arrays $$ z_TestArray.test_arraycCsrd}tdƒD]`}| d|¡}| t|ƒ|¡| t|ƒdg|¡tdƒ|dd…<| t|ƒttdƒƒ¡~q dS)NrÁrTrÙr)rÖrQrVrsrª)r=ÚsizerérSrrrÚtest_array_from_size6s  z_TestArray.test_array_from_sizecCs|jdddSr>)rTr_rrrÚ test_rawarrayEsz_TestArray.test_rawarrayc Cs | dttdƒƒ¡}| ¡}| ¡}|jdttdƒƒdd}| ¡}| ¡}| ¡}|jdttdƒƒ|d}| ¡} | ¡} | || ¡|jdtdƒdd} | t| dƒ¡| t| dƒ¡|j t |jdtdƒdd|  dtdƒ¡} | t| dƒ¡| t| dƒ¡dS)NrÙrÁr@FrArBZnotalock) rQrªrÖrArBrœrVr~rÂrâr5rP) r=Zarr1rCrDZarr2rErFr¡Zarr3rGrHrIrJrrrÚtest_getobj_getlock_objIs( ÿz"_TestArray.test_getobj_getlock_obj)F) rFrGrHr[r1rHr7ÚskipIfr.rTrVrWrXrrrrrLs    rLc@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)Ú_TestContainers©rKcCs^| ttdƒƒ¡}| |dd…ttdƒƒ¡| ¡}| |dd…g¡| ttdƒƒ¡| |dd…ttdƒƒ¡| |dd¡| |dd…gd¢¡|d9}| |dd…gd¢¡| |ddggd¢¡| |dd…ttdƒƒ¡||g}| |¡}| dd „|Dƒgd ¢gd¢g¡| |g¡}| d ¡| |d dd…gd ¢¡dS)NrÁrbr¢)r¢rTrf) rrNr¢rTrfrrNr¢rTrfra) rrNr¢rTrfrrNr¢rTrfrbracSsg|]}|dd…‘qSrr)rõÚelementrrrrö‚rz-_TestContainers.test_list..) rrNr¢rTrfrbrargrUé r¤r) rrNr¢rTrfrbrargrUr]r¤)rªrÖrVÚextendrÚ)r=rRrSr+r­rHrrrÚ test_listks*  þ  z_TestContainers.test_listcCsf| ttdƒƒ¡}t|ƒ}| t|ƒttdƒƒ¡| t|ƒg¡t|ƒ}d|d<| t|ƒd¡dS)NrÁrµr)rªrÖr7rVÚnext)r=rRÚitrrrÚtest_list_iterŠsz_TestContainers.test_list_itercsøˆ ‡fdd„tdƒDƒ¡}ˆ dd„|Dƒgd¢gd¡d|dd<ˆ |ddd…gd ¢¡td dƒD] }ˆ ||dd…gd¢¡qnˆ |d  ¡d ¡ˆ t|d ƒd ¡tddd ƒD]}ˆ t||ƒd¡qÄ~ˆ ¡}| |¡~dS) Ncsg|]}ˆ tdƒ¡‘qS)rT)rªrÖ)rõZ_ir_rrrö•rz;_TestContainers.test_list_proxy_in_list..rTcSsg|]}|dd…‘qSrr)rõÚinnerrrrrö–r)rrNr¢é7rr2)rrNrdrNr¢)rªrÖrVÚpoprsrÚ)r=rRrÙrSrr_rÚtest_list_proxy_in_list”s   z'_TestContainers.test_list_proxy_in_listcCsž| ¡}ttddƒƒ}|D]}t|ƒ||<q| | ¡tdd„|Dƒƒ¡| t| ¡ƒ|¡| t| ¡ƒdd„|Dƒ¡| t|  ¡ƒdd„|Dƒ¡dS)NéAéFcss|]}|t|ƒfVqdSr©ÚchrrôrrrÚ ­rz,_TestContainers.test_dict..cSsg|] }t|ƒ‘qSrrirôrrrrö¯rz-_TestContainers.test_dict..cSsg|]}|t|ƒf‘qSrrirôrrrrö°r) ÚdictrªrÖrjrVr ÚsortedÚkeysr6r)r=r+ÚindicesrÙrrrÚ test_dict¨sz_TestContainers.test_dictcCsv| ¡}ttddƒƒ}|D]}t|ƒ||<qt|ƒ}| t|ƒ|¡| t|ƒg¡t|ƒ}| ¡| tt |¡dS)Nrgrh) rlrªrÖrjr7rVrrâr½r`)r=r+rorÙrarrrÚtest_dict_iter²sz_TestContainers.test_dict_itercCsî|jddd}|jddd}|j||d}| |dd¡| |d dd¡d |d d <| |d d ¡| |d d d ¡d |d d<| |dd ¡| |d dd ¡~~| |d dd¡d|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¡| |dddd¡dS)Nr¢rf)ÚferretsÚhamstersrÁrT)ÚwaterÚfeed)ÚpetsÚsuppliesrtrwrbZblanketsrgrvrré rrsrNZmarmotséXécr2ru)rlrVrrsrªrq)r=rvrwr+ÚlZouterrrrÚtest_dict_proxy_nested¿sF    z&_TestContainers.test_dict_proxy_nestedcCsh| ¡}d|_d|_d|_| |j|jfd¡|`| t|ƒd¡| t|dƒ¡| t|dƒ ¡dS)NÚBobÚBuilderZhidden)r}r~zNamespace(name='Bob')rÚjob)Ú NamespacerrZ_hiddenrVrWrnrÂ)r=rÃrrrÚtest_namespaceísz_TestContainers.test_namespaceN) rFrGrHr[r_rbrfrprqr|rrrrrrZgs   .rZr&cCst |¡||Srr¶)r0r%rrrÚsqrüs r‚cCs||Srr)r0r1rrrÚmul srƒcCst |¡tddƒ‚dS)Nr0i)r?r r6r$rrrÚraise_large_valuerror s r„cCs|Srr©r0rrrÚidentity sr†c@s eZdZdZdd„Zdd„ZdS)Ú CountedObjectrcCs|jd7_t |¡SrM)Ú n_instancesrŠÚ__new__r·rrrr‰ szCountedObject.__new__cCst|ƒjd8_dSrM)r©rˆr_rrrÚ__del__ szCountedObject.__del__N)rFrGrHrˆr‰rŠrrrrr‡ sr‡c@s eZdZdS)Ú SayWhenErrorN©rFrGrHrrrrr‹ rr‹ccs8|dkrtdƒ‚t|ƒD]}||kr,tdƒ‚|VqdS)Nr2zSomebody said when)r‹rÖ)ÚtotalZwhenrÙrrrÚexception_throwing_generator s  rŽcseZdZe‡fdd„ƒZe‡fdd„ƒZdd„Zdd„Zd d „Zd d „Z d d„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zed+d,„ƒZd-d.„Zed/d0„ƒZd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Z ‡Z!S);Ú _TestPoolcstƒ ¡| d¡|_dSrÅ)ÚsuperÚ setUpClassÚPoolÚpoolr·©Ú __class__rrr‘! s z_TestPool.setUpClasscs(|j ¡|j ¡d|_tƒ ¡dSr)r“rr‹rÚ tearDownClassr·r”rrr–& s  z_TestPool.tearDownClasscCs@|jj}| |tdƒtdƒ¡| |tdddiƒtdd¡dS)N)rbrbrr0rTr…)r“ÚapplyrVr‚)r=ZpapplyrrrÚ test_apply- sz_TestPool.test_applyc Csh|jj}| |tttdƒƒƒtttttdƒƒƒƒ¡| |tttdƒƒddtttttdƒƒƒƒ¡dS)NrÁrµr©Ú chunksize)r“ÚmaprVr‚rªrÖ)r=ZpmaprrrÚtest_map2 s ,ÿz_TestPool.test_mapcCs€|jj}tttdƒtdddƒƒƒ}| |t|ƒtt t|¡ƒ¡tttdƒtdddƒƒƒ}| |t|ddtt t|¡ƒ¡dS)NrÁr]r2rµrzrr™)r“Ústarmaprªr4rÖrVrƒÚ itertools)r=ZpsmapÚtuplesrrrÚ test_starmap8 s ÿÿz_TestPool.test_starmapcCsDtttdƒtdddƒƒƒ}| |j t|¡ ¡tt  t|¡ƒ¡dS)Nrµrzr2) rªr4rÖrVr“Z starmap_asyncrƒr¬ržr)r=rŸrrrÚtest_starmap_asyncA sÿz_TestPool.test_starmap_asyncc Cs8| |j tttdƒƒ¡ ¡tttttdƒƒƒƒ¡dSr³)rVr“Ú map_asyncr‚rªrÖr¬r›r_rrrÚtest_map_asyncF sÿz_TestPool.test_map_asynccCsš|jdkr|j ¡ng}|jjtdg|j|jd ¡| dt |ƒ¡| dg|d¡|jjtdg|j|jd ¡| dt |ƒ¡|  |dt ¡dS)NrKÚ1)ÚcallbackÚerror_callbackrNrrRr¢) rirKrªr“r¢rÐrÚr%rVrsrqr6)r=Z call_argsrrrÚtest_map_async_callbacksJ s þ  þ z"_TestPool.test_map_async_callbackscCsp|jdkr| d |j¡¡Gdd„dtƒ}| t¡&|j t|ƒgd¡Wdƒn1sb0YdS)NrLrhc@seZdZdd„ZdS)z*_TestPool.test_map_unplicklable..AcSs tdƒ‚dS)Nz cannot pickler¼r_rrrrZ\ sz5_TestPool.test_map_unplicklable..A.__reduce__NrˆrrrrÚA[ sr¨rÁ) rirjrkrŠrâr½r“r›r‚)r=r¨rrrÚtest_map_unplicklableW s   z_TestPool.test_map_unplicklablecCsBz|jjtgddjtdWntjy<| d¡Yn0dS)NrNr™r–z2pool.map_async with chunksize stalled on null list)r“r¢r‚r¬rkrÚ TimeoutErrorr‚r_rrrÚtest_map_chunksizea sz_TestPool.test_map_chunksizecCsj|jdkr| d |j¡¡| t¡&|j ttddƒd¡Wdƒn1sR0Y| t¡&|j ttddƒd¡Wdƒn1s’0Y| t¡&|j ttddƒd¡Wdƒn1sÒ0YGdd„dƒ}| t¡"|j t|ƒd¡Wdƒn1s0Y| t¡"|j t|ƒd¡Wdƒn1s\0YdS) NrKrhrNr2rÁrTc@s$eZdZdd„Zdd„Zdd„ZdS)zE_TestPool.test_map_handle_iterable_exception..SpecialIterablecSs|Srrr_rrrÚ__iter__v szN_TestPool.test_map_handle_iterable_exception..SpecialIterable.__iter__cSst‚dSr)r‹r_rrrÚ__next__x szN_TestPool.test_map_handle_iterable_exception..SpecialIterable.__next__cSsdSrMrr_rrrrêz szM_TestPool.test_map_handle_iterable_exception..SpecialIterable.__len__N)rFrGrHr¬r­rêrrrrÚSpecialIterableu sr®) rirjrkrâr‹r“r›r‚rŽ)r=r®rrrÚ"test_map_handle_iterable_exceptiong s  4 4 4 2 z,_TestPool.test_map_handle_iterable_exceptioncCs<|j tdtf¡}t|jƒ}| |ƒd¡| |jt¡dS)Nrgé1) r“Ú apply_asyncr‚rkr:r¬rVrTr<©r=rXr¬rrrÚ test_async s z_TestPool.test_asynccCsD|j tdtdf¡}t|jƒ}|jtj|td|  |j t¡dS)Nrarr–) r“r±r‚rlr:r¬rârrªrTr<r²rrrÚtest_async_timeout‡ s z_TestPool.test_async_timeoutc CsÌ|j tttdƒƒ¡}| t|ƒtttttdƒƒƒƒ¡|j tttdƒƒ¡}tdƒD]}| t|ƒ||¡qV| t |j ¡|jjtttdƒƒdd}tdƒD]}| t|ƒ||¡q | t |j ¡dS©NrÁr'rµr™) r“Úimapr‚rªrÖrVr›r`râÚ StopIterationr­©r=rarÙrrrÚ test_imap s"  z_TestPool.test_imapcCs<|jdkr| d |j¡¡|j ttddƒd¡}| t|j ¡|j ttddƒd¡}| t|j ¡|j ttddƒd¡}t dƒD]}|  t |ƒ||¡q‚| t|j ¡|j ttddƒd ¡}t d ƒD]}|  t |ƒ||¡qÈ| t|j ¡|j ttddƒd ¡}t d ƒD]}|  t |ƒ||¡q| t|j ¡dS) NrKrhrNr2rÁrTrrgr¢rarf) rirjrkr“r¶r‚rŽrâr‹r­rÖrVr`r¸rrrÚ#test_imap_handle_iterable_exception› s$    z-_TestPool.test_imap_handle_iterable_exceptionc Csx|j tttdƒƒ¡}| t|ƒtttttdƒƒƒƒ¡|jjtttdƒƒdd}| t|ƒtttttdƒƒƒƒ¡dSrµ)r“Úimap_unorderedr‚rªrÖrVrmr›)r=rarrrÚtest_imap_unorderedµ s"z_TestPool.test_imap_unorderedcCsp|jdkr| d |j¡¡|j ttddƒd¡}| t|j ¡|j ttddƒd¡}| t|j ¡|j ttddƒd¡}t t tt t dƒƒƒƒ}| t¡<t dƒD]"}t |ƒ}| ||¡| |¡q¤Wdƒn1sÜ0Y|j ttddƒd ¡}t t tt t dƒƒƒƒ}| t¡>t dƒD]$}t |ƒ}| ||¡| |¡q&Wdƒn1sb0YdS) NrKrhrNr2rÁrTrrgr¢)rirjrkr“r»r‚rŽrâr‹r­rªr›rÖr`r«r$)r=raZexpected_valuesrÙrWrrrÚ-test_imap_unordered_handle_iterable_exception¼ s@ þþþ   *þ   z7_TestPool.test_imap_unordered_handle_iterable_exceptioncCs„|jdkrtnt}| ||jd¡| ||jd¡|jdkr€| d¡}z&| dt|jƒ¡W| ¡|  ¡n| ¡|  ¡0dS)NrKr2rrT) riÚ RemoteErrorr6râr’rVrsÚ_poolrr‹)r=Zexpected_errorrrrrÚtest_make_poolà sÿ   ÿz_TestPool.test_make_poolcCsP|jjtjdd„tdƒDƒdd}|j ¡t|jjƒ}|ƒ| |j d¡dS)NcSsg|]}d‘qS)r"rrôrrrröñ rz,_TestPool.test_terminate..i'rNr™r)) r“r¢r?r rÖrr:r‹Ú assertLessr<)r=rÛr‹rrrrËï sÿ  z_TestPool.test_terminatecCsz| d¡}| | tg¡g¡| t| tg¡ƒg¡| t| tg¡ƒg¡| | tg¡ ¡g¡|  ¡|  ¡dSrM) r’rVr›r‚rªr¶r»r¢r¬rr‹rÔrrrÚtest_empty_iterableù s z_TestPool.test_empty_iterablecCsˆ|jdkr„ttdƒƒ}dd„|Dƒ}| d¡,}| t|¡}| | ¡|¡Wdƒn1s`0Y| ¡|  t |jt|¡dS)NrJrÁcSsg|] }t|ƒ‘qSr)r‚rôrrrrö rz*_TestPool.test_context..r¢) rirªrÖr’r¢r‚rVr¬r‹râr6)r=ÚLrÜrr@rrrÚ test_context s    .z_TestPool.test_contextcCs tdƒ‚dS)Né{r¼r·rrrÚ_test_traceback sz_TestPool._test_tracebackc CsÒ|jdkrÎ| d¡T}z| |j¡Wn(tyP}z|}WYd}~nd}~00| d¡Wdƒn1sp0Y| ¡| t|ƒt ¡|  |j d¡|j }| t|ƒt jj¡| d|j¡tj ¡:}z|‚Wn t yütjt ¡ŽYn0Wdƒn1s0Y| d| ¡¡| d¡|}z| ttddƒd¡Wn*ty|}z|}WYd}~nd}~00| d¡| t|ƒt¡| |j d¡Wdƒn1s¼0Y| ¡dS)NrJrNzexpected RuntimeError)rÅz&raise RuntimeError(123) # some commentr2zexpected SayWhenError)rir’r—rÆÚ Exceptionr‚r‹rïr©r½rVrAÚ __cause__rr“ZRemoteTracebackr«Útbrrr‹rçÚ excepthookÚexc_infoÚgetvaluer›r‚rŽr‹)r=rr­ÚexcÚcauseÚf1rrrÚtest_traceback s<  (  4ÿ  .z_TestPool.test_tracebackcCs tdƒ‚dS)Nr˜r¼r·rrrÚ_test_wrapped_exception9 sz!_TestPool._test_wrapped_exceptionc Csl| d¡F}| t¡| |j¡Wdƒn1s80YWdƒn1sV0Y| ¡dSrM)r’râr½r—rÑr‹rÔrrrÚtest_wrapped_exception= s  Hz _TestPool.test_wrapped_exceptionc CsÀt ¡}| t¡†| d¡\}z.| tddg¡Wt d¡| ¡|  ¡nt d¡| ¡|  ¡0Wdƒn1s€0YWdƒn1sž0Y|  t ¡|d¡dS)Nr¢rrNr gÍÌÌÌÌÌì?) r?r@râr6r’r›r„r rr‹Ú assertGreater)r=Zt_startrrrrÚtest_map_no_failfastD s    þ Fz_TestPool.test_map_no_failfastcCshdd„tdƒDƒ}dd„|Dƒ}|j t|¡~t t¡| tdd„|Dƒƒdh¡| t j d¡dS)NcSsg|] }tƒ‘qSr)r‡rôrrrrö[ rz4_TestPool.test_release_task_refs..rÁcSsg|]}t |¡‘qSr)rërì)rõÚorrrrö\ rcss|] }|ƒVqdSrr)rõrðrrrrka rz3_TestPool.test_release_task_refs..r) rÖr“r›r†r?r rÓrVrår‡rˆ)r=ZobjsZrefsrrrÚtest_release_task_refsX s z _TestPool.test_release_task_refsc Csœ|jdkr| d¡| d¡}|Wdƒn1s80Y| t¡4|Wdƒn1sh0YWdƒn1s†0Y| ¡dS)NrKútest not applicable to managerrN)rirjr’râr6r‹©r=r“rrrÚ test_enterf s    <z_TestPool.test_entercCsv|jdkr| d¡| d¡}| ¡| ¡tjj|_t   dt f¡d}t   ¡Wdƒn1sh0YdS)NrKr×rNz%unclosed running multiprocessing pool) rirjr’rr‹rr“ZRUNÚ_staterZcheck_warningsÚResourceWarningÚ gc_collectrØrrrÚtest_resource_warningv s    ÿz_TestPool.test_resource_warning)"rFrGrHr1r‘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ÔrÖrÙrÝÚ __classcell__rrr”rr sB   $    & rcCs tdƒ‚dS)NÚkey)ÚKeyErrorrrrrÚraising† srácCsdd„S)NcSsdS)Né*rrrrrr¿Š rz%unpickleable_result..rrrrrÚunpickleable_result‰ srãc@s eZdZdZdd„Zdd„ZdS)Ú_TestPoolWorkerErrorsr>csjt d¡}dg‰‡fdd„}|jt|d}| t|j¡| ˆd¡| ˆdt¡|  ¡|  ¡dS)Nr¢cs |ˆd<dSrËr©rÍ©Z scratchpadrrÚerrback“ sz@_TestPoolWorkerErrors.test_async_error_callback..errback©r¦r) rr’r±rárâràr¬rnrqrr‹)r=rrçrXrrærÚtest_async_error_callback s  z/_TestPoolWorkerErrors.test_async_error_callbackcs ddlm}t d¡}tdƒD]l}dg‰‡fdd„}|jt|d}| ||j¡ˆd}|  |¡|  ˆd|¡|  |j ¡|  |j ¡q| ¡| ¡dS)Nr)ÚMaybeEncodingErrorr¢rcs |ˆd<dSrËrrårærrrç¦ sz?_TestPoolWorkerErrors.test_unpickleable_result..errbackrè)Úmultiprocessing.poolrêrr’rÖr±rãrâr¬rnrqZassertIsNotNonerÍrWrr‹)r=rêrZ iterationrçrXÚwrappedrrærÚtest_unpickleable_resultž s      z._TestPoolWorkerErrors.test_unpickleable_resultN)rFrGrHr[rérírrrrräŒ sräc@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú_TestPoolWorkerLifetimer>c Cstjddd}| dt|jƒ¡dd„|jDƒ}g}tdƒD]}| | t|f¡¡q.rµé2css|]}| ¡VqdSr©roròrrrrkÈ rzD_TestPoolWorkerLifetime.test_pool_worker_lifetime..rNcSsg|] }|j‘qSrrñròrrrröË r)rr’rVrsr¿rÖrÚr±r‚Ú enumerater¬Z_repopulate_poolÚallr?r rÓr§r³rmrr‹) r=rZorigworkerpidsrrÙr(rXZ countdownZfinalworkerpidsrrrÚtest_pool_worker_lifetime· s&    z1_TestPoolWorkerLifetime.test_pool_worker_lifetimecCsptjddd}g}tdƒD]}| | t|df¡¡q| ¡| ¡t|ƒD]\}}|  |  ¡t|ƒ¡qNdS)NrTrNrïrag333333Ó?) rr’rÖrÚr±r‚rr‹rõrVr¬)r=rrrÙr(rXrrrÚ%test_pool_worker_lifetime_early_closeÔ s z=_TestPoolWorkerLifetime.test_pool_worker_lifetime_early_closecCs*d}tjj d|¡\}}}| |d¡dS)NaŽif 1: from multiprocessing import Pool problem = None class A: def __init__(self): self.pool = Pool(processes=1) def test(): global problem problem = A() problem.pool.map(float, tuple(range(10))) if __name__ == "__main__": test() ú-cr)rrÚ script_helperÚassert_python_okrV©r=ÚcmdréÚoutrIrrrÚ>test_worker_finalization_via_atexit_handler_of_multiprocessingá s zV_TestPoolWorkerLifetime.test_worker_finalization_via_atexit_handler_of_multiprocessingN)rFrGrHr[r÷rørÿrrrrrî´ s rî)Ú BaseManagerÚ BaseProxyr¾c@s$eZdZdd„Zdd„Zdd„ZdS)ÚFooBarcCsdS)Núf()rr_rrrrHú szFooBar.fcCst‚dSr)r6r_rrrÚgü szFooBar.gcCsdS)Nú_h()rr_rrrÚ_hþ sz FooBar._hN)rFrGrHrHrrrrrrrù srccstdƒD]}||VqdSr³)rÖ)rÙrrrÚbaz s rc@s eZdZdZdd„Zdd„ZdS)Ú IteratorProxy)r­cCs|Srrr_rrrr¬ szIteratorProxy.__iter__cCs | d¡S)Nr­)Ú _callmethodr_rrrr­ szIteratorProxy.__next__N)rFrGrHZ _exposed_r¬r­rrrrr src@s eZdZdS)Ú MyManagerNrŒrrrrr  sr ÚFoo)ÚcallableÚBar)rHr)r Zexposed)r Z proxytypec@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) Ú_TestMyManagerr[cCs<tƒ}| ¡| |¡| ¡| |jjdtj f¡dSrË) r rŠÚcommonÚshutdownr«Ú_processrvrÃrÉ©r=rKrrrÚtest_mymanager s  z_TestMyManager.test_mymanagercCsLtƒ}| |¡Wdƒn1s&0Y| |jjdtj f¡dSrË)r rr«rrvrÃrÉrrrrÚtest_mymanager_context# s(z%_TestMyManager.test_mymanager_contextcCsPtƒ}| ¡|| |¡Wdƒn1s20Y| |jjd¡dSrË)r rŠrrVrrvrrrrÚ!test_mymanager_context_prestarted+ s (z0_TestMyManager.test_mymanager_context_prestartedcs| ¡‰| ¡‰| ¡}‡fdd„dDƒ}‡fdd„dDƒ}| |ddg¡| |ddg¡| ˆ ¡d¡| tˆj¡| ˆ d¡d¡| t ˆjd¡| ˆ ¡d¡| ˆ  ¡d ¡| ˆ d¡d¡| ˆ d¡d ¡| t |ƒd d„t d ƒDƒ¡dS) Ncsg|]}tˆ|ƒr|‘qSr©r©rõr)r˜rrrö7 rz)_TestMyManager.common..)rHrrcsg|]}tˆ|ƒr|‘qSrrr)Úbarrrrö8 rrHrrrrcSsg|] }||‘qSrrrôrrrröG rrÁ) r r rrVrHrâr6rr r¾rrªrÖ)r=rKrZ foo_methodsZ bar_methodsr)rr˜rr2 s z_TestMyManager.commonN)rFrGrHr[rrrrrrrrr s  rcCstSr)Ú_queuerrrrÚ get_queueO src@s eZdZdS)Ú QueueManagerNrŒrrrrrR src@s eZdZdS)Ú QueueManager2NrŒrrrrrV srÚ xmlrpclibc@s8eZdZdZgd¢Zedd…Zedd„ƒZdd„ZdS)Ú_TestRemoteManagerr[)ú hello worldNTç@uhallÃ¥ världenuпривіт Ñвітs hallå världenNcCs2t||td}| ¡| ¡}| t|jƒ¡dS)N©ÚaddressrmZ serializer)rÚ SERIALIZERÚconnectrrcÚtupler6©r‚r"rmrKrrrrÚ_putterg s ÿz_TestRemoteManager._puttercCs t d¡}ttjdf|td}| ¡| |j¡|j |j |j |fd}d|_ | ¡t |j |td}| ¡| ¡}| | ¡|j¡| t|jtj¡~dS)Né rr!r…T)r3ÚurandomrrÚHOSTr#rŠrärr|r'r"rprr$rrVr¬rÛrârÇrcr?r )r=rmrKrZmanager2rrrrÚ test_remoteq s"  ÿ ÿz_TestRemoteManager.test_remote) rFrGrHr[r6rÛr1r'r+rrrrr] s   rÚmd5c@s eZdZedd„ƒZdd„ZdS)Ú_TestManagerRestartcCs,t||td}| ¡| ¡}| d¡dS)Nr!r)rr#r$rrcr&rrrr'‘ s ÿz_TestManagerRestart._putterc Cs:t d¡}ttjdf|td}zv| ¡}|j}|j  ¡|  ¡|j |j |j|fd}|  ¡|  ¡| ¡}| | ¡d¡~Wt|dƒrª| ¡nt|dƒr¨| ¡0t||td}z|  ¡| |j¡Wndty4}zJ|jtjkrð‚t d¡t||td}t|dƒr | |j¡WYd}~n d}~00dS)Nr(rr!r…rrr)r3r)rrr*r#Z get_serverr"ÚlistenerrrŠr|r'r‹rrVr¬rÂrräÚOSErrorÚerrnoZ EADDRINUSEr?r )r=rmrKZsrvrÚaddrrrr­rrrÚtest_rapid_restart™ sD  ÿ   ÿ  ÿ  ÿ z&_TestManagerRestart.test_rapid_restartN)rFrGrHr1r'r2rrrrr-Ž s r-Úc@sìeZdZdZedd„ƒZdd„Zdd„Zdd „Zd d „Z ed d „ƒZ ed$dd„ƒZ e   ed¡dd„ƒZe   ed¡e  ejdkd¡e  edkd¡e   eedƒd¡dd„ƒƒƒƒZedd„ƒZe   ed¡e  ejdkd¡dd „ƒƒZd!d"„Zd#S)%Ú_TestConnectionrgcCs(t|jtƒD]}| |¡q | ¡dSr)r7Ú recv_bytesÚSENTINELÚ send_bytesr)r‚r%ÚmsgrrrÚ_echoÉ s z_TestConnection._echoc CsL| ¡\}}|j|j|fd}d|_| ¡gd¢}tdƒ}|d}t dttdƒƒ¡}|j dkrv|  t |  ¡ƒt ¡|  | |¡d¡|  | ¡|¡|  | |¡d¡|  | ¡|¡|j dkr t dd gd¡}t|ƒd gdt|ƒ} |  | |¡d¡|  | |¡t|ƒ|j¡|  t|ƒ| ¡t dd gd¡}d gd t|ƒd gd t|ƒ} |  | |¡d¡|  | |d |j¡t|ƒ|j¡|  t|ƒ| ¡ttd ƒƒ}|  | |¡d¡z| |¡} Wn8tjy} z|  | j|f¡WYd} ~ nd} ~ 00| d | ¡t|jƒ} |  | ƒd¡| | jd ¡|  | dƒd¡| | jd ¡|  | tƒd¡| | jt¡| d¡t  d¡|  | tƒd¡| | jd ¡|  | ¡d¡tdƒd} | | ¡|  | ¡| ¡| t!¡| "¡|j dkr@|  |j#d¡|  |j$d¡| %t&|j¡| %t&|j¡| '¡dS)Nr…T)rNr NrrÁrÙrfrJrrTrgz( zexpected BufferTooShort, got %sFr2r"ÚXi)(rˆr|r9rprŠr rRrªrÖrirVr©ÚfilenorÐr”rŒr7r5rsÚrecv_bytes_intoÚitemsizeÚ bytearrayrÚBufferTooShortrAr‚r:ršrTr<rkr?r r6rÚreadableÚwritablerâÚEOFErrorr‹)r=r%r5rrMr8ZlongmsgrSÚbufferrÜrXr­ršZreally_big_msgrrrÚtest_connectionÏ sv     ÿ$ ÿ &       z_TestConnection.test_connectioncCs¤|jdd\}}| | d¡d¡| | ¡d¡|jdkr | |jd¡| |jd¡| |jd¡| |jd¡| t|jd¡| t|j¡| t|j ¡dS)NFrƒrNrJTr¢) rˆrVr”rŒrir@rArâr/rš)r=ÚreaderÚwriterrrrÚtest_duplex_false s z!_TestConnection.test_duplex_falsecCst| ¡\}}|j|j|fd}d|_| ¡| ¡tdƒ}| |¡| |  ¡|¡| t ¡| ¡|  ¡dS)Nr…Tr¤) rˆr|r9rprŠrr r7rVr5r6r‹)r=r%r5rr8rrrÚtest_spawn_close+ s   z _TestConnection.test_spawn_closecCs:|jdkr| d |j¡¡tdƒ}| ¡\}}| |¡| | ¡|¡| |d¡| | ¡|dd…¡| |dd¡| | ¡|dd…¡| |d¡| | ¡td ƒ¡| |dd ¡| | ¡td ƒ¡| t |j|d ¡| t |j|d d¡| t |j|dd ¡| t |j|d¡| t |j|dd¡dS)NrJrhÚabcdefghijklmnopqrstuvwxyzrbrgrUéér3réérNr2rf) rirjrkr rˆr7rVr5râr6)r=r8rRrSrrrÚtest_sendbytes@ s&     z_TestConnection.test_sendbytesc CsXzt |¡Wn@tyN}z(|jtjkr8WYd}~dS‚WYd}~nd}~00dSdS)NFT)r3Úfstatr/r0ÚEBADF)r‚rQr­rrrÚ_is_fd_assigned` s z_TestConnection._is_fd_assignedFcCsd|r.tddƒD]}| |¡st | ¡|¡qt |¡}trJt |tj ¡}t  ||¡t  |¡dS)Nrr+) rÖrQr3Údup2r;rÚ recv_handleÚmsvcrtÚopen_osfhandlerNrr)r‚r%ÚdataZcreate_dummy_fdsrÙrQrrrÚ_writefdk s   z_TestConnection._writefdú$test needs multiprocessing.reductioncCsø|jdkr| d¡|jdd\}}|j|j|dfd}d|_| ¡| tj j tj j ¡t tj j dƒ6}|  ¡}tr€t |¡}t |||j¡Wdƒn1s¤0Y| ¡t tj j dƒ }| | ¡d¡Wdƒn1sê0YdS) NrJúonly makes sense with processesTrƒsfoor…ÚwbÚrb)rirjrˆr|rWrprŠrärrrCrBrEr;rTZ get_osfhandlerÚ send_handlerr‹rVrF)r=r%r5rrHrQrrrÚtest_fd_transferw s   .z _TestConnection.test_fd_transferr#ú*test semantics don't make sense on Windowsr+z)largest assignable fd number is too smallrRztest needs os.dup2()c Cs>|jdkr| d¡|jdd\}}|j|j|ddfd}d|_| ¡| tj j tj j ¡t tj j dƒx}|  ¡}tdtƒD]}| |¡s~qœq~| d ¡t ||¡zt |||j¡Wt |¡n t |¡0Wdƒn1sè0Y| ¡t tj j d ƒ }| | ¡d¡Wdƒn1s00YdS) NrJrYTrƒsbarr…rZr+z2could not find an unassigned large file descriptorr[)rirjrˆr|rWrprŠrärrrCrBrEr;rÖÚMAXFDrQr‚r3rRrr\rrr‹rVrF)r=r%r5rrHrQZnewfdrrrÚtest_large_fd_transferŠ s(     6z&_TestConnection.test_large_fd_transfercCst | ¡d¡dS)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)NrJrYTrƒr…) rirjrˆr|rcrprŠrâr½rrSr‹©r=r%r5rrrrÚtest_missing_fd_transfer¯ s  z(_TestConnection.test_missing_fd_transferc CsÒ| ¡\}}|p|L| d¡| | ¡d¡|jdkrT| |j¡| |j¡Wdƒn1sh0YWdƒn1s†0Y|jdkrÎ| |j¡| |j¡| t |j¡| t |j¡dS©NéÁrJ) rˆr”rVrŒrir~Úclosedrnrâr/rQrrrrľ s     H   z_TestConnection.test_contextN)F)rFrGrHr[r1r9rDrGrHrNrQrWr7r2Ú HAS_REDUCTIONr]rYrçrúr_rÂr3r`rcrerÄrrrrr4Å s< O       ÿ ÿ ÿ   r4c@s6eZdZdZdd„Zdd„Ze ej d¡dd„ƒZ d S) Ú _TestListenerr>cCsB|jjD]4}|jj|d}| |j¡| t|jj|j|¡qdS)N©Úfamily)Ú connectionÚfamiliesÚListenerrärrâr/r")r=rlr{rrrÚtest_multiple_bindÒ s    ÿz _TestListener.test_multiple_bindc Cs¶|j ¡€}|j |j¡R}| ¡*}| d¡| | ¡d¡Wdƒn1sT0YWdƒn1sr0YWdƒn1s0Y|jdkr²|  t |j¡dSrf© rmroÚClientr"Úacceptr”rVrŒrirâr/)r=r{rer+rrrrÄÙ s   j z_TestListener.test_contextz"test needs abstract socket supportc Cs¸|j d¡€}|j |j¡R}| ¡*}| d¡| | ¡d¡Wdƒn1sV0YWdƒn1st0YWdƒn1s’0Y|jdkr´|  t |j¡dS)Nz somethingrgrJrq)r=r.Úclientr+rrrÚtest_abstract_socketã s  j z"_TestListener.test_abstract_socketN) rFrGrHr[rprÄr7r2rÚabstract_sockets_supportedrurrrrrjÎ s ÿrjc@s4eZdZdZedd„ƒZdd„Zdd„Zdd „Zd S) Ú_TestListenerClientrgcCs"|j |¡}| d¡| ¡dS)Nr¤)rmrrr”r)r‚r"r%rrrr}ô s  z_TestListenerClient._testcCsj|jjD]\}|jj|d}|j|j|jfd}d|_| ¡| ¡}|  |  ¡d¡|  ¡|  ¡qdS)Nrkr…Tr¤) rmrnror|r}r"rprŠrsrVrŒr‹r)r=rlr{rr%rrrÚtest_listener_clientú s z(_TestListenerClient.test_listener_clientcCsj|j ¡}|j|j|jfd}d|_| ¡t d¡|  ¡}|  |  ¡d¡|  ¡|  ¡|  ¡dS)Nr…TrNr¤)rmror|r}r"rprŠr?r rsrVrŒrr‹)r=r{rr%rrrÚtest_issue14725 s  z#_TestListenerClient.test_issue14725cCsh|jjD]Z}|jj|d}|j |j¡}| ¡}| d¡| | d¡¡|  ¡|  ¡|  ¡qdS)NrkóhellorN) rmrnrorrr"rsr7rnršr)r=Úfamr{rerRrrrÚtest_issue16955 s  z#_TestListenerClient.test_issue16955N) rFrGrHr[r1r}rxryr|rrrrrwð s   rwc@sTeZdZdZdd„Zedd„ƒZdd„Zedd „ƒZd d „Z ed d „ƒZ dd„Z dS)Ú _TestPollrgcCsJ| ¡\}}| | ¡d¡| d¡| | ¡d¡| | ¡d¡dS)NFrT)rˆrVršr7rQrrrÚtest_empty_string$ s   z_TestPoll.test_empty_stringcCs*|D]}t d¡| |¡q| ¡dS©Nr")r?r r7r)r‚r%Ústringsr rrrÚ_child_strings+ s  z_TestPoll._child_stringscCsrd}| ¡\}}|j|j||fd}| ¡|D]4}tdƒD]}| d¡r<qPq<| ¡}| ||¡q0| ¡dS)N)rzróaóbrsbyerslopr…éÈró) rˆr|rrŠrÖršr5rVr‹)r=r€rRrSrr rÙr0rrrÚ test_strings2 s   z_TestPoll.test_stringscCs| d¡dSra)rš)r‚r@rrrÚ_child_boundariesA sz_TestPoll._child_boundariescCsr| d¡\}}|j|j|fd}| ¡t d¡ddg}|D]}| |¡q>| ¡| ¡|  |  ¡|¡dS)NFr…r¢sfirstssecond) rˆr|r†rŠr?r r7rr‹r«r5)r=r@rKrrÃryrrrÚtest_boundariesI s  z_TestPoll.test_boundariescCs"| d¡| d¡| d¡dS)Nr‚rƒócd)r7)r‚rSrrrÚ_child_dont_mergeU s  z_TestPoll._child_dont_mergecCsà| ¡\}}| | d¡d¡| | d¡d¡|j|j|fd}| ¡| | ¡d¡| | d¡d¡| | d¡d¡| | ¡d¡| | d¡d¡| | d¡d¡| | d¡d¡| | ¡d ¡| ¡dS) Nr&Fr"r…r‚rTrƒrˆ)rˆrVršr|r‰rŠr5r‹)r=rRrSrrrrÚtest_dont_merge[ s z_TestPoll.test_dont_mergeN) rFrGrHr[r~r1rr…r†r‡r‰rŠrrrrr} s    r}rXc@sPeZdZdZedd„ƒZedd„ƒZedd„ƒZdd „Zed d „ƒZ d d „Z dS)Ú_TestPicklingConnectionsr>cCsddlm}|jtjddS)Nr)Úresource_sharerr–)rrŒr<rr›)r‚rŒrrrr–x s z&_TestPicklingConnections.tearDownClasscCs–|D]@}|jj|d}| |j¡| ¡}| |¡| ¡| ¡qt tj df¡}| |  ¡¡| ¡\}}| |¡| ¡| ¡|  ¡dS)Nrkr) rmror”r"rsrÚsocketÚ create_serverrr*Ú getsocknamerŒ)r‚r%rnr{r{Únew_connr1rrrÚ _listener} s     z"_TestPicklingConnections._listenercCsxt|jdƒD]*\}}|j |¡}| | ¡¡| ¡q | ¡\}}t ¡}| |¡|  | ¡¡| ¡| ¡dSr) r7rŒrmrrr”r8rrr$Úsendall)r‚r%r"r8rtrrrÚ_remote s    z _TestPicklingConnections._remotecCs`|jj}| ¡\}}|j|j||fd}d|_| ¡| ¡| ¡\}}|j|j|fd}d|_| ¡| ¡|D]D}d|  d¡} |  ¡} |  | | f¡|  ¡} |  |   ¡|   ¡¡qv|  d¡tdƒ} |  ¡} |  | | f¡|  ¡} g} |   d¡} | sq|  | ¡qðd | ¡} |  | |   ¡¡|  ¡|  d¡| ¡| ¡| ¡| ¡dS)Nr…TzThis connection uses family %sÚasciiz$This connection uses a normal socketrµr)rmrnrˆr|r‘rprŠrr“r rŒr”rVr8r rÚr‹)r=rnZlconnZlconn0ZlprZrconn0Zrpr{r8r"rÚbufr rrrÚ test_picklingŸ sF       z&_TestPicklingConnections.test_picklingcCsD| ¡}| d¡| ¡| ¡}| ¡}| |d¡| ¡dS)Nú all is wellr¢)rŒr”r)r‚r%rKr@r8rrrÚ child_accessÍ s z%_TestPicklingConnections.child_accesscCs¾| ¡\}}|j|j|fd}d|_| ¡| ¡|jdd\}}| |¡| ¡| | ¡d¡| ¡|jdd\}}| |¡| ¡| d¡| ¡| | ¡d¡|  ¡dS)Nr…TFrƒr—ZfoobarZ foobarfoobar) rˆr|r˜rprŠrr”rVrŒr‹)r=r%r5rr@rKrrrÚ test_accessÙ s"    z$_TestPicklingConnections.test_accessN) rFrGrHr[r1r–r‘r“r–r˜r™rrrrr‹r s   . r‹cs<eZdZdZ‡fdd„Z‡fdd„Zdd„Zdd „Z‡ZS) Ú _TestHeapr>cs*tƒ ¡tjjj|_tj ¡tjj_dSr)rrÿrrÛrÜÚ_heapÚold_heapZHeapr_r”rrrÿþ s  z_TestHeap.setUpcs|jtjj_tƒ ¡dSr)rœrrÛrÜr›rrr_r”rrrs z_TestHeap.tearDownc Csjd}d}g}tjjj}d|_t|ƒD]L}tt dd¡dƒ}tj |¡}|  |¡t |ƒ|krnt  |¡}||=~q$|j bg}d} d} t |j ¡ƒD]@} | D]6\} } }|  |j | ¡| ||| df¡| || 7} qžq–|j ¡D]B\} }|D]4\} }|  |j | ¡| ||| df¡| || 7} qîqâ| | | tdd „|jDƒƒ¡| ¡tt |ƒdƒD]n}||dd …\} } }||ddd …\}}}| |kr¾| ||j| j¡| |d¡n | ||¡q^Wdƒn1sä0Yt |¡|r | ¡qø| |j|j¡| t |jƒd¡| t |jƒd¡| t |jƒd|j¡| t |jƒd¡dS) NéˆrórrNr'ÚfreeÚoccupiedcss|] }|jVqdSr©rU)rõÚarenarrrrk.rz&_TestHeap.test_heap..rT)rrÛrÜr›Z_DISCARD_FREE_SPACE_LARGER_THANrÖrÐÚrandomÚlognormvariaterÚrsÚ randrangerãrªZ _len_to_seqr6Z_arenasÚindexZ_allocated_blocksrrVÚsumÚsortrUÚshufflereZ_n_freesZ _n_mallocsZ_pending_free_blocks)r=Z iterationsZ maxblocksZblocksrÛrÙrUrSröržrŸrÃr¡rŠr<Z arena_blocksZnarenaZnstartZnstoprrrÚ test_heaps`       ÿ ÿ ÿ 0  z_TestHeap.test_heapcCsxt ¡st ¡| tj¡t ¡}|jtjg|¢RŽt d¡tdƒD](}tj   d¡}tj   d¡}||_ ||_ qJdS)NrÁrrN) ríÚ isenabledÚenableräÚdisableÚ get_thresholdÚ set_thresholdrÖrrÛrÜZbuddy)r=Z thresholdsrÙrRrSrrrÚtest_free_from_gcHs     z_TestHeap.test_free_from_gc) rFrGrHr[rÿrr©r¯rÞrrr”rršú s   @ršc@s"eZdZdefdefdefgZdS)Ú_Foor0r1ÚzN)rFrGrHr.r/r0Z_fields_rrrrr°bsýr°c@s>eZdZdZdd„Zedd„ƒZddd„Zd d „Zd d „Z d S)Ú_TestSharedCTypesr>cCsts| d¡dSr2r3r_rrrrÿmsz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|ƒƒD]}||d9<q`dSr¬)rWr0r1rÖrs)r‚r0r1r±r˜rSÚstringrÙrrrÚ_doubleqsz_TestSharedCTypes._doubleFc Cstdd|d}ttd|d}ttd|d}ttdd|d}|jdttd ƒƒ|d}|jd d |d}td ƒ|_|j |j ||||||fd }d|_ |  ¡|  ¡| |jd¡| |jd¡| |jd¡| |jd¡| |jd¡td ƒD]} | || | d¡qì| |jtdƒ¡dS)NrÙrgr@gUUUUUUÕ?r.rTr¢r+rÁrerr¤r…TégUUUUUUå?r/raç@Z hellohello)rr/r0r°rQrªrÖr rWr|r´rprŠr‹rVrPr0r1) r=r¡r0r1r±r˜rSr³rrÙrrrÚtest_sharedctypes|s&  z#_TestSharedCTypes.test_sharedctypescCs|jdddS)NTr@)r·r_rrrÚtest_synchronize“sz"_TestSharedCTypes.test_synchronizecCsTtdddƒ}t|ƒ}d|_d|_d|_| |jd¡| |jd¡| |jd¡dS)Nr¢ç@r.r)r°r r0r1r±rVrP)r=r˜rrrrÚ test_copy–s z_TestSharedCTypes.test_copyN)F) rFrGrHr[rÿr1r´r·r¸rºrrrrr²is r²z&requires multiprocessing.shared_memoryc@s€eZdZdZedd„ƒZdd„Zdd„Ze  e j dkd ¡d d „ƒZ e  e j dkd ¡d d„ƒZ dd„Zdd„Zdd„Zdd„ZdS)Ú_TestSharedMemoryr>cCs8t|tƒrt |¡}n|}||jdt|ƒ…<| ¡dSr)rrWr Ú SharedMemoryr•rsr)Zshmem_name_or_objZ binary_dataZ local_smsrrrÚ!_attach_existing_shmem_then_write§s   z3_TestSharedMemory._attach_existing_shmem_then_writec sÖtjdddd}| |j¡| |jd¡| |jd¡| t|j ƒ|j¡d|j d<| |j dd¡t d¡}| |j dd¡|  ¡tjdd|jd}|  |jd|j¡|  ¡|  t ¡tjdd dWdƒn1sê0Y|  t ¡tjd d Wdƒn1s"0Ytj d ¡”}tj‰d dg}‡fdd„|Dƒ}||_tjddd}| |j¡| |j|d¡||_tjddd}| |j¡| |j|d¡Wdƒn1sÔ0Ytjrj|  t¡htjdddd}z<| |jd¡t d¡} |  ¡|   ¡|  ¡W| ¡n | ¡0Wdƒn1s`0Y|  t¡ tjdddd} Wdƒn1sœ0YtjràGdd„dtjƒ} | dƒ} | | j|j¡|   ¡|  t¡"t d¡} |  ¡Wdƒn1s0Y|  ¡|  t ¡tjddd}Wdƒn1sV0Y|  t ¡tjddd}Wdƒn1s0Y|  t ¡tjdd }Wdƒn1sÈ0YdS)NZ test01_tsmbTé©ÚcreaterUrârrr éþÿÿÿF©rÀz,multiprocessing.shared_memory._make_filenameZ test01_fnZ test02_fncsg|] }ˆ|‘qSrrr©Z NAME_PREFIXrrröØrz?_TestSharedMemory.test_shared_memory_basics..rNZtest01_dblunlinkrc@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics..OptionalAttachSharedMemoryN)rFrGrHr3rOÚO_RDWRZ_flagsrrrrÚOptionalAttachSharedMemory srÅZtest01_nottherer2)r r¼rärCrVrr…rUrsr•rrÁrâr6r7ÚmockZpatchZ_SHM_NAME_PREFIXZ side_effectÚ_nameZ _USE_POSIXÚFileNotFoundErrorÚFileExistsError)r=ÚsmsZalso_smsZsame_smsZmock_make_filenameÚnamesZshm1Zshm2Zsms_unoZsms_duoZthere_can_only_be_one_smsrÅZok_if_exists_smsZnonexisting_smsZ sms_invalidrrÃrÚtest_shared_memory_basics°s†    , ,ÿ  2 ý  4 ý&  ( . . z+_TestSharedMemory.test_shared_memory_basicscCs°tjddd}| |j¡|j|j|jdfd}d|_| ¡|  ¡|  t |j dd…ƒd¡|j|j|dfd}d|_| ¡|  ¡|  t |j dd…ƒd¡|  ¡dS)NTr¾r¿showdyr…rbsHELLO)r r¼rärCr|r½rrprŠr‹rVrrr•r)r=rÊrrrrÚ#test_shared_memory_across_processes's& þþz5_TestSharedMemory.test_shared_memory_across_processesrz#not feasible in non-posix platformscCsˆtj ¡}| ¡| tdƒ¡}t |jj t j ¡| tdƒ¡}|  t ¡"t t ¡t j ¡Wdƒn1sr0Y| ¡dSr³)rÚmanagersÚSharedMemoryManagerrŠÚ ShareableListrÖr3rÌrrrÃr.rârÔrur)r=ÚsmmÚslZsl2rrrÚ4test_shared_memory_SharedMemoryServer_ignores_sigintCs  0zF_TestSharedMemory.test_shared_memory_SharedMemoryServer_ignores_sigintzresource_tracker is posix onlycCs(d}tjj d|¡\}}}| |¡dS)NzÞif 1: from multiprocessing.managers import SharedMemoryManager smm = SharedMemoryManager() smm.start() sl = smm.ShareableList(range(10)) smm.shutdown() rù)rrrúrûr~rürrrÚ>test_shared_memory_SharedMemoryManager_reuses_resource_tracker[s zP_TestSharedMemory.test_shared_memory_SharedMemoryManager_reuses_resource_trackerc sªtj ¡‰| t¡ˆjddWdƒn1s60Yˆ ¡‡fdd„tddƒDƒ}‡fdd„tdd d ƒDƒ}tj |d j j d }|  t |ƒd¡tj|d j d }| t |jƒd¡|d j }ˆ ¡tjd kr| t¡tj|d }Wdƒn1s0Ytj ¡.}|  d¡}|jd d} |j j }Wdƒn1sX0Ytjd kr¦| t¡tj |d } Wdƒn1sœ0YdS)Nr]r csg|]}ˆ t|ƒ¡‘qSr)rÐrÖrô©Zsmm1rrröurzS_TestSharedMemory.test_shared_memory_SharedMemoryManager_basics..rbrÁcsg|]}ˆj|d‘qS)r )r¼)rõr(rÕrrrövrr(é€ér©rr#Úhowdy)rrÎrÏrâr6r¼rŠrÖr rÐÚshmrrVrsr…r•rrçrúrÈ) r=ZlolZlomZdoppleganger_list0Zdoppleganger_shm0Z held_nameZ absent_shmZsmm2rÒrÚZ absent_slrrÕrÚ-test_shared_memory_SharedMemoryManager_basicsps,  *   ,   (  z?_TestSharedMemory.test_shared_memory_SharedMemoryManager_basicsc Cst gd¢¡}| |jj¡| |jd¡| t|ƒd¡t  ¡`t  d¡|  t ¡|  d¡Wdƒn1sx0Y| |  d¡d¡Wdƒn1s¨0Y| |dd ¡| |d d ¡| t|ƒd¡d |d<| |dd ¡d |d<| |dd ¡| |jd¡| t d¡d|d<Wdƒn1sL0Y| |dd ¡d|d<| |dd¡| |dd¡| t d¡d|d<Wdƒn1sº0Y| |dd¡| t d¡d|d<Wdƒn1s0Y| |dd¡t  ¡Pt  d¡| | d ¡d¡| | d¡d¡| | d¡d¡Wdƒn1sz0Ytj|dd}zˆ| |jj|jj¡| d|jj¡| t|ƒt|ƒ¡| |j|j¡d|d<| |dd¡| |dd¡|j ¡W|j ¡n |j ¡0tj|jjd}| |jj|jj¡d|d<| |dd¡|j ¡|j ¡t ¡}z~| t|ƒd¡| |jd¡| | d¡d¡|  t ¡|  d¡Wdƒn1sÞ0Y|j ¡W|j ¡n |j ¡0dS) N)rÙóHoWdYgX9´ÈvqÀrµNTrâz8s8sdqxxxxxx?xxxxxxxx?qrgÚignoreZ100rµrTrrÙrÁTrâZsomerfz8s8sdq8sxxxxxxx?qzexceeds available storagez far too manyuencodésrNrÜu encodéess 123456789r¢sadiosZtest03_duplicaterØéMr2ipr3Úany)r rÐrärÚrCrVrkrsÚwarningsÚcatch_warningsÚ simplefilterrâr6r¥r%r™r r³rrªr)r=rÒZsl_copyZ sl_tetheredZempty_slrrrÚ'test_shared_memory_ShareableList_basicsŽsŽÿ   (0þÿ(ÿ(ÿ(  2    * z9_TestSharedMemory.test_shared_memory_ShareableList_basicscCsæt tdƒ¡}| |jj¡t |¡}t |¡}|  t |tjƒ¡|  |dd¡|  ||u¡d|d<|  |dd¡dt |jjƒ}t tdƒ¡}| |jj¡t |¡}|  t |ƒt |ƒk¡|j ¡|j ¡|j ¡dS)NrÁr2r]ÚchangedrfrRi)r rÐrÖrärÚrCÚpickleÚdumpsÚloadsrnrr~rVrsrr)r=rÒZ serialized_slZdeserialized_slrZ larger_slZserialized_larger_slrrrÚ)test_shared_memory_ShareableList_picklingís&   ÿ   z;_TestSharedMemory.test_shared_memory_ShareableList_picklingc Csöd}tjtjdd|gtjtjdÀ}|j ¡ ¡ ¡}|  ¡|  ¡t   ¡t j}d}t   ¡|kr¨t  |¡t|ddƒ}ztj|dd }WqXty¤Yq°YqX0qXtd ƒ‚tjd krÔ|j ¡ ¡}| d |¡Wdƒn1sè0YdS) 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) ú-Erùrr"r¢rbFrÂzJA SharedMemory segment was leaked after a process was abruptly terminated.rz[resource_tracker: There appear to be 1 leaked shared_memory objects to clean up at shutdown)Ú subprocessÚPopenrçÚ executableÚPIPErÚreadlineÚstripÚdecoderr%r?r@rr›r Úminr r¼rÈrœr3rr rFr«)r=rýrrÚdeadlinerCrÑrIrrrÚ4test_shared_memory_cleaned_after_process_terminations2 þ     þzF_TestSharedMemory.test_shared_memory_cleaned_after_process_terminationN)rFrGrHr[r“r½rÌrÍr7rYr3rrÓrÔrÛrãrèrórrrrr»¡s w  _r»c@s<eZdZdZdd„Zdd„Zedd„ƒZdd „Zd d „Z d S) Ú _TestFinalizer>cCstj ¡|_tj ¡dSr)rÚ_finalizer_registryr Úregistry_backuprr_rrrrÿ9s z_TestFinalize.setUpcCs| tj¡tj |j¡dSr)r~rrõÚupdaterör_rrrr=s z_TestFinalize.tearDownc CsGdd„dtƒ}|ƒ}tj||jdd~|ƒ}tj||jdd}|ƒ|ƒ~|ƒ}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..FooNrŒrrrrr Csr )rRr¾)rS)re)Úd10rN)rAÚ exitpriority)Úd01r)Úd02)Úd03©r­iöÿÿÿ)ÚSTOPiœÿÿÿ)rŠrÚFinalizer”Ú_exit_functionrr3Ú_exit) r‚r%r rRrSZclose_brerørúrûrürrrÚ_test_finalizeAs0z_TestFinalize._test_finalizecCs^| ¡\}}|j|j|fd}d|_| ¡| ¡dd„t|jdƒDƒ}| |gd¢¡dS)Nr…TcSsg|]}|‘qSrr)rõryrrrröorz/_TestFinalize.test_finalize..rþ)rRrSrørürûrúr­) rˆr|rrprŠr‹r7rŒrV)r=r%r5rrÛrrrÚ test_finalizegs z_TestFinalize.test_finalizec s dd„‰G‡fdd„dtƒ‰d‰d‰‡‡fdd„}‡‡‡fdd „}t ¡}t ¡}z–t d ¡t d d d ¡tj|d tj|d g}t j   |¡t   d ¡d‰Wdƒn1s´0Yˆdurʈ‚Wt |¡tj|Žt ¡nt |¡tj|Žt ¡0dS)NcSsdSrrrrrrÚcbtsz,_TestFinalize.test_thread_safety..cbcseZdZ‡fdd„ZdS)z-_TestFinalize.test_thread_safety..Foocs"||_tj|ˆt dd¡ddS)NrNrµ)rù)rìrrÿr¢Úrandintr_©rrrr>xsz6_TestFinalize.test_thread_safety..Foo.__init__N)rFrGrHr>rrrrr wsr Fc sRˆsNt t ¡d¡z t ¡WqtyJ}z|‰WYd}~qd}~00qdSr)r?r r¢rÚ_run_finalizersrÇrý)rÍÚfinishrrÚrun_finalizers€s  z8_TestFinalize.test_thread_safety..run_finalizersc sdi}ˆs`z$‡fdd„tdƒDƒ|t d¡<Wqty\}z|‰| ¡WYd}~qd}~00qdS)Ncsh|] }ˆƒ’qSrrrô)r rrÚ ’rzL_TestFinalize.test_thread_safety..make_finalizers..rÁrb)rÖr¢Ú getrandbitsrÇr)r+r­)r rÍrrrÚmake_finalizers‹s$z9_TestFinalize.test_thread_safety..make_finalizersgíµ ÷ư>rbryr¶T)rŠrçÚgetswitchintervalrír­Úsetswitchintervalr®r¯rrrZ start_threadsr?r rî)r=r r Z old_intervalZ old_thresholdrLr)r rrÍrrÚtest_thread_safetyrs2     ÿ "   þ  z _TestFinalize.test_thread_safetyN) rFrGrHr[rÿrr1rrrrrrrrô5s % rôc@seZdZdd„Zdd„ZdS)Ú_TestImportStarcCshddl}tj tj¡}tj | |¡d¡}| |¡}dd„|Dƒ}dd„|Dƒ}| d¡|  d¡|S)Nrz*.pycSs(g|] }tj tj |¡d¡d‘qS)rNr)r3ÚpathÚsplitextÚsplit)rõrHrrrrö´rz4_TestImportStar.get_module_names..cSsg|] }d|‘qS)zmultiprocessing.r)rõrrrrröµrzmultiprocessing.__init__r) Úglobr3rÚdirnamerÚ__file__r‹Úescaper$rÚ)r=rZfolderÚpatternÚfilesÚmodulesrrrÚget_module_names¯s   z _TestImportStar.get_module_namescCs´| ¡}tjdkr2| d¡| d¡| d¡n| d¡tsJ| d¡tdur\| d¡|D]N}t|ƒtj|}| t |dƒ|¡|j D]}| t ||ƒd||f¡qŽq`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) rrçrúr$rir.rrrnrÂr)r=rrÚmodÚattrrrrÚ test_importºs&          þz_TestImportStar.test_importN)rFrGrHrrrrrrr­s rc@s,eZdZdZdd„Zedd„ƒZdd„ZdS) Ú _TestLoggingr>cCsDt ¡}| tj¡| |du¡| d¡| d¡| t¡dS)Nzthis will not be printedz nor will this) rÚ get_loggerÚsetLevelrÚ SUBWARNINGrnÚdebugÚinfoÚ LOG_LEVEL)r=ÚloggerrrrÚtest_enable_loggingÜs    z _TestLogging.test_enable_loggingcCst ¡}| | ¡¡dSr)rr!r”ÚgetEffectiveLevel)r‚r%r'rrrÚ _test_leveläsz_TestLogging._test_levelc CsÜd}d}t ¡}t ¡}|j}tjdd\}}| |¡|j|j|fd}|  ¡|  ||  ¡¡|  ¡|  ¡| tj¡| |¡|j|j|fd}|  ¡|  ||  ¡¡|  ¡|  ¡| |¡|jtddS)Nr(é%Frƒr…)Úlevel)rr!ÚloggingÚ getLoggerr,rˆr"r|r*rŠrVrŒr‹rÚNOTSETr&) r=ZLEVEL1ZLEVEL2r'Z root_loggerZ root_levelrErFrrrrÚ test_levelés*    z_TestLogging.test_levelN)rFrGrHr[r(r1r*r0rrrrr Øs  r c@s6eZdZdZedd„ƒZe ee dƒd¡dd„ƒZ dS) Ú_TestPollEintrr>cCst d¡t |tj¡dSr)r?r r3rÌrÃÚSIGUSR1)r‚rrrrÚ_killer!s z_TestPollEintr._killerr2úrequires SIGUSR1c s¾dg‰‡fdd„}t ¡}t tj|¡}z€|j|j|fd}| ¡z,|jtjdd}| ¡|  ¡W|  ¡n |  ¡0|  ˆd¡|  |j d¡Wt tj|¡nt tj|¡0dS)NFcs dˆd<dS)NTrrr¾©Z got_signalrrÚrecord)sz._TestPollEintr.test_poll_eintr..recordr…)r¢r) r3rurÃr2r|r3rŠr?r r‹rnrVrv)r=r6rZ oldhandlerZkillerrrr5rÚtest_poll_eintr&s  z_TestPollEintr.test_poll_eintrN) rFrGrHr[r1r3r7r2rÂrÃr7rrrrr1s  r1c@s eZdZe ed¡dd„ƒZdS)ÚTestInvalidHandleúskipped on Windowsc Cs^tj d¡}z.z | ¡Wnttfy0Yn0Wd|_nd|_0| ttftjjd¡dS)NiÈM®r2)rrmÚ Connectionršr6r/Ú_handlerârbrrrÚtest_invalid_handlesAs   ÿz&TestInvalidHandle.test_invalid_handlesN)rFrGrHr7rYÚWIN32r<rrrrr8?s r8c@seZdZdd„Zdd„ZdS)Ú OtherTestcCs,Gdd„dtƒ}| tjtjj|ƒd¡dS)Nc@seZdZdd„Zdd„ZdS)zFOtherTest.test_deliver_challenge_auth_failure.._FakeConnectioncSsdS)Nósomething bogusr©r=rUrrrr5WszQOtherTest.test_deliver_challenge_auth_failure.._FakeConnection.recv_bytescSsdSrr©r=rVrrrr7YszQOtherTest.test_deliver_challenge_auth_failure.._FakeConnection.send_bytesN)rFrGrHr5r7rrrrÚ_FakeConnectionVsrBóabc)rŠrârÚAuthenticationErrorrmÚdeliver_challenge©r=rBrrrÚ#test_deliver_challenge_auth_failureUs þz-OtherTest.test_deliver_challenge_auth_failurecCs,Gdd„dtƒ}| tjtjj|ƒd¡dS)Nc@s$eZdZdd„Zdd„Zdd„ZdS)zEOtherTest.test_answer_challenge_auth_failure.._FakeConnectioncSs d|_dSrË)r r_rrrr>aszNOtherTest.test_answer_challenge_auth_failure.._FakeConnection.__init__cSs2|jd7_|jdkr tjjS|jdkr.dSdS)NrNr¢r?r)r rrmÚ CHALLENGEr@rrrr5cs   zPOtherTest.test_answer_challenge_auth_failure.._FakeConnection.recv_bytescSsdSrrrArrrr7jszPOtherTest.test_answer_challenge_auth_failure.._FakeConnection.send_bytesN)rFrGrHr>r5r7rrrrrB`srBrC)rŠrârrDrmÚanswer_challengerFrrrÚ"test_answer_challenge_auth_failure_s  þz,OtherTest.test_answer_challenge_auth_failureN)rFrGrHrGrJrrrrr>Rs r>cCs|jd7_dSrM)r)ÚnsrrrÚ initializertsrLc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTestInitializerscCs"t ¡|_|j ¡|_d|j_dSrË)rÚManagerÚmgrr€rKrr_rrrrÿys  zTestInitializers.setUpcCs|j ¡|j ¡dSr)rOrr‹r_rrrr~s zTestInitializers.tearDowncCsNtj ¡}| t|jd¡| t|jf¡| |jj d¡|  ¡|  ¡dSrM) rrÎÚ SyncManagerrâÚ TypeErrorrŠrLrKrVrrr‹)r=rrrrÚtest_manager_initializer‚s  z)TestInitializers.test_manager_initializercCsH|jttjddt dt|jf¡}| ¡| ¡| |jj d¡dS)NrN)rL) rârQrr’rLrKrr‹rVrrÔrrrÚtest_pool_initializerŠs z&TestInitializers.test_pool_initializerN)rFrGrHrÿrrRrSrrrrrMwsrMcCs*z|jdd}Wntjy$Yn0dS)NF)Úblock)r¬rirr)rdÚitemrrrÚ_this_sub_process–srVcCs2t ¡}tjt|fd}d|_| ¡| ¡dSrÒ)rrr|rVrprŠr‹)rZsubProcrrrÚ _test_processœs rWcCs||Srrr…rrrÚ_afunc£srXcCs0tjdd}| tgd¢¡}| ¡| ¡dS)Nrfr>)rNr¢rTrfrbrarg)rr’r›rXrr‹)r“r0rrrÚpool_in_process¦s rYc@s0eZdZdd„Zedd„ƒZdd„Zdd„Zd S) Ú _file_likecCs||_d|_dSr)Ú _delegateÚ_pid)r=Zdelegaterrrr>­sz_file_like.__init__cCs$t ¡}||jkr||_g|_|jSr)r3rur\Ú_cacherörrrÚcache±s  z_file_like.cachecCs|j |¡dSr)r^rÚrArrrrºsz_file_like.writecCs|j d |j¡¡g|_dS)Nr3)r[rr‹r^r]r_rrrÚflush½sz_file_like.flushN)rFrGrHr>Úpropertyr^rr_rrrrrZ¬s  rZc@s$eZdZdd„Zdd„Zdd„ZdS)ÚTestStdinBadfiledescriptorcCs tjtd}| ¡| ¡dS©Nry)rr|rWrŠr‹)r=rrrrÚtest_queue_in_processÃs z0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd}| ¡| ¡dSrb)rr|rYrŠr‹rÔrrrÚtest_pool_in_processÈs z/TestStdinBadfiledescriptor.test_pool_in_processcs:t ¡}t|ƒ‰ˆ d¡tj‡fdd„d}ˆ ¡dS)Nr˜csˆ ¡Sr)r_r©Zflikerrr¿Ñrz:TestStdinBadfiledescriptor.test_flushing..ry)rrrZrrr|r_)r=ÚsiorrrerÚ test_flushingÍs  z(TestStdinBadfiledescriptor.test_flushingN)rFrGrHrcrdrgrrrrraÁsrac@sleZdZedd„ƒZddd„Zedd„ƒZddd „Zd d „Zd d „Z dd„Z edd„ƒZ dd„Z dd„Z dS)ÚTestWaitcCsBtdƒD],}|r"t t ¡d¡| |t ¡f¡q| ¡dS)NrÁr")rÖr?r r¢r”r3rur)r‚rKÚslowrÙrrrÚ_child_test_waitØs  zTestWait._child_test_waitFc sddlm}g}g‰g}tdƒD]^}tjdd\}}tj|j||fd}d|_| ¡|  ¡|  |¡ˆ  |¡|  |j ¡q |rÐ||ƒD]@}z |  ¡} Wn$tyÀ| |¡|  ¡YqŒ0|  | ¡qŒq€| ¡t‡fdd „td ƒDƒƒ} | || ¡dS) Nrr$rfFrƒr…Tc3s"|]}ˆD]}||jfVq qdSrrñ)rõrÙr©rýrrrkûrz%TestWait.test_wait..rÁ)Úmultiprocessing.connectionr%rÖrrˆr|rjrprŠrrÚrär‹rŒrBr$r§rmrV) r=rir%ÚreadersÚmessagesrÙr@rKrr8rÜrrkrÚ test_waitàs0        zTestWait.test_waitcCsVt ¡}| |¡tdƒD].}|r4t t ¡d¡| d| d¡¡q| ¡dS)NrÁr"ú%s r”) rr$rÖr?r r¢r’r r)r‚r"rir rÙrrrÚ_child_test_wait_socketþs  z TestWait._child_test_wait_socketcCs2ddlm}t tjdf¡}| ¡}g}g}i}tdƒD]<}tj |j ||fd} d| _ |   ¡|  | ¡| | j¡q8tdƒD]"}| ¡\} } |  | ¡g|| <q~| ¡|rî||ƒD]4} |  d¡} | sÜ| | ¡|  ¡q¶||   | ¡q¶qªd dd „td ƒDƒ¡ d ¡} | ¡D]}| d  |¡| ¡qdS) Nrr$rfr…Tr(r3css|]}d|VqdS)rpNrrôrrrrk'rz,TestWait.test_wait_socket..rÁr”r)rlr%rrŽrr*rrÖrr|rqrprŠrÚrär‹rsrrŒr$r r6rV)r=rir%r{r1rmrýZdicrÙrr@rér8rÜÚvrrrÚtest_wait_sockets:  ÿ          zTestWait.test_wait_socketcCs| d¡dSr)ror_rrrÚtest_wait_slow+szTestWait.test_wait_slowcCs| d¡dSr)rsr_rrrÚtest_wait_socket_slow.szTestWait.test_wait_socket_slowcCs´ddlm}d}t ¡\}}t ¡}|||g|ƒ}t ¡|}| |g¡| ||d¡| ||d¡|  d¡t ¡}|||gdƒ}t ¡|}| ||g¡| |d¡dS)Nrr$rbr¢r rçš™™™™™Ù?) rlr%rrˆr?r@rVrÁrÓr”)r=r%rÜrRrSrŠrXr†rrrÚtest_wait_timeout1s      zTestWait.test_wait_timeoutcCs| ¡t |¡dSr)ržr?r )r‚r¨ZperiodrrrÚsignal_and_sleepHszTestWait.signal_and_sleepc Cs†ddlm}d}dd„}t d¡}t ¡\}}tj|j||fd}| ¡| |j t ¡|  |j dd¡t  ¡}|||j |g|dƒ} t  ¡|} | | |j g¡| | |d ¡| | |d ¡| d¡t  ¡}|||j |gdƒ} t  ¡|} | || ƒ||j |gƒ¡| | d ¡| d¡t  ¡}|||j |gdƒ} t  ¡|} | || ƒ|||j |gƒ¡| | d ¡| ¡| ¡dS) Nrr$rTcSst|dd„dS)NcSst|ƒSr)rØr…rrrr¿Qrz>TestWait.test_wait_integer....)rß)rm)r{rrrr¿Qrz,TestWait.test_wait_integer..r…rr–r¢rv)rlr%rrªrˆr|rxrŠrqrãrÐrnrr?r@rVrÁrÓr”rr‹) r=r%rÜZsorted_r¨rRrSrrŠrXr†rrrÚtest_wait_integerMs>   ÿ       zTestWait.test_wait_integercCsfddlm}t ¡\}}t ¡}||gdd}t ¡|}| |g¡| |d¡| ¡| ¡dS)Nrr$r2r–rN) rlr%rrˆr?r@rVrÁr)r=r%rRrSrCrXrrrÚtest_neg_timeoutxs     zTestWait.test_neg_timeoutN)F)F)rFrGrHr1rjrorqrsrtrurwrxryrzrrrrrhÖs   # +rhc@s4eZdZe ed¡dd„ƒZe ed¡dd„ƒZdS)ÚTestInvalidFamilyr9cCs:| t¡tj d¡Wdƒn1s,0YdS)Nz\\.\test©râr6rrmror_rrrÚtest_invalid_family‰s z%TestInvalidFamily.test_invalid_familyz skipped on non-Windows platformscCs:| t¡tj d¡Wdƒn1s,0YdS)Nz/var/test.piper|r_rrrÚtest_invalid_family_win32Žs z+TestInvalidFamily.test_invalid_family_win32N) rFrGrHr7rYr=r}r2r~rrrrr{‡s   r{c@s,eZdZedd„ƒZedd„ƒZdd„ZdS)Ú TestFlagscCs| ttjƒ¡dSr)r”r%rçÚflags©r‚r%rrrÚrun_in_grandchild˜szTestFlags.run_in_grandchildcCsrddl}tjdd\}}tj|j|fd}| ¡| ¡}| ¡| ¡| ¡t t j ƒ|f}t |  |¡ƒdS)NrFrƒr…)Újsonrrˆr|r‚rŠrŒr‹rr%rçr€Úprintræ)r‚rƒr@rKrÚgrandchild_flagsr€rrrÚ run_in_childœszTestFlags.run_in_childcCsHddl}d}t tjdddd|g¡}| | d¡¡\}}| ||¡dS)NrzJfrom test._test_multiprocessing import TestFlags; TestFlags.run_in_child()réz-Sz-Orùr”)rƒrêÚ check_outputrçrìrçrðrV)r=rƒÚprogrVZ child_flagsr…rrrÚ test_flags©sÿzTestFlags.test_flagsN)rFrGrHr1r‚r†r‰rrrrr—s   rc@s eZdZedd„ƒZdd„ZdS)Ú TestTimeoutscCs>t d¡| d¡| ¡tj |¡}| d¡| ¡dS)NrNrÅéÈ)r?r r”rrrmrr)r‚Úchildr"r%rrrÚ _test_timeout¸s     zTestTimeouts._test_timeoutc Cs¾t ¡}z¤t d¡tjdd\}}tjjdd}tj|j||j fd}|  ¡|  ¡|  |  ¡d¡|  ¡| ¡}|  |  ¡d¡|  ¡|  ¡t|ƒWt |¡n t |¡0dS) Nr"TrƒÚAF_INETrkr…rÅr‹)rÚgetdefaulttimeoutÚsetdefaulttimeoutrrˆrmror|rr"rŠrrVrŒrsr)r=Z old_timeoutÚparentrŒr{rr%rrrr‡Ás$ ÿ zTestTimeouts.test_timeoutN)rFrGrHr1rr‡rrrrrŠ·s rŠc@seZdZdd„ZdS)ÚTestNoForkBombcCsŒt ¡}tj tj t¡d¡}|dkrVtjj   ||¡\}}}|  |d¡|  d|¡n2tjj   ||¡\}}}|  | ¡d¡|  |d¡dS)Nzmp_fork_bomb.pyrrs RuntimeErrors123)rrùr3rr‹rrrrrúZassert_python_failurerVr«rûrV)r=rûrrérþrIrrrÚtest_noforkbombÚs zTestNoForkBomb.test_noforkbombN)rFrGrHr“rrrrr’Ùsr’c@s eZdZedd„ƒZdd„ZdS)ÚTestForkAwareThreadLockcCsV|dkr:tj|j|d|fd}| ¡| ¡t|ƒn| ttj ƒ¡| ¡dS)NrNr…) rr|rŒrŠrrr”rsrÚ_afterfork_registry)r‚rÃr%rrrrrŒïs zTestForkAwareThreadLock.childcCsdt d¡\}}t ¡}ttjƒ}tj|jd|fd}| ¡|  ¡|  ¡}t |ƒ|  ||¡dS)NFrbr…) rrˆrÚForkAwareThreadLockrsr•r|rŒrŠrrŒrZassertLessEqual)r=r@rKr{Zold_sizerZnew_sizerrrr¢ús z!TestForkAwareThreadLock.test_lockN)rFrGrHr1rŒr¢rrrrr”ês r”c@s0eZdZdd„Zdd„Zedd„ƒZdd„Zd S) Ú TestCloseFdscCsZtrt ¡ ¡St ¡ ¡}g}|dkr>| |¡t |¡}q |D]}t |¡qB|SdS)Nró)r=rÚdetachrÚr3Údupr)r=rQÚto_closer0rrrÚget_high_socket_fd s     zTestCloseFds.get_high_socket_fdcCs,trtjtjtj|d ¡n t |¡dS)N)r;)r=rrŽÚ SOCK_STREAMrr3)r=rQrrrrszTestCloseFds.closec Cs\zt |tjtj¡}Wn.tyD}z| |¡WYd}~nd}~00| ¡| d¡dSr)rÚfromfdrŽrœrÇr”r)r‚r%rQr r­rrrÚ_test_closefds#s  zTestCloseFds._test_closefdsc CsÞtst d¡‚t ¡\}}| ¡}zRtj|j||fd}| ¡|  ¡|  ¡}t |ƒW|  |¡|  ¡|  ¡n|  |¡|  ¡|  ¡0t  ¡dkr¬|  |d¡n.d}| |t¡| |jtjkpÔ|j|k|¡dS)Nzrequires fd picklingr…ri6')rir7r8rrˆr›r|ržrŠrrŒrrùrïrqr/rnr0rPÚwinerror)r=rErFrQrr­Z WSAENOTSOCKrrrÚ test_closefd-s2  ÿ   þ     ÿzTestCloseFds.test_closefdN)rFrGrHr›rr1ržr rrrrr— s  r—c@sfeZdZeejejƒZedd„ƒZ e   e e dƒd¡dd„ƒZedd„ƒZe   e e dƒd¡d d „ƒZd S) ÚTestIgnoreEINTRcCsFdd„}t tj|¡| d¡| ¡}| |¡| d|j¡dS)NcSsdSrr©r,ÚframerrrrÀRsz-TestIgnoreEINTR._test_ignore..handlerÚreadyóx)rÃr2r”rŒr7Ú CONN_MAX_SIZE)r‚r%rÀr0rrrÚ _test_ignorePs   zTestIgnoreEINTR._test_ignorer2r4cCsàt ¡\}}zÄtj|j|fd}d|_| ¡| ¡| | ¡d¡t   d¡t   |j tj¡t   d¡| d¡| | ¡d¡t   d¡t   |j tj¡| | ¡d|j¡t   d¡| ¡W| ¡n | ¡0dS)Nr…Tr¤r"iÒr¥)rrˆr|r§rprŠrrVrŒr?r r3rÌrrÃr2r”r5r¦r‹rdrrrÚ test_ignoreZs( ÿ      zTestIgnoreEINTR.test_ignorecCsbdd„}t tj|¡tj ¡.}| |j¡| ¡}| d¡Wdƒn1sT0YdS)NcSsdSrrr¢rrrrÀssz6TestIgnoreEINTR._test_ignore_listener..handlerÚwelcome)rÃr2rrmror”r"rs)r‚r%rÀr{rRrrrÚ_test_ignore_listenerqs   z%TestIgnoreEINTR._test_ignore_listenercCs t ¡\}}z„tj|j|fd}d|_| ¡| ¡| ¡}t  d¡t   |j t j¡t  d¡tj |¡}| | ¡d¡| ¡W| ¡n | ¡0dS)Nr…Tr"r©)rrˆr|rªrprŠrrŒr?r r3rÌrrÃr2rmrrrVr‹)r=r%r5rr"rtrrrÚtest_ignore_listener{s  ÿ    z$TestIgnoreEINTR.test_ignore_listenerN)rFrGrHÚmaxrZ PIPE_MAX_SIZEZ SOCK_MAX_SIZEr¦r1r§r7r2rÂrÃr¨rªr«rrrrr¡Ks   r¡c@s@eZdZedd„ƒZdd„Zdd„Zdd„Zd d „Zd d „Z d S)ÚTestStartMethodcCs| t ¡¡dSr)r”rrùrrrrÚ_check_contextszTestStartMethod._check_contextcCs^|jdd\}}|j|j|fd}| ¡| ¡| ¡}| ¡| ¡| || ¡¡dS)NFrƒr…) rˆr|r®rŠrrŒr‹rVrù)r=r•r@rKrZ child_methodrrrÚ check_context“szTestStartMethod.check_contextc Cs~dD]t}zt |¡}Wnty,YqYn0| | ¡|¡| | ¡|¡| t|jd¡| t|jd¡| |¡qdS)N©rròr'rò) rr–r6rVrùrïrâÚset_start_methodr¯)r=Úmethodr•rrrrÄs  zTestStartMethod.test_contextc Csêt t¡d}t ¡}z²dD]š}ztj|ddWntyHYqYn0| t ¡|¡t ¡}| | ¡|¡| t |ƒj   ¡  |¡¡| |j j   ¡  |¡¡| t¡|d7}qWtj|ddntj|dd0| |d¡dS)Nrr°T©ÚforcerN)rÚset_forkserver_preloadÚPRELOADrùr±r6rVr–rnr©rFÚlowerÚ startswithr|r¯r…)r=r Z old_methodr²r•rrrÚ test_set_get©s(   ÿ   zTestStartMethod.test_set_getcCs\t ¡}tjdkr"| |dg¡n6| |ddgkpT|ddgkpT|gd¢kpT|gd¢k¡dS)Nr#ròrr°)ròrr')rÚget_all_start_methodsrçrúrVrn)r=ÚmethodsrrrÚ test_get_all¿s  ÿ þ ýzTestStartMethod.test_get_allcCs‚t ¡dkr| d¡tj tj t¡d¡}tj j   |¡\}}}|  ¡}|  ¡}|  ¡dksd|dkr~t|ƒt|ƒ| d¡dS)Nr'z*test only relevant for 'forkserver' methodz mp_preload.pyÚokr3z(failed spawning forkserver or grandchild)rrùrjr3rr‹rrrrrúrûrðrVr„r‚)r=rrérþrIrrrÚtest_preload_resourcesÉs  z&TestStartMethod.test_preload_resourcesN) rFrGrHr1r®r¯rÄr¹r¼r¾rrrrr­Žs    r­r^c@sHeZdZdd„Zdd„Zdd„Zdd„Zd d „Zed d „ƒZ d d„Z dS)ÚTestResourceTrackerc CsØd}tjD]Æ}|j|d¢|dkr6Wdƒq t ¡\}}tjtjdd|j ||dg|gtj d}t  |¡t |dd d 4}|  ¡ ¡ d ¡}|  ¡ ¡ d ¡}Wdƒn1s¼0Yt||ƒ| ¡| ¡t ¡tj} t ¡| krbt d ¡zt||ƒWqîty^} z0| | jtjtjf¡WYd} ~ qrWYd} ~ qîd} ~ 00qîtd |›dƒ‚|j ¡ d¡} |j  ¡d  |¡} |  | | ¡|  | d|¡Wdƒq 1sÈ0Yq 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 Znooprérù)rKr )Úpass_fdsr r[TrLr”r zA z= resource was leaked after a process was abruptly terminated.zutf-8z8resource_tracker: There appear to be 2 leaked {} objectszresource_tracker: %r: \[Errno)!rrrXr3ÚpiperêrërçrìrkrírrErîrVrðr!rr%r?r@rr›r r/r«r0ÚENOENTÚEINVALrœr rFZ assertRegex) r=rýr r@rKrrHZname1Zname2ròr­rIrÜrrrÚtest_resource_trackerÚsJ  ÿý 0  & ÿ þ z)TestResourceTracker.test_resource_trackerc Csdddlm}|j}|dur:t |tj¡tj|tj dt   ¡"t   d¡|  ¡Wdƒn1sj0Y|j}t ||¡t  d¡t d¡}t j dd¨}t   d ¡| ¡}| ¡| ¡t |¡}~t ¡| |ƒ¡|r0| t|ƒd ¡|d} | t| jtƒ¡| d t| j ƒv¡n| t|ƒd¡Wdƒn1sV0YdS) Nr©Ú_resource_tracker)rvrÝrròT)r6ÚalwaysrNzresource_tracker: process died)!Ú multiprocessing.resource_trackerrÆr\r3rÌrÃrÍrZ wait_processràrárâr+r?r rr–rªrržrërìrírîr†rVrsrnÚ issubclassÚcategoryÚ UserWarningrWÚmessage) r=r,Z should_dierÆrr•Zall_warnr¨rðZthe_warnrrrÚcheck_resource_tracker_death$s:   &      ÿz0TestResourceTracker.check_resource_tracker_deathcCs| tjd¡dSr)rÍrÃr.r_rrrÚtest_resource_tracker_sigintIsz0TestResourceTracker.test_resource_tracker_sigintcCs| tjd¡dSr)rÍrÃrÉr_rrrÚtest_resource_tracker_sigtermMsz1TestResourceTracker.test_resource_tracker_sigtermcCs| tjd¡dSr)rÍrÃrÍr_rrrÚtest_resource_tracker_sigkillQsz1TestResourceTracker.test_resource_tracker_sigkillcCs<ddlm}| ¡|jd|fv}|| ¡M}| |¡dS)NrrÅ)rÈrÆr+r\Z _check_aliver”)r%rrÆZreusedrrrÚ_is_resource_tracker_reusedUs   z/TestResourceTracker._is_resource_tracker_reusedcCstddlm}| ¡|j}tjdd\}}tj|j||fd}| ¡|  ¡}|  ¡|  ¡|  ¡|  |¡dS)NrrÅFrƒr…) rÈrÆr+r\rrˆr|rÑrŠrŒr‹rrn)r=rÆrr@rKrZis_resource_tracker_reusedrrrÚtest_resource_tracker_reused_s ÿz0TestResourceTracker.test_resource_tracker_reusedN) rFrGrHrÄrÍrÎrÏrÐr“rÑrÒrrrrr¿ÖsJ% r¿c@s8eZdZedd„ƒZdd„Zdd„Zejj dd„ƒZ d S) ÚTestSimpleQueuecCs@| ¡z(| | ¡¡| | ¡¡W| ¡n | ¡0dSr)r%rcrZrårorrrÚ _test_emptyts zTestSimpleQueue._test_emptycCs¢t ¡}t ¡}t ¡}tj|j|||fd}d|_| ¡| | ¡¡|  ¡|  ¡|  | ¡¡|  |  ¡d¡|  |  ¡d¡| | ¡¡| ¡dS)Nr…TF)rÚ SimpleQueuer¦r|rÔrprŠrnrZrår%r~rVr¬r‹)r=rrbrcrrrrÚ test_empty~s"þzTestSimpleQueue.test_emptycCst ¡}| ¡| ¡dSr)rrÕr©r=rrrrrñ–szTestSimpleQueue.test_closecCs0t ¡}| ¡| |jj¡| |jj¡dSr)rrÕrrnÚ_readerrhÚ_writerr×rrrÚ test_closedszTestSimpleQueue.test_closedN) rFrGrHr1rÔrÖrñrrZ cpython_onlyrÚrrrrrÓrs  rÓc@seZdZdd„ZdS)ÚTestPoolNotLeakOnFailurecsŽd‰g‰G‡‡fdd„dƒ}| td¡:tjjdtjj|dd}| ¡|  ¡Wdƒn1sh0Y|  t dd „ˆDƒƒ¡dS) NrTcs<eZdZ‡fdd„Z‡fdd„Zdd„Zdd„Zd d „Zd S) zRTestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcesscs d|_d|_d|_ˆ |¡dS)Nz Fake Process)rrvrÈrÚ)r=r¥)Úforked_processesrrr>®sz[TestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.__init__cs"ˆdkrtdƒ‚ˆd8‰d|_dS)NrúManually induced OSErrorrNrï)r/rÈr_)Ú will_fail_inrrrŠ´szXTestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.startcSs d|_dS)NÚstoppingrÇr_rrrr»sz\TestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.terminatecSs|jdkrd|_dS)NrßÚstoppedrÇr_rrrr‹¾s zWTestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.joincSs|jdkp|jdkS)NrïrßrÇr_rrrroÂsz[TestPoolNotLeakOnFailure.test_release_unused_processes..FailingForkProcess.is_aliveN)rFrGrHr>rŠrr‹ror©rÜrÞrrÚFailingForkProcess­s   rârÝrb)r|)Úcontextcss|]}| ¡VqdSrrô)rõrrrrrkËrzITestPoolNotLeakOnFailure.test_release_unused_processes..) r™r/rr“r’r7rÆZ MagicMockrr‹r~rß)r=rârrrárÚtest_release_unused_processes§sÿ &ÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rFrGrHrärrrrrÛ¥srÛc@s`eZdZejjZdd„Zdd„Ze dd„ƒZ e Z dd„Z d d „Z e d d „ƒZd d„Ze dd„ƒZdGdd„Ze dd„ƒZdHdd„Ze dd„ƒZdIdd„Zdd„Ze dd „ƒZd!d"„Ze d#d$„ƒZd%d&„Ze d'd(„ƒZd)d*„Ze d+d,„ƒZdJd.d/„Zd0d1„Ze d2d3„ƒZ d4d5„Z!e d6d7„ƒZ"d8d9„Z#e d:d;„ƒZ$dd?„ƒZ&d@dA„Z'e dBdC„ƒZ(dDdE„Z)dFS)KÚTestSyncManagerTypescCs| ¡|_|j ¡d|_dSr)Ú manager_classrKrŠrr_rrrrÿçs  zTestSyncManagerTypes.setUpcCsB|jdur(|j ¡r(|j ¡|j ¡|j ¡d|_d|_dSr)rrorr‹rKrr_rrrrìs    zTestSyncManagerTypes.tearDowncCs t ¡dSr)rÚ reap_childrenr·rrrr‘ôszTestSyncManagerTypes.setUpClasscCsxt|jƒt ¡}d}tt ¡ƒdkrtt |¡|d9}t ¡|}|dkrdtj _ t   dt ¡›d|›d¡qtqdS) NrórNr¢r¹Tú"multiprocessing.Manager still has ú active children after ú seconds) rrr?r@rsrr¨r rrÚenvironment_alteredÚ print_warning)r=Ú start_timerCrÎrrrÚwait_proc_exitús   ÿþ z#TestSyncManagerTypes.wait_proc_exitcCs@tj||fd|_d|j_|j ¡| ¡| |jjd¡dS)Nr…Tr)rr|rrprŠrîrVrv)r=ZworkerryrrrÚ run_worker s  zTestSyncManagerTypes.run_workercCs| ¡| ¡| d¡dS©Nr÷)r%r©r‚ryrrrrØsz TestSyncManagerTypes._test_eventcCs.|j ¡}| ¡| |j|¡| d¡dSrð)rKr¦rårïrØr%©r=rÕrrrrÙs zTestSyncManagerTypes.test_eventcCs | ¡dSr©rrñrrrÚ _test_lock!szTestSyncManagerTypes._test_lockrœcCs6t|j|ƒƒ}| |j|¡| ¡| t|j¡dSr)r!rKrïrôržrâr½©r=ZlnamerÕrrrr¢%szTestSyncManagerTypes.test_lockcCs| ¡| ¡dSr©rržrñrrrÚ _test_rlock+sz TestSyncManagerTypes._test_rlockcCs t|j|ƒƒ}| |j|¡dSr)r!rKrïr÷rõrrrr¤0szTestSyncManagerTypes.test_rlockcCs | ¡dSrrórñrrrr©4sz$TestSyncManagerTypes._test_semaphorerªcCs(t|j|ƒƒ}| |j|¡| ¡dSr)r!rKrïr©rž)r=ÚsnamerÕrrrr«8sz#TestSyncManagerTypes.test_semaphorecCs|jdddS)Nr­)rø)r«r_rrrr®=sz+TestSyncManagerTypes.test_bounded_semaphorecCs| ¡| ¡dSrrörñrrrÚ_test_condition@sz$TestSyncManagerTypes._test_conditioncCs|j ¡}| |j|¡dSr)rKrºrïrùròrrrÚtest_conditionEs z#TestSyncManagerTypes.test_conditioncCs | ¡dSr)rrñrrrÚ _test_barrierIsz"TestSyncManagerTypes._test_barriercCs|j d¡}| |j|¡dSra)rKrürïrûròrrrrNs z!TestSyncManagerTypes.test_barriercCs(|Wdƒn1s0YdSrrrñrrrÚ _test_poolRszTestSyncManagerTypes._test_poolcCs |jjdd}| |j|¡dS)Nrfr>)rKr’rïrüròrrrÚ test_poolXszTestSyncManagerTypes.test_poolcCsdSrrrñrrrÚ _test_queue\sz TestSyncManagerTypes._test_queuercCs6t|j|ƒdƒ}| d¡| d¡| |j|¡dS)Nr¢rbra)r!rKrcrïrþ)r=ZqnamerÕrrrÚ test_queuefs   zTestSyncManagerTypes.test_queuecCs| d¡dS)Nr|)rÿr_rrrÚtest_joinable_queuensz(TestSyncManagerTypes.test_joinable_queuecCs| ¡| ¡|D]}qdSr)r§Úreverse)r‚ryr0rrrÚ _test_listqs zTestSyncManagerTypes._test_listcCs6|j ¡}| d¡| |j|¡| t|ƒd¡dS)Nrbr)rKrªrÚrïrrVrsròrrrr_}s  zTestSyncManagerTypes.test_listcCsdSrrrñrrrÚ _test_dict„s zTestSyncManagerTypes._test_dictcCs4|j ¡}d|d<| |j|¡| t|ƒd¡dS)Nrbr˜r)rKrlrïrrVrsròrrrrps zTestSyncManagerTypes.test_dictcCs| d¡dSr¬)rårñrrrÚ _test_value–sz TestSyncManagerTypes._test_valuecCs>|j dd¡}| |j|¡| |jd¡| | ¡d¡dS)NrÙrNr¢)rKrrïrrVrWr¬ròrrrr=œszTestSyncManagerTypes.test_valuecCsdSrrrñrrrÚ _test_array¢sz TestSyncManagerTypes._test_arraycCs$|j dddg¡}| |j|¡dS)NrÙrrN)rKrQrïrròrrrrT©szTestSyncManagerTypes.test_arraycCsdSrrrñrrrÚ_test_namespace­sz$TestSyncManagerTypes._test_namespacecCs(|j ¡}d|_d|_| |j|¡dSrç)rKr€r0r1rïrròrrrr²s z#TestSyncManagerTypes.test_namespaceN)rœ)rœ)rª)r)*rFrGrHrrÎrPrærÿrr1r‘r–rîrïrØrÙrôr¢r÷r¤r©r«r®rùrúrûrrürýrþrÿrrr_rrprr=rrTrrrrrrråÎsb                 råc@seZdZdd„ZdS)Ú MiscTestCasecCstj|ttjddgddS)NÚSUBDEBUGr#)ÚextraZ blacklist)rZ check__all__rrr_rrrÚ test__all__ºs ÿzMiscTestCase.test__all__N)rFrGrHr rrrrr¹src@s$eZdZedd„ƒZedd„ƒZdS)Ú BaseMixincCstjj ¡tj ¡f|_dSr)rrÚ _danglingr r¯Údanglingr·rrrr‘Ãs ÿzBaseMixin.setUpClasscCs€tj ¡ttjjƒt|jdƒ}|r@dtj_t  d|›¡d}tt jƒt|jdƒ}|rxdtj_t  d|›¡d}dS)NrTúDangling processes: rNúDangling threads: ) rrrÜrårrr r rërìr¯)r‚rJrLrrrr–Ès zBaseMixin.tearDownClassN)rFrGrHr1r‘r–rrrrr Âs r c@sÐeZdZdZejZejZeejƒZeej ƒZ eej ƒZ eej ƒZ eej ƒZ eej ƒZ eejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZeejƒZdS)rÓrJN)rFrGrHrirr|rmr“rlr‡r¨r’rˆrr|rœr£rªr­rºr¦rürrQr9rPrrrrrÓÛs*                 rÓcs eZdZdZejZee d¡ƒZ ee d¡ƒZ ee d¡ƒZ ee d¡ƒZ ee d¡ƒZ ee d¡ƒZee d¡ƒZee d ¡ƒZee d ¡ƒZee d ¡ƒZee d ¡ƒZee d ¡ƒZee d¡ƒZee d¡ƒZedd„ƒZe‡fdd„ƒZe‡fdd„ƒZ‡ZS)Ú 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’)r‚rArBrrrr’szManagerMixin.Poolcstƒ ¡t ¡|_dSr)rr‘rrNrKr·r”rrr‘ s zManagerMixin.setUpClasscsÊt ¡}d}tt ¡ƒdkrjt |¡|d9}t ¡|}|dkr dtj_t  dt ¡›d|›d¡qjq t   ¡|j   ¡d kr¢dtj_t  d ¡t  |j  ¡¡|j  ¡|j  ¡d|_ tƒ ¡dS) NrórNr¢r¹Trèrérêrz5Shared objects which still exist at manager shutdown:)r?r@rsrr¨r rrrërìrírîrKZ_number_of_objectsZ _debug_inforr‹rr–)r‚rírCrÎr”rrr–s.  ÿþ    zManagerMixin.tearDownClass)rFrGrHrirr|r`ÚoperatorÚ attrgetterrr|rœr£rªr­rºr¦rürrQrªrlr€r1r’r‘r–rÞrrr”rrós, rc@sÔeZdZdZejjZejjZeejj ƒZ eejj ƒZ eejj ƒZ eejj ƒZ eejj ƒZ eejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZeejjƒZdS)Ú ThreadsMixinrLN)rFrGrHrirÚdummyr|rmr“rlr¨r’rˆrr|rœr£rªr­rºr¦rürrQrrrrr0s$              rc s<|d}tƒ}hd£}| ¡D]Ü\}}t|tƒs2qt|tƒrÂ|turFq|jD]r}d| ¡|dd…}|| ¡d} Gdd„d|| tj ƒ} |dkr¤t   d ¡| ƒ} || _ | _ || _| ||<qLqt|tj ƒrGd d„d|tƒ} || _ | _ || _| ||<qddg‰dg‰‡‡‡fd d „} ‡‡fd d„} | |d<| |d<dS)NrF>rLrKrJZWithrNÚMixinc@s eZdZdS©z*install_tests_in_module_dict..TempNrŒrrrrÚTempWsrrKr,c@s eZdZdSrrŒrrrrr_scsÌt t¡tj ¡tjj ¡ˆd<tj ¡ˆd<tjddˆd<ztj ˆddWn t ytt   ˆd¡‚Yn0t j d¡r¬z t ¡}Wntyªt   d¡‚Yn0tƒt ¡t ¡ t¡dS) NrrNT)Ú allow_noner³z start method not supportedÚlinuxz1OSError raises on RLock creation, see issue 3111!)rrµr¶rÚ_cleanupr r r¯rùr±r6r7r8rçrúr¸r£r/r9rÚ get_temp_dirr!r"r&r@©r Úold_start_methodÚ start_methodrrÚ setUpModulehs&   ÿ    z1install_tests_in_module_dict..setUpModulecs²d}tj ¡tjˆdddttjjƒtˆdƒ}|rXd}dtj_t  d|›¡d}tt jƒtˆdƒ}|r’d}dtj_t  d|›¡d}|r¤t   d¡tj  ¡dS) NFrTr³rrNrr )rrrÜrr±rårr rërìr¯r?r rÚ_cleanup_tests)Z need_sleeprJrL)r rrrÚtearDownModule~s$  z4install_tests_in_module_dict..tearDownModulerr!)Úglobalsrrr©rÉrIr[Ú capitalizer7ÚTestCaserÚrequires_hashdigestrFrHrGrŠ) Z remote_globsrrGZ local_globsZ ALL_TYPESrÚbaseÚtype_Znewnamerrrr!rrrÚinstall_tests_in_module_dictHs:        r()r&)´r7Z unittest.mockrrir?rržrçr3rír0rÃrRrr¢r-rêrÝrrårëràZ test.supportrZtest.support.script_helperrrrÚ import_modulerZ*skip_if_broken_multiprocessing_synchronizer¯rlrZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrëÚmultiprocessing.queuesrrÚHAVE_SEND_HANDLEriÚ ImportErrorZmultiprocessing.sharedctypesrr rÖr Z HAS_SHMEMrTr rrrrr!r#r&rÓrOrkrlrmr!Z HAVE_GETVALUErúr=r%r)r4r_r¶Zctypesr-r.r/r0rŠr9r:rIr]r`rfr|r4r=r\r_r`r›r¦r¯r×rÚrërìrúrûr*rLrZr‚rƒr„r†r‡r6r‹rŽrrárãrärîrrr¾rrrr Úregisterrrrrrrr#rr%r-r6r4rjrwr}r2r‹ršr°r²r»rôr$rr r1r8r>rLrMrVrWrXrYrZrarhr{rrŠr’r”r—r¡r­rYr¿rÓrÛrårr rÓrrr(rrrrÚs¦                 ÿ   ,WG6*39FS   i(C: 14 "0R h8 x+E"!2 "BCH ÿ3)k =