a DOg6@sddlZddlZddlZddlZddlZddlZddlmZddlm Z gdZ dZ dZ dZ dZd Zd Zd Zdad ad dZddZddZddZddZd?ddZddZddZeZddZdd ZeZ e!Z"d!d"Z#d#d$Z$iZ%e!Z&Gd%d&d&e'Z(d@d'd(Z)d)d*Z*d a+eee)e j,e j-fd+d,Z.e/e.Gd-d.d.e'Z0Gd/d0d0ej1Z2ze3d1Z4Wne5yd2Z4Yn0d3d4Z6d5d6Z7d7d8Z8d9d:Z9d;d<Z:d=d>Z;dS)AN)_args_from_interpreter_flags)process) sub_debugdebuginfo sub_warning get_logger log_to_stderr get_temp_dirregister_after_fork is_exitingFinalizeForkAwareThreadLockForkAwareLocalclose_all_fds_exceptSUBDEBUG SUBWARNING multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|g|RdSN)_loggerlogrmsgargsr9/opt/alt/python39/lib64/python3.9/multiprocessing/util.pyr,srcGstrtjt|g|RdSr)rrDEBUGrrrr r0srcGstrtjt|g|RdSr)rrINFOrrrr r4srcGstrtjt|g|RdSr)rrrrrrr r8srcCsddl}|zdtsj|tadt_ttdrFtt t t n$tj t diftj t difW|n |0tS)z0 Returns logger used by multiprocessing rN unregisterr)loggingZ _acquireLockrZ getLogger LOGGER_NAMEZ propagatehasattratexitr#_exit_functionregisterZ _exithandlersremoveappendZ _releaseLock)r$rrr r <s    r cCsJddl}t}|t}|}|||||rB||dat S)zB Turn on logging and add a handler which prints to stderr rNT) r$r Z FormatterDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevel_log_to_stderrr)levelr$ZloggerZ formatterZhandlerrrr r Ws    r cCs tjdkrdSttdrdSdS)NZlinuxTZgetandroidapilevelF)sysplatformr&rrrr #_platform_supports_abstract_socketsls   r1cCsH|sdSt|tr|ddkSt|tr4|ddkStd|ddS)NFrzaddress type of z unrecognized) isinstancebytesstr TypeError)Zaddressrrr is_abstract_socket_namespacets    r7cCs&||t}|dur"d|jd<dS)Ntempdir)rcurrent_process_config)rmtreer8r9rrr _remove_temp_dirsr<cCsftjd}|durbddl}ddl}|jdd}td|tdt |j |fdd|tjd<|S)Nr8rzpymp-)prefixzcreated temp directory %si)r exitpriority) rr9r:getshutiltempfileZmkdtemprrr<r;)r8r@rArrr r s  r c Cshtt}||D]J\\}}}}z ||Wqty`}ztd|WYd}~qd}~00qdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)rDindexZidentfuncobjerrr _run_after_forkerss  rKcCs|tttt||f<dSr)rCnext_afterfork_counterid)rIrHrrr r sr c@sFeZdZdZdddZdeeejfddZ dd Z d d Z d d Z dS)rzA Class which supports object finalization using weakrefs rNcCs|dur&t|ts&td|t||dur>t|||_n|durNtd||_ ||_ |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)r3intr6formattypeweakrefref_weakref ValueError _callback_args_kwargsrL_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrIcallbackrkwargsr>rrr __init__s   zFinalize.__init__cCsz ||j=Wnty&|dYnf0|j|krB|dd}n(|d|j|j|j|j|ji|j}d|_|_|_|_|_|SdS)zQ Run the callback unless it has already been called or cancelled zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rZKeyErrorr]rVrWrXrT)r_Zwrr^rr\resrrr __call__s    zFinalize.__call__cCsBz t|j=WntyYn 0d|_|_|_|_|_dS)z3 Cancel finalization of the object N)r^rZrcrTrVrWrXr_rrr cancels  zFinalize.cancelcCs |jtvS)zS Return whether this finalizer is still waiting to invoke callback )rZr^rfrrr still_activeszFinalize.still_activec Csz |}Wnttfy&d}Yn0|durz<%s object, callback=%s__name__z, args=z , kwargs=rz, exitpriority=>) rTAttributeErrorr6 __class__rigetattrrVrWr5rXrZ)r_rIxrrr __repr__s"   zFinalize.__repr__)rNN) ri __module__ __qualname____doc__rbr^rr[r\rergrhrorrrr rs   rc stdur dSdurddn fddfddttD}|jdd|D]N}t|}|durPtd |z |WqPtyd dl}|YqP0qPdurtdS) z Run all finalizers whose exit priority is not None and at least minpriority Finalizers with highest priority are called first; finalizers with the same priority will be called in reverse order of creation. NcSs |dduSNrrprrr z!_run_finalizers..cs|dduo|dkSrsrrt) minpriorityrr rvrwcsg|]}|r|qSrr).0key)frr #rwz#_run_finalizers..T)reversez calling %sr) r^rBrEr?rrF traceback print_excclear)rxkeysrz finalizerr~r)r{rxr _run_finalizers s$       rcCs tp tduS)z6 Returns true if the process is shutting down N)_exitingrrrr r 8sr cCstsda|d|d|d|durr|D] }|jr0|d|j|jq0|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)rZdaemonnameZ_popenZ terminatejoin)rrractive_childrenr9rurrr r(@s        r(c@s,eZdZddZddZddZddZd S) rcCs.t|_|jj|_|jj|_t|tjdSr) threadingZLock_lockacquirereleaser r_at_fork_reinitrfrrr rbqs   zForkAwareThreadLock.__init__cCs|jdSr)rrrfrrr rwsz#ForkAwareThreadLock._at_fork_reinitcCs |jSr)r __enter__rfrrr rzszForkAwareThreadLock.__enter__cGs |jj|Sr)r__exit__)r_rrrr r}szForkAwareThreadLock.__exit__N)rirprqrbrrrrrrr rpsrc@seZdZddZddZdS)rcCst|dddS)NcSs |jSr)__dict__r)rIrrr rvrwz)ForkAwareLocal.__init__..)r rfrrr rbszForkAwareLocal.__init__cCs t|dfS)Nr)rQrfrrr __reduce__szForkAwareLocal.__reduce__N)rirprqrbrrrrr rsr SC_OPEN_MAXcCsNt|dtg}|tt|dD] }t||d||dq(dS)Nr)rBMAXFDrErangelenr[ closerange)fdsirrr rsrc CstjdurdSztjWnttfy2Yn0z@ttjtj}zt|ddt_Wnt|Yn0WnttfyYn0dS)NF)closefd) r/stdincloseOSErrorrUr[opendevnullO_RDONLY)fdrrr _close_stdins   rc CsPztjWnttfy$Yn0ztjWnttfyJYn0dSr)r/stdoutflushrkrUstderrrrrr _flush_std_streamssrcCsddl}tttt|}t\}}zP||t|gd|dddddddd||dddddddWt |t |St |t |0dS)NrTrF) _posixsubprocesstuplesortedmaprOr[pipeZ fork_execfsencoder)pathrZpassfdsrZ errpipe_readZ errpipe_writerrr spawnv_passfdss     rcGs|D]}t|qdS)z/Close each file descriptor given as an argumentN)r[r)rrrrr close_fdssrcCsZddlm}tddlm}|jddlm}|j t | | dS)zKCleanup multiprocessing resources when multiprocessing tests completed.r)support) forkserver)resource_trackerN) testrrZ_cleanuprrZ _forkserverZ_stoprZ_resource_trackerrZ gc_collectZ reap_children)rrrrrr _cleanup_testss     r)N)N) sn       V , *