a 7dg%@sddlZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z m Z m Z mZmZmZmZmZmZddZddZdd d d d ZGd ddZGdddZGdddejZeddZedkredS)N)mock) verbose run_unittestTESTFN reap_threadsforgetunlinkrmtree start_threads script_helperc Cszz>t|dr"ddl}ddl}nddl}ddl}|dd}Wn4tyt}z||dWYd}~n d}~00W|tt||k}|r| n(|tt||k}|r| 0dS)Nr) len modulefinderrandom randrange Exceptionappendwith_traceback threading get_identset) Ndone done_taskserrorsrrxefinishedr D/usr/local/lib/python3.9/test/test_importlib/test_threaded_import.pytasks"  (   r"cCstjddd|S)Nzos.register_at_forkT)Zcreate)rZpatch)funcr r r!mock_register_at_fork)sr$zaif 1: import time time.sleep(%(delay)s) x = 'a' import C zaif 1: import time time.sleep(%(delay)s) x = 'b' import D zimport Bzimport A)ABCDc@s"eZdZdZddZdddZdS)FinderzIA dummy finder to detect concurrent access to its find_spec() method.cCsd|_d|_t|_dSNr)numcallsrrLocklockselfr r r!__init__GszFinder.__init__NcCs^ts J|j|jd7_Wdn1s60Y|j}td|d|_dS)Nr g{Gz?)imp lock_heldr-r+rtimesleep)r/namepathtargetrr r r! find_specLs  , zFinder.find_spec)NN)__name__ __module__ __qualname____doc__r0r8r r r r!r)Csr)c@seZdZdZdddZdS)FlushingFinderzMA dummy finder which flushes sys.path_importer_cache when it gets called.NcCstjdSN)syspath_importer_cacheclear)r/r5r6r7r r r!r8[szFlushingFinder.find_spec)NN)r9r:r;r<r8r r r r!r=Wsr=c@sleZdZddZddZeddZddZd d Zd d Z d dZ ddZ eddZ ddZ ddZdS)ThreadedImportTestscCstjdd|_dSNr)r?modulespop old_randomr.r r r!setUpaszThreadedImportTests.setUpcCs|jdur|jtjd<dSrC)rFr?rDr.r r r!tearDownds zThreadedImportTests.tearDownc s$trtdtdD]tr8tdddddD]$}z tj |=Wq<t y^Yq<0qs zAThreadedImportTests.check_parallel_module_init..iXz%.1f msg@@T)flushrLz done: %s/%szOK.)r1r2unittestZSkipTestrEventrprintr?rDKeyErrorrAr3 monotonicr rangewaitr assertFalseZ assertTrue)r/mock_osmodnamet0Z completedZdtZdbg_infor rQr!check_parallel_module_initks8         z.ThreadedImportTests.check_parallel_module_initcCs |dSr>)r_r.r r r!test_parallel_module_initsz-ThreadedImportTests.test_parallel_module_initc Cs^t}tjd|z6|||jd||j|jWtj |ntj |0dSr*) r)r? meta_pathinsertr_ assertGreaterr+ assertEqualrremove)r/finderr r r!test_parallel_meta_pathsz+ThreadedImportTests.test_parallel_meta_pathc stt}fdd}tjd|tj|zL|d|}| j d| j j Wtj |tj |ntj |tj |0dS)NcsdtdS)N)r8 ImportError)r6rfr r! path_hooks z?ThreadedImportTests.test_parallel_path_hooks..path_hookrrh)r)r=r? path_hooksrbrarr8r_rcr+rdrre)r/Zflushing_finderrkZnumtestsr rjr!test_parallel_path_hookss     z,ThreadedImportTests.test_parallel_path_hookscCs<z tjd=WntyYn0ddl}||jjjdS)Nz+test.test_importlib.threaded_import_hangersr)r?rDrWZ+test.test_importlib.threaded_import_hangersr[Ztest_importlibZthreaded_import_hangersr)r/testr r r!test_import_hangerss   z'ThreadedImportTests.test_import_hangersc s d}tt|tjttjdt|tjj tt D]h\}}|d|i}t tj t|dd }||dWdn1s0Y|t|qBtgfdd}fd d }tj|d }tj|d }||| | |td d hdS)Ng?rdelay.pywbutf-8csddl}t|dddSNrr)r%rgetattr)r%resultsr r! import_absz.import_abcsddl}t|dddSrt)r&rru)r&rvr r! import_basz.import_ba)r7ab)osmkdirr addCleanupshutilr r?r6rbrecircular_imports_modulesitemsopenjoinwriteencoder importlibinvalidate_cachesrrNstartrdr) r/rpr5contentsfrxryt1t2r rvr!test_circular_importss*   .    z)ThreadedImportTests.test_circular_importscCsd}tjdtj|tjjtjtd}t|d }| | dWdn1s^0Y|t ||t t|t dttttjt=dS)Nzif 1: import threading def target(): import random t = threading.Thread(target=target) t.start() t.join() t = Nonerrqrrrs __pycache__)r?r6rbr|curdirr~rerrrrrrr rr __import__rD)r/r\codefilenamerr r r!test_side_effect_imports .   z+ThreadedImportTests.test_side_effect_importcCs&tjtjtdd}t|dS)Npartialz cfimport.pyr|r6rdirname__file__r Zassert_python_okr/fnr r r!'test_concurrent_futures_circular_importsz;ThreadedImportTests.test_concurrent_futures_circular_importcCs&tjtjtdd}t|dS)Nrzpool_in_threads.pyrrr r r!)test_multiprocessing_pool_circular_importsz=ThreadedImportTests.test_multiprocessing_pool_circular_importN)r9r:r;rGrHr$r_r`rgrmrorrrrr r r r!rB_s !  & rBc Csfd}zt}tdWnty,Yn0zttW|durbt|n|dur`t|0dS)Ngh㈵>)r?getswitchintervalsetswitchintervalAttributeErrorrrB)Zold_switchintervalr r r! test_mains   r__main__)_impr1r|rr?r3rrrTrZ test.supportrrrrrrr r r r"r$rr)r=ZTestCaserBrr9r r r r!s0 , &