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)zACheck that the system supports enough semaphores to run the test.r+ÚSC_SEM_NSEMS_MAXNéÿÿÿÿ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@s eZdZdZdd„Zdd„ZdS)zK_TestQueue.test_queue_feeder_on_queue_feeder_error..NotSerializablezMock unserializable objectcSsd|_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)rFrGrHÚ__doc__r>rZrrrrr‰ sr‰cs eZdZdZe‡fdd„ƒZdS)zE_TestQueue.test_queue_feeder_on_queue_feeder_error..SafeQueuez1Queue with overloaded _on_queue_feeder_error hookcst|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)rFrGrHr‘Ú 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)ÚRLockrVržrŸrârœr½r¡rrrÚ test_rlockÔsz_TestLock.test_rlockcCs,| ¡Wdƒn1s0YdSr)rr_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]rVržrŸ©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:ržrVrTr<rkrlrm)r=r©ržrrrr‡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)ržrŸ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¯rržr?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¯rržrYr]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¯rržr?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%ržrkrŸ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Šrnržrr›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@sBeZdZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)ÚBunchz A bunch of threads. Fc Cs’||_||_||_| ¡|_| ¡|_| ¡|_|s>|j ¡g}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‹)rLrrrrÚfinalizeªsz Bunch.__init__..finalizeN)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ù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þeZdZdZdZdZdd„Zdd„Zdd „Zd d „Z e d d „ƒZ d6dd„Z dd„Z e dd„ƒZdd„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/d0„Ze d1d2„ƒZd3d4„Zd5S)7Ú _TestBarrierz$ Tests for Barrier objects. rbg>@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¡dS)z; Test that a barrier is passed in lockstep N)rïrrrÿ)r=ÚpassesrrrrÚ test_barrierÿsz_TestBarrier.test_barriercCs | d¡S)zC Test that a barrier works for 10 consecutive runs rÁ)r r_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)z9 test the return value from barrier.wait csg|] }ˆ ¡‘qSrrrôrrrrörz1_TestBarrier.test_wait_return..rrNN) 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)z, Test the 'action' callback )rrNN)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¡dS)zK Test that an abort will put the barrier in a broken state rrNN) 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¡dS)zL Test that a 'reset' on a barrier frees the waiting threads rrNN)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¡dS)zF Test that a barrier can be reset after being broken. rrNN)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¡dS)z$ Test wait(timeout) N)rïrr"rÿrVrsrr rrrr‡’sz_TestBarrier.test_timeoutcCsT| |j¡}||jdkr$t d¡z | ¡WntjyN| d¡Yn0dS)Nr¢r T)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)z4 Test the barrier's default timeout r r–N)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…)rirjrkrrˆ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þrrrïrr1rr r r rrrrrrrrrr"r‡r#r$r%r'r*rrrrrüÐsH               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¢) r6r5rVrWr|r}rprŠr‹)r=Úrawr7r8r9rrr_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) rrBrCrrVr~rÂrâr5r:) r=Zval1Úlock1Úobj1Zval2Úlock2Úobj2r¢Zval3Úlock3Úobj3Úarr4Úarr5rrrÚtest_getobj_getlockús$   z_TestValue.test_getobj_getlockN)F) rFrGrHr[r r6rr1r}r>r@rLrrrrr+Î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=rNÚarrrrrrÚ test_arrays $$ z_TestArray.test_arraycCsrd}tdƒD]`}| d|¡}| t|ƒ|¡| t|ƒdg|¡tdƒ|dd…<| t|ƒttdƒƒ¡~q dS)NrÁrTrÙr)rÖrRrVrsrª)r=ÚsizerêrTrrrÚtest_array_from_size6s  z_TestArray.test_array_from_sizecCs|jdddSr?)rUr_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ÁrAFrBrCZnotalock) rRrªrÖrBrCrrVr~rÂrâr5rQ) r=Zarr1rDrEZarr2rFrGr¢Zarr3rHrIrJrKrrrÚtest_getobj_getlock_objIs( ÿz"_TestArray.test_getobj_getlock_obj)F) rFrGrHr[r1rHr7ÚskipIfr.rUrWrXrYrrrrrMs    rMc@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)rrNrerNr¢)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|ƒ‘qSrrjrôrrrrö¯rz-_TestContainers.test_dict..cSsg|]}|t|ƒf‘qSrrjrôrrrrö°r) ÚdictrªrÖrkrVr ÚsortedÚkeysr7r)r=r,ÚindicesrÙrrrÚ test_dict¨sz_TestContainers.test_dictcCsv| ¡}ttddƒƒ}|D]}t|ƒ||<qt|ƒ}| t|ƒ|¡| t|ƒg¡t|ƒ}| ¡| tt |¡dS)Nrhri) rmrªrÖrkr7rVrrâr½ra)r=r,rprÙrbrrrÚ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ÚsuppliesrurxrbZblanketsrgrwrsé rrtrNZmarmotséXécr2rv)rmrVrrsrªrq)r=rwrxr,Ú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~rzNamespace(name='Bob')rÚjob)Ú Namespacerr€Z_hiddenrVrWrnrÂ)r=rÄrrrÚtest_namespaceísz_TestContainers.test_namespaceN) rFrGrHr[r`rcrgrqrrr}r‚rrrrr[gs   .r[r&cCst |¡||Srr¶)r1r%rrrÚsqrüs rƒcCs||Srr)r1r2rrrÚmul sr„cCst |¡tddƒ‚dS)Nr1i)r?r r6r$rrrÚraise_large_valuerror s r…cCs|Srr©r1rrrÚ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  rcseZdZe‡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)rbrbrr1rTr†)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µr{rrš)r”Ústarmaprªr5rÖrVr„Ú itertools)r=ZpsmapÚtuplesrrrÚ test_starmap8 s ÿÿz_TestPool.test_starmapcCsDtttdƒtdddƒƒƒ}| |j t|¡ ¡tt  t|¡ƒ¡dS)Nrµr{r2) rªr5rÖ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)Nrar r–) 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œrarâÚ StopIterationr®©r=rbrÙ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ƒrrârŒr®rÖrVrar¹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ÖrVrnrœ)r=rbrrrÚ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ƒrrârŒr®rªrœrÖrar«r$)r=rbZexpected_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ƒrrŒ)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ðrrrrla 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™rr¡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órrrrlÈ 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³rnrr‹) 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ùrrrrrrï´ 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  sr c@s eZdZdS)Ú MyManagerNrrrrrr  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 rrrVrHrâr6rr r¿rrªrÖ)r=rKrZ foo_methodsZ bar_methodsr)rr™rr2 s z_TestMyManager.commonN)rFrGrHr[rrrrrrrrr s  rcCstSr)Ú_queuerrrrÚ get_queueO src@seZdZdZdS)Ú QueueManagerz$manager class used by server processN©rFrGrHr‘rrrrrR src@seZdZdZdS)Ú QueueManager2z@manager class which specifies the same interface as QueueManagerNrrrrrrV 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Útupler7©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[r7rÛ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…r!rr )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)r4rrrrr/Ž 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"Nr!rÁrÙrfrJrrTrgz( zexpected BufferTooShort, got %sFr2r"ÚXi)(rˆr|r;rprŠr rSrªrÖrirVr©ÚfilenorÐr”rŒr9r7rsÚrecv_bytes_intoÚitemsizeÚ bytearrayrÚBufferTooShortrAr‚r:ršrTr<rkr?r r8rÚreadableÚwritablerâÚEOFErrorr‹)r=r&r5rrNr:ZlongmsgrTÚ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ŒrirBrCrâr1rš)r=ÚreaderÚwriterrrrÚtest_duplex_false s z!_TestConnection.test_duplex_falsecCst| ¡\}}|j|j|fd}d|_| ¡| ¡tdƒ}| |¡| |  ¡|¡| t ¡| ¡|  ¡dS)Nr…Tr¤) rˆr|r;rprŠrr r9rVr7r8r‹)r=r&r5rr:rrrÚ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éér5réérNr2rf) rirjrkr rˆr9rVr7râr6)r=r:rRrSrrrÚtest_sendbytes@ s&     z_TestConnection.test_sendbytesc CsXzt |¡Wn@tyN}z(|jtjkr8WYd}~dS‚WYd}~nd}~00dSdS)NFT)r3Úfstatr1r2Ú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ÖrSr3Ú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|rYrprŠrärrrCrBrEr=rVZ 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 smallrTztest 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) NrJr[Trƒsbarr…r\r+z2could not find an unassigned large file descriptorr])rirjrˆr|rYrprŠrärrrCrBrEr=rÖÚMAXFDrSr‚r3rTrr^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)NrJr[Trƒr…) rirjrˆr|rerprŠrâr½rrUr‹©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âr1rQrrrrž s     H   z_TestConnection.test_contextN)F)rFrGrHr[r1r;rFrIrJrPrSrYr7r2Ú HAS_REDUCTIONr_rZrçrúrarÂr3rbrergrÅrrrrr6Å s< O       ÿ ÿ ÿ   r6c@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âr1r$)r=rnr|rrrÚtest_multiple_bindÒ s    ÿz _TestListener.test_multiple_bindc Cs¶|j ¡€}|j |j¡R}| ¡*}| d¡| | ¡d¡Wdƒn1sT0YWdƒn1sr0YWdƒn1s0Y|jdkr²|  t |j¡dSrh© rorqÚClientr$Úacceptr”rVrŒrirâr1)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 somethingrirJrs)r=r0Úclientr,rrrÚtest_abstract_socketã s  j z"_TestListener.test_abstract_socketN) rFrGrHr[rrrÅr7r2rÚabstract_sockets_supportedrwrrrrrlÎ s ÿrlc@s4eZdZdZedd„ƒZdd„Zdd„Zdd „Zd S) Ú_TestListenerClientrgcCs"|j |¡}| d¡| ¡dS)Nr¤)rortr”r)r‚r$r&rrrr}ô s  z_TestListenerClient._testcCsj|jjD]\}|jj|d}|j|j|jfd}d|_| ¡| ¡}|  |  ¡d¡|  ¡|  ¡qdS)Nrmr…Tr¤) rorprqr|r}r$rprŠrurVrŒr‹r)r=rnr|rr&rrrÚtest_listener_clientú s z(_TestListenerClient.test_listener_clientcCsj|j ¡}|j|j|jfd}d|_| ¡t d¡|  ¡}|  |  ¡d¡|  ¡|  ¡|  ¡dS)Nr…TrNr¤)rorqr|r}r$rprŠr?r rurVrŒrr‹)r=r|rr&rrrÚtest_issue14725 s  z#_TestListenerClient.test_issue14725cCsh|jjD]Z}|jj|d}|j |j¡}| ¡}| d¡| | d¡¡|  ¡|  ¡|  ¡qdS)NrmóhellorN) rorprqrtr$rur9rnršr)r=Úfamr|rerRrrrÚtest_issue16955 s  z#_TestListenerClient.test_issue16955N) rFrGrHr[r1r}rzr{r~rrrrryð s   ryc@sTeZdZdZdd„Zedd„ƒZdd„Zedd „ƒZd d „Z ed d „ƒZ dd„Z dS)Ú _TestPollrgcCsJ| ¡\}}| | ¡d¡| d¡| | ¡d¡| | ¡d¡dS)NFrT)rˆrVršr9rQrrrÚtest_empty_string$ s   z_TestPoll.test_empty_stringcCs*|D]}t d¡| |¡q| ¡dS©Nr")r?r r9r)r‚r&Ústringsr rrrÚ_child_strings+ s  z_TestPoll._child_stringscCsrd}| ¡\}}|j|j||fd}| ¡|D]4}tdƒD]}| d¡r<qPq<| ¡}| ||¡q0| ¡dS)N)r|róaóbrsbyerslopr…éÈró) rˆr|rƒrŠrÖršr7rVr‹)r=r‚rRrSrr rÙr1rrrÚ 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 r9rr‹r«r7)r=r@rKrrÄryrrrÚtest_boundariesI s  z_TestPoll.test_boundariescCs"| d¡| d¡| d¡dS)Nr„r…ócd)r9)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„r Tr…rŠ)rˆrVršr|r‹rŠr7r‹)r=rRrSrrrrÚtest_dont_merge[ s z_TestPoll.test_dont_mergeN) rFrGrHr[r€r1rƒr‡rˆr‰r‹rŒrrrrr s    rrZc@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)Nrmr) rorqr”r$rurÚsocketÚ create_serverrr,Ú getsocknamerŒ)r‚r&rpr}r|Únew_connr3rrrÚ _listener} s     z"_TestPicklingConnections._listenercCsxt|jdƒD]*\}}|j |¡}| | ¡¡| ¡q | ¡\}}t ¡}| |¡|  | ¡¡| ¡| ¡dSr) r7rŒrortr”r8rrr&Úsendall)r‚r&r$r:rvrrrÚ_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)rorprˆr|r“rprŠrr•r rŒr”rVr8r rÚr‹)r=rpZlconnZlconn0ZlprZrconn0Zrpr}r:r$r’Úbufr rrrÚ test_picklingŸ sF       z&_TestPicklingConnections.test_picklingcCsD| ¡}| d¡| ¡| ¡}| ¡}| |d¡| ¡dS)Nú all is wellr¢)rŒr”r)r‚r&rKr@r:rrrÚ 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›rrrrrr s   . rcs<eZdZdZ‡fdd„Z‡fdd„Zdd„Zdd „Z‡ZS) Ú _TestHeapr>cs*tƒ ¡tjjj|_tj ¡tjj_dSr)r‘rrrÜrÝÚ_heapÚold_heapZHeapr_r•rrrþ s  z_TestHeap.setUpcs|jtjj_tƒ ¡dSr)ržrrÜrÝrr‘rr_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©rV)rõÚarenarrrrl.rz&_TestHeap.test_heap..rT)rrÜrÝrZ_DISCARD_FREE_SPACE_LARGER_THANrÖrÐÚrandomÚlognormvariaterÚrsÚ randrangerärªZ _len_to_seqr7Z_arenasÚindexZ_allocated_blocksrrVÚsumÚsortrVÚshufflerfZ_n_freesZ _n_mallocsZ_pending_free_blocks)r=Z iterationsZ maxblocksZblocksrÜrÙrVrSr÷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ÁrŸrN) 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[rrr«r±rßrrr•rrœú s   @rœc@s"eZdZdefdefdefgZdS)Ú_Foor1r2ÚzN)rFrGrHr.r/r0Z_fields_rrrrr²bsýr²c@s>eZdZdZdd„Zedd„ƒZddd„Zd d „Zd d „Z d S)Ú_TestSharedCTypesr>cCsts| d¡dSr3r4r_rrrrmsz_TestSharedCTypes.setUpcCsz|jd9_|jd9_|jd9_|jd9_|jd9_|jd9_tt|ƒƒD]}||d9<q`dSr­)rWr1r2rÖrs)r‚r1r2r³r™rTÚ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ÙrgrAgUUUUUUÕ?r/rTr¢r,rÁrerr¤r…TégUUUUUUå?r0raç@Z hellohello)rr/r0r²rRrªrÖr rWr|r¶rprŠr‹rVrPr1r2) r=r¢r1r2r³r™rTrµrrÙrrrÚtest_sharedctypes|s&  z#_TestSharedCTypes.test_sharedctypescCs|jdddS)NTrA)r¹r_rrrÚtest_synchronize“sz"_TestSharedCTypes.test_synchronizecCsTtdddƒ}t|ƒ}d|_d|_d|_| |jd¡| |jd¡| |jd¡dS)Nr¢ç@r/r)r²r r1r2r³rVrP)r=r™rrrrÚ test_copy–s z_TestSharedCTypes.test_copyN)F) rFrGrHr[rr1r¶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é©ÚcreaterVrãrrr¢éþÿÿÿF©rÂz,multiprocessing.shared_memory._make_filenameZ test01_fnZ test02_fncsg|] }ˆ|‘qSrrr©Z NAME_PREFIXrrröØrz?_TestSharedMemory.test_shared_memory_basics..rNZtest01_dblunlinkrŸc@seZdZejejBZdS)zO_TestSharedMemory.test_shared_memory_basics..OptionalAttachSharedMemoryN)rFrGrHr3rOÚO_RDWRZ_flagsrrrrÚOptionalAttachSharedMemory srÇZtest01_nottherer2)r r¾rärCrVrr…rVrsr—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ÚéMr2ipr5Ú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Ïr7rZr3rrÕ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_rrrr9s 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..FooNrrrrrr 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ìrrr¤Ú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Îr rrÚ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 rZ old_intervalZ old_thresholdrLr)r rrÎr rÚtest_thread_safetyrs2     ÿ "   þ  z _TestFinalize.test_thread_safetyN) rFrGrHr[rrr1rrrrrrrrö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$rkr.rrrnrÂr)r=rrÚmodÚattrrrrÚ test_importºs&          þz_TestImportStar.test_importN)rFrGrHrr!rrrrr­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_levelrGrHrrrrÚ test_levelés*    z_TestLogging.test_levelN)rFrGrHr[r*r1r,r2rrrrr"Ø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._killerr4ú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Ãr4r|r5rŠr?r r‹rnrVrv)r=r8rZ oldhandlerZkillerrrr7rÚtest_poll_eintr&s  z_TestPollEintr.test_poll_eintrN) rFrGrHr[r1r5r7r2rÂrÃr9rrrrr3s  r3c@s eZdZe ed¡dd„ƒZdS)ÚTestInvalidHandleúskipped on Windowsc Cs^tj d¡}z.z | ¡Wnttfy0Yn0Wd|_nd|_0| ttftjjd¡dS)NiÈM®r2)rroÚ Connectionršr6r1Ú_handlerârdrrrÚtest_invalid_handlesAs   ÿz&TestInvalidHandle.test_invalid_handlesN)rFrGrHr7rZÚWIN32r>rrrrr:?s r:c@seZdZdd„Zdd„ZdS)Ú OtherTestcCs,Gdd„dtƒ}| tjtjj|ƒd¡dS)Nc@seZdZdd„Zdd„ZdS)zFOtherTest.test_deliver_challenge_auth_failure.._FakeConnectioncSsdS)Nósomething bogusr©r=rVrrrr7WszQOtherTest.test_deliver_challenge_auth_failure.._FakeConnection.recv_bytescSsdSrr©r=rXrrrr9YszQOtherTest.test_deliver_challenge_auth_failure.._FakeConnection.send_bytesN)rFrGrHr7r9rrrrÚ_FakeConnectionVsrDóabc)rŠrârÚAuthenticationErrorroÚdeliver_challenge©r=rDrrrÚ#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¢rAr)r rroÚ CHALLENGErBrrrr7cs   zPOtherTest.test_answer_challenge_auth_failure.._FakeConnection.recv_bytescSsdSrrrCrrrr9jszPOtherTest.test_answer_challenge_auth_failure.._FakeConnection.send_bytesN)rFrGrHr>r7r9rrrrrD`srDrE)rŠrârrFroÚanswer_challengerHrrrÚ"test_answer_challenge_auth_failure_s  þz,OtherTest.test_answer_challenge_auth_failureN)rFrGrHrIrLrrrrr@Rs r@cCs|jd7_dSrM)r)ÚnsrrrÚ initializertsrNc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚTestInitializerscCs"t ¡|_|j ¡|_d|j_dSrÌ)rÚManagerÚmgrrrMrr_rrrrys  zTestInitializers.setUpcCs|j ¡|j ¡dSr)rQrr‹r_rrrr~s zTestInitializers.tearDowncCsNtj ¡}| t|jd¡| t|jf¡| |jj d¡|  ¡|  ¡dSrM) rrÐÚ SyncManagerrâÚ TypeErrorrŠrNrMrVrrr‹)r=rrrrÚtest_manager_initializer‚s  z)TestInitializers.test_manager_initializercCsH|jttjddt dt|jf¡}| ¡| ¡| |jj d¡dS)NrN)rN) rârSrr“rNrMrr‹rVrrÔrrrÚtest_pool_initializerŠs z&TestInitializers.test_pool_initializerN)rFrGrHrrrTrUrrrrrOwsrOcCs*z|jdd}Wntjy$Yn0dS)NF)Úblock)r¬rirr)rdÚitemrrrÚ_this_sub_process–srXcCs2t ¡}tjt|fd}d|_| ¡| ¡dSrÒ)rrr|rXrprŠr‹)rZsubProcrrrÚ _test_processœs rYcCs||Srrr†rrrÚ_afunc£srZcCs0tjdd}| tgd¢¡}| ¡| ¡dS)Nrfr>)rNr¢rTrfrbrarg)rr“rœrZrr‹)r”r1rrrÚpool_in_process¦s r[c@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ÚrCrrrrºsz_file_like.writecCs|j d |j¡¡g|_dS)Nr5)r]rr‹r`r_r_rrrÚflush½sz_file_like.flushN)rFrGrHr>Úpropertyr`rrarrrrr\¬s  r\c@s$eZdZdd„Zdd„Zdd„ZdS)ÚTestStdinBadfiledescriptorcCs tjtd}| ¡| ¡dS©Nry)rr|rYrŠr‹)r=rrrrÚtest_queue_in_processÃs z0TestStdinBadfiledescriptor.test_queue_in_processcCs tjtd}| ¡| ¡dSrd)rr|r[rŠr‹rÔrrrÚtest_pool_in_processÈs z/TestStdinBadfiledescriptor.test_pool_in_processcs:t ¡}t|ƒ‰ˆ d¡tj‡fdd„d}ˆ ¡dS)Nr™csˆ ¡Sr)rar©ZflikerrrÀÑrz:TestStdinBadfiledescriptor.test_flushing..ry)rrr\rrr|ra)r=ÚsiorrrgrÚ test_flushingÍs  z(TestStdinBadfiledescriptor.test_flushingN)rFrGrHrerfrirrrrrcÁsrcc@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ýrrrlûrz%TestWait.test_wait..rÁ)Úmultiprocessing.connectionr%rÖrrˆr|rlrprŠrrÚrär‹rŒrDr$r©rnrV) r=rkr%ÚreadersÚmessagesrÙr@rKrr:rÜrrmrÚ 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$rkr 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*r5css|]}d|VqdS)rrNrrôrrrrl'rz,TestWait.test_wait_socket..rÁr–r)rnr%rrrr,r‘rÖrr|rsrprŠrÚrär‹rurrŒr$r r7rV)r=rkr%r|r3rorýZdicrÙrr@rêr:rÜÚvrrrÚtest_wait_sockets:  ÿ          zTestWait.test_wait_socketcCs| d¡dSr)rqr_rrrÚtest_wait_slow+szTestWait.test_wait_slowcCs| d¡dSr)rur_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çš™™™™™Ù?) rnr%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à)rn)r|rrrrÀQrz,TestWait.test_wait_integer..r…rr–r¢rx)rnr%rr«rˆr|rzrŠrqrãrÐrnržr?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) rnr%rrˆr?r@rVrÂr)r=r%rRrSrCrXrrrÚtest_neg_timeoutxs     zTestWait.test_neg_timeoutN)F)F)rFrGrHr1rlrqrsrurvrwryrzr{r|rrrrrjÖs   # +rjc@s4eZdZe ed¡dd„ƒZe ed¡dd„ƒZdS)ÚTestInvalidFamilyr;cCs:| t¡tj d¡Wdƒn1s,0YdS)Nz\\.\test©râr6rrorqr_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) rFrGrHr7rZr?rr2r€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…ÚprogrXZ 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”rrrort)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_INETrmr…rÆr)rÚgetdefaulttimeoutÚsetdefaulttimeoutrrˆrorqr|rr$rŠrrVrŒrur)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_closer1rrrÚ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Úfromfdrrž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')rkr7r8rrˆrr|r rŠrrŒrrùrïrqr1rnr2rRÚwinerror)r=rGrHrQrr­Z WSAENOTSOCKrrrÚ test_closefd-s2  ÿ   þ     ÿzTestCloseFds.test_closefdN)rFrGrHrrr1r 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Ãr4r”rŒr9Ú CONN_MAX_SIZE)r‚r&rÀr1rrrÚ _test_ignorePs   zTestIgnoreEINTR._test_ignorer4r6cCsà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Ãr4r”r7r¨r‹rfrrrÚ test_ignoreZs( ÿ      zTestIgnoreEINTR.test_ignorecCsbdd„}t tj|¡tj ¡.}| |j¡| ¡}| d¡Wdƒn1sT0YdS)NcSsdSrrr¤rrrrÀssz6TestIgnoreEINTR._test_ignore_listener..handlerÚwelcome)rÃr4rrorqr”r$ru)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Ãr4rortrVr‹)r=r&r5rr$rvrrrÚ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ùrƒrrrÚ_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Úokr5z(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 r1r«r2Ú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ßr ròT)r8ÚalwaysrNzresource_tracker: process died)!Ú multiprocessing.resource_trackerrÈr^r3rÌrÃrÍrZ wait_processrârãrär+r?r rr—r«ržrŸ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Ú_readerrjÚ_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ð)r1rÉ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õrrrrrlËrzITestPoolNotLeakOnFailure.test_release_unused_processes..) ršr1rr”r“r7rÈZ MagicMockrr‹r~rá)r=rärrrãrÚtest_release_unused_processes§sÿ &ÿz6TestPoolNotLeakOnFailure.test_release_unused_processesN)rFrGrHrærrrrrÝ¥srÝc@sdeZdZdZejjZdd„Zdd„Z e dd„ƒZ e Z dd „Z d d „Ze d d „ƒZdd„Ze dd„ƒZdHdd„Ze dd„ƒZdIdd„Ze dd„ƒZdJdd„Zdd„Ze d d!„ƒZd"d#„Ze d$d%„ƒZd&d'„Ze d(d)„ƒZd*d+„Ze d,d-„ƒZdKd/d0„Zd1d2„Z e d3d4„ƒZ!d5d6„Z"e d7d8„ƒZ#d9d:„Z$e d;d<„ƒZ%d=d>„Z&e d?d@„ƒZ'dAdB„Z(e dCdD„ƒZ)dEdF„Z*dGS)LÚTestSyncManagerTypesa}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| ¡|_|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©ržrórrrÚ _test_lock!szTestSyncManagerTypes._test_lockrcCs6t|j|ƒƒ}| |j|¡| ¡| t|j¡dSr)r!rKrñrörŸrâr½©r=ZlnamerÖrrrr£%szTestSyncManagerTypes.test_lockcCs| ¡| ¡dSr©ržrŸ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ôrrrr Ns 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|)rr_rrrÚtest_joinable_queuensz(TestSyncManagerTypes.test_joinable_queuecCs| ¡| ¡|D]}qdSr)r©Úreverse)r‚ryr1rrrÚ _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)rKrmrñrrVrsrôrrrrqs 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)rKrRrñrrôrrrrU©szTestSyncManagerTypes.test_arraycCsdSrrrórrrÚ_test_namespace­sz$TestSyncManagerTypes._test_namespacecCs(|j ¡}d|_d|_| |j|¡dSrè)rKrr1r2rñrrôrrrr‚²s z#TestSyncManagerTypes.test_namespaceN)r)r)r«)r)+rFrGrHr‘rrÐrRrèrrr1r’r—rðrñrÙrÚrör£rùr¥rªr¬r¯rûrürýr rþrÿrrrrr`rrqrr>rrUrr‚rrrrrçÎsd                 rçc@seZdZdd„ZdS)Ú MiscTestCasecCstj|ttjddgddS)NÚSUBDEBUGr%)ÚextraZ blacklist)rZ check__all__rrr_rrrÚ test__all__ºs ÿzMiscTestCase.test__all__N)rFrGrHr rrrrr ¹sr c@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årrrrrí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|ror”rlr‡r¨r“rˆrr|rr¤r«r®r»r¦rýrrRr:rQrrrrrÔÛ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)r‘r’rrPrKr·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‹r‘r—)r‚rïrCrÏr•rrr—s.  ÿþ    zManagerMixin.tearDownClass)rFrGrHrirr|rbÚoperatorÚ attrgetterrr|rr¤r«r®r»r¦rýrrRrªrmrr1r“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|ror”rlr¨r“rˆrr|rr¤r«r®r»r¦rýrrRrrrrr0s$              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>rJrLrKZWithrNÚMixinc@s eZdZdS©z*install_tests_in_module_dict..TempNrrrrrÚTempWsrrKr.c@s eZdZdSrrrrrrr_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Ú_cleanuprr r¯rùr³r6r7r8rçrúrºr¤r1r9rÚ get_temp_dirr#r$r(rA©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årrrírîr¯r?r rÚ_cleanup_tests)Z need_sleeprJrL)rrrrÚtearDownModule~s$  z4install_tests_in_module_dict..tearDownModuler!r#)Úglobalsrrr©rËrIr[Ú capitalizer7ÚTestCaserÚrequires_hashdigestrFrHrGrŠ) Z remote_globsr rGZ local_globsZ ALL_TYPESrÚbaseÚtype_Znewnamerrr!r#rrrÚinstall_tests_in_module_dictHs:        r*)r&)´r7Z unittest.mockrrir?rrŸrçr3rír2rÃrSrr¤r/rìrÞrrçrërâZ test.supportrZtest.support.script_helperrrrÚ import_modulerZ*skip_if_broken_multiprocessing_synchronizer¯rnrZmultiprocessing.dummyZmultiprocessing.heapZmultiprocessing.managersrìÚmultiprocessing.queuesrrÚHAVE_SEND_HANDLErkÚ ImportErrorZmultiprocessing.sharedctypesrr r×r Z HAS_SHMEMrVr rrrrr!r%r(rÓrOrkrlrmr!Z HAVE_GETVALUErúr?r%r)r4rar¸Zctypesr-r.r/r0rŠr9r:rIr]r`rfr|r4r=r\r_r`rœr§r°rØrÛrìrírûrür+rMr[rƒr„r…r‡rˆr6rŒrrrârärårïrrr¿rrr r Úregisterrrrrrrr%r r'r/r8r6rlryrr2rrœr²r´r½rör&rr"r3r:r@rNrOrXrYrZr[r\rcrjr}rrŒr”r–r™r£r¯rZrÁrÕrÝrçr r rÔrrr*rrrrÚs¦                 ÿ   ,WG6*39FS   i(C: 14 "0R h8 x+E"!2 "BCH ÿ3)k =