U e5d~6ã@sÚddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadadd„Zdd„Zdd„Zdd„Zdd „Zd@d d „Zd!d"„Zd#d$„ZeƒZd%d&„Zd'd „Ze ¡Z e !¡Z"d(d)„Z#d*d „Z$iZ%e !¡Z&Gd+d„de'ƒZ(dAd,d-„Z)d.d „Z*da+eee)e j,e j-fd/d0„Z.e /e.¡Gd1d„de'ƒZ0Gd2d„dej1ƒZ2ze 3d3¡Z4Wne5k �r¤d4Z4YnXd5d„Z6d6d7„Z7d8d9„Z8d:d;„Z9dd?„Z;dS)BéN)Ú_args_from_interpreter_flagsé)ÚprocessÚ sub_debugÚdebugÚinfoÚ sub_warningÚ get_loggerÚ log_to_stderrÚ get_temp_dirÚregister_after_forkÚ is_exitingÚFinalizeÚForkAwareThreadLockÚForkAwareLocalÚclose_all_fds_exceptÚSUBDEBUGÚ SUBWARNINGéé ééÚmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|žŽdS©N)Ú_loggerÚlogr©ÚmsgÚargs©rú,/usr/lib64/python3.8/multiprocessing/util.pyr,scGstrtjt|f|žŽdSr)rrÚDEBUGrrrr r0scGstrtjt|f|žŽdSr)rrÚINFOrrrr r4scGstrtjt|f|žŽdSr)rrrrrrr r8scCs|ddl}| ¡z\tsj| t¡adt_ttdƒrFt  t ¡t  t ¡n$tj   t dif¡tj  t dif¡W5| ¡XtS)NrÚ unregisterr)ÚloggingZ _acquireLockZ _releaseLockrZ getLoggerÚ LOGGER_NAMEZ propagateÚhasattrÚatexitr#Ú_exit_functionÚregisterZ _exithandlersÚremoveÚappend)r$rrr r <s     cCsJddl}tƒ}| t¡}| ¡}| |¡| |¡|rB| |¡dat S)NrT) r$r Z FormatterÚDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevelÚ_log_to_stderrr)Úlevelr$ZloggerZ formatterZhandlerrrr r Ws    cCs tjdkrdSttdƒrdSdS)NZlinuxTZgetandroidapilevelF)ÚsysÚplatformr&rrrr Ú#_platform_supports_abstract_socketsls   r1cCs@|sdSt|tƒr|ddkSt|tƒr4|ddkStdƒ‚dS)NFrúz(address type of {address!r} unrecognized)Ú isinstanceÚbytesÚstrÚ TypeError)Zaddressrrr Úis_abstract_socket_namespacets    r7cCs&||ƒt ¡}|dk r"d|jd<dS)NÚtempdir)rÚcurrent_processÚ_config)Úrmtreer8r9rrr Ú_remove_temp_dir„sr<cCsft ¡j d¡}|dkrbddl}ddl}|jdd�}td|ƒtdt |j |fdd�|t ¡jd<|S)Nr8rzpymp-)Úprefixzcreated temp directory %siœÿÿÿ)rÚ exitpriority) rr9r:ÚgetÚshutilÚtempfileZmkdtemprrr<r;)r8r@rArrr r �s  ÿc Csftt ¡ƒ}| ¡|D]H\\}}}}z ||ƒWqtk r^}ztd|ƒW5d}~XYqXqdS)Nz after forker raised exception %s)ÚlistÚ_afterfork_registryÚitemsÚsortÚ Exceptionr)rDÚindexZidentÚfuncÚobjÚerrr Ú_run_after_forkers¢s  rKcCs|tttƒt|ƒ|f<dSr)rCÚnextÚ_afterfork_counterÚid)rIrHrrr r «sc@sBeZdZd dd„Zdeeejfdd„Zdd„Z d d „Z d d „Z dS)rrNcCsŠ|dk r&t|tƒs&td |t|ƒ¡ƒ‚|dk r>t ||¡|_n|dkrNtdƒ‚||_ ||_ |p`i|_ |t t ƒf|_t ¡|_|t|j<dS)Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)r3Úintr6ÚformatÚtypeÚweakrefÚrefÚ_weakrefÚ ValueErrorÚ _callbackÚ_argsÚ_kwargsrLÚ_finalizer_counterÚ_keyÚosÚgetpidÚ_pidÚ_finalizer_registry)ÚselfrIÚcallbackrÚkwargsr>rrr Ú__init__ºs"ÿÿ  zFinalize.__init__cCsŽz ||j=Wntk r(|dƒYnbX|j|ƒkrD|dƒd}n$|d|j|j|jƒ|j|j|jŽ}d|_|_|_|_|_|SdS)Nzfinalizer no longer registeredz+finalizer ignored because different processz/finalizer calling %s with args %s and kwargs %s)rZÚKeyErrorr]rVrWrXrT)r_Zwrr^rr\Úresrrr Ú__call__Ís$  ÿÿzFinalize.__call__cCsDz t|j=Wntk r Yn Xd|_|_|_|_|_dSr)r^rZrcrTrVrWrX©r_rrr Úcancelås ÿÿzFinalize.cancelcCs |jtkSr)rZr^rfrrr Ú still_activeñszFinalize.still_activec Cs¶z | ¡}Wnttfk r(d}YnX|dkr>d|jjSd|jjt|jd|jƒf}|jrr|dt|jƒ7}|j rŠ|dt|j ƒ7}|j ddk r®|dt|j dƒ7}|dS) Nz<%s object, dead>z<%s object, callback=%sÚ__name__z, args=z , kwargs=rz, exitpriority=ú>) rTÚAttributeErrorr6Ú __class__riÚgetattrrVrWr5rXrZ)r_rIÚxrrr Ú__repr__÷s"   þzFinalize.__repr__)rNN) riÚ __module__Ú __qualname__rbr^rr[r\rergrhrorrrr r¶s ü  c s¶tdkr dSˆdkrdd„‰n ‡fdd„‰‡fdd„ttƒDƒ}|jdd�|D]P}t |¡}|dk rPtd|ƒz |ƒWqPtk ržd dl}| ¡YqPXqPˆdkr²t ¡dS) NcSs |ddk S©Nrr©Úprrr Úóz!_run_finalizers..cs|ddk o|dˆkSrrrrs)Ú minpriorityrr rurvcsg|]}ˆ|ƒr|‘qSrr)Ú.0Úkey)Úfrr Ú #sz#_run_finalizers..T)Úreversez calling %sr) r^rBrEr?rrFÚ tracebackÚ print_excÚclear)rwÚkeysryÚ finalizerr}r)rzrwr Ú_run_finalizers s$      r‚cCs tp tdkSr)Ú_exitingrrrr r 8scCs„ts€da|dƒ|dƒ|dƒ|ƒdk rr|ƒD] }|jr0|d|jƒ|j ¡q0|ƒD]}|d|jƒ| ¡qX|dƒ|ƒdS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rƒZdaemonÚnameZ_popenZ terminateÚjoin)rrr‚Úactive_childrenr9rtrrr r(@s        r(c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCs| ¡t|tjƒdSr)Ú_resetr rrfrrr rbqszForkAwareThreadLock.__init__cCs"t ¡|_|jj|_|jj|_dSr)Ú threadingZLockÚ_lockÚacquireÚreleaserfrrr r‡us  zForkAwareThreadLock._resetcCs |j ¡Sr)r‰Ú __enter__rfrrr rŒzszForkAwareThreadLock.__enter__cGs |jj|ŽSr)r‰Ú__exit__)r_rrrr r�}szForkAwareThreadLock.__exit__N)rirprqrbr‡rŒr�rrrr rpsc@seZdZdd„Zdd„ZdS)rcCst|dd„ƒdS)NcSs |j ¡Sr)Ú__dict__r)rIrrr ruƒrvz)ForkAwareLocal.__init__..)r rfrrr rb‚szForkAwareLocal.__init__cCs t|ƒdfS)Nr)rQrfrrr Ú __reduce__„szForkAwareLocal.__reduce__N)rirprqrbr�rrrr r�sÚ SC_OPEN_MAXécCsNt|ƒdtg}| ¡tt|ƒdƒD] }t ||d||d¡q(dS)Néÿÿÿÿr)rBÚMAXFDrEÚrangeÚlenr[Ú closerange)ÚfdsÚirrr r�sc Cs”tjdkrdSztj ¡Wnttfk r4YnXz@t tjtj¡}zt|dd�t_Wnt |¡‚YnXWnttfk rŽYnXdS)NF)Úclosefd) r/ÚstdinÚcloseÚOSErrorrUr[ÚopenÚdevnullÚO_RDONLY)Úfdrrr Ú _close_stdinšs   r¡c CsTztj ¡Wnttfk r&YnXztj ¡Wnttfk rNYnXdSr)r/ÚstdoutÚflushrkrUÚstderrrrrr Ú_flush_std_streams±sr¥cCsxddl}tttt|ƒƒƒ}t ¡\}}z6| |t  |¡gd|dddddddd||ddd¡W¢St |¡t |¡XdS)NrTr’F) Ú_posixsubprocessÚtupleÚsortedÚmaprOr[Úpiper›Z fork_execÚfsencode)ÚpathrZpassfdsr¦Z errpipe_readZ errpipe_writerrr Úspawnv_passfds¿s2  ý r­cGs|D]}t |¡qdSr)r[r›)r—r rrr Ú close_fdsÍsr®cCsZddlm}t ¡ddlm}|j ¡ddlm}|j  ¡t ƒ|  ¡|  ¡dS)Nr)Úsupport)Ú forkserver)Úresource_tracker) Ztestr¯rZ_cleanuprr°Z _forkserverZ_stopr±Z_resource_trackerr‚Z gc_collectZ reap_children)r¯r°r±rrr Ú_cleanup_testsÓs     r²)N)N) sŒ  ü     V ,þ *