\d6NddlZddlZddlZddlZddlZddlZddlmZddlm Z gdZ dZ dZ dZ dZd Zd Zd Zdad ad ZdZdZdZdZd*dZdZdZeZdZdZejZ ej!Z"dZ#dZ$iZ%ej!Z&Gdde'Z(d*dZ)dZ*d a+eee)e j,e j-fdZ.ej/e.Gdde'Z0Gd d!ej1Z2 ej3d"Z4n #e5$rd#Z4YnwxYwd$Z6d%Z7d&Z8d'Z9d(Z:d)Z;dS)+N)_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)sFcHtrtjt|g|RdSdSN)_loggerlogrmsgargss %..\python\lib\multiprocessing\util.pyrr,s4* Hc)D))))))**cHtrtjt|g|RdSdSr)rrDEBUGrs r!rr0s4' E3&&&&&&&''r"cHtrtjt|g|RdSdSr)rrINFOrs r!rr4s4& D#%%%%%%%&&r"cHtrtjt|g|RdSdSr)rrrrs r!r r 8s4, J+d++++++,,r"c$ddl}| ts|tadt_t tdr3tjttj tnNtj tdiftj tdif|n#|wxYwtS)z0 Returns logger used by multiprocessing rN unregister)logging _acquireLockr getLogger LOGGER_NAME propagatehasattratexitr)_exit_functionregister _exithandlersremoveappend _releaseLock)r+s r!r r <s NNN  F'' 44G !G v|,, F!.111////$++^R,DEEE$++^R,DEEE  Ns CC22Dcddl}t}|t}|}|||||r||datS)zB Turn on logging and add a handler which prints to stderr rNT) r+r FormatterDEFAULT_LOGGING_FORMAT StreamHandler setFormatter addHandlersetLevel_log_to_stderrr)levelr+logger formatterhandlers r!r r Ws NNN \\F!!"899I##%%G ### g N Nr"cXtjdkrdSttdrdSdS)NlinuxTgetandroidapilevelF)sysplatformr0r*r"r!#_platform_supports_abstract_socketsrIls1 |wts())t 5r"c|sdSt|tr |ddkSt|tr |ddkStd|d)NFrzaddress type of z unrecognized) isinstancebytesstr TypeError)addresss r!is_abstract_socket_namespacerQtsj u'5!!"qzQ GS ! !"qzT!! ?w??? @ @@r"c^||tj}| d|jd<dSdS)Ntempdir)rcurrent_process_config)rmtreerSrTs r!_remove_temp_dirrWs@ F7OOO-//O"-1 ***#"r"c0tjjd}|hddl}ddl}|d}td|tdt|j |fd|tjjd<|S)NrSrzpymp-)prefixzcreated temp directory %si)r exitpriority) rrTrUgetshutiltempfilemkdtemprrrWrV)rSr\r]s r!r r s%''/33I>>G""'"22 ('222 'v}g.F" $ $ $ $7>!!))4 Nr"ctt}||D]<\\}}}} ||#t$r}t d|Yd}~5d}~wwxYwdS)Nz after forker raised exception %s)list_afterfork_registryitemssort Exceptionr)rbindexidentfuncobjes r!_run_after_forkersrjs $**,, - -E JJLLL%*88!tc 8 DIIII 8 8 8 3Q 7 7 7 7 7 7 7 7 888s A A7A22A7c^|tttt||f<dSr)ranext_afterfork_counterid)rhrgs r!r r s)EH0112c77DABBBr"cFeZdZdZd dZdeeejfdZ dZ dZ dZ dS) rzA Class which supports object finalization using weakrefs r*Nc|Et|ts0td|t ||t j|||_n|td||_ ||_ |pi|_ |ttf|_tj|_|t$|j<dS)Nz3Exitpriority ({0!r}) must be None or int, not {1!s}z+Without object, exitpriority cannot be None)rLintrOformattypeweakrefref_weakref ValueError _callback_args_kwargsrl_finalizer_counter_keyosgetpid_pid_finalizer_registry)selfrhcallbackr kwargsrZs r!__init__zFinalize.__init__s  $jc.J.J $ELL $|"4"46677 7 ?#KT22DMM  !JKK K! | !4(:#;#;< IKK )-DI&&&r"c@ ||j=|j|kr|dd}n4|d|j|j|j|j|ji|j}dx|_x|_x|_x|_|_|S#t $r|dYdSwxYw)zQ Run the callback unless it has already been called or cancelled z+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %szfinalizer no longer registered)r|rrxryrzrvKeyError)rwrrrr~ress r!__call__zFinalize.__call__s #DI.yFFHH$$ GHHH K.$*dlDDD$dndjADLAA7; ) rvAttributeErrorrO __class__rgetattrrxryrNrzr|)rrhxs r!__repr__zFinalize.__repr__s --//CC *   CCC  ;&)@@ @ ''' DNCCC E : - S__, ,A < 1 s4<000 0A 9Q< # "S1%6%66 6A3ws --)r*NN) r __module__ __qualname____doc__rrrr}r~rrrrr*r"r!rrs....&&9$RY 0 < < <000 r"rctdSdnfdfdttD}|d|D]b}t|}|Dt d| |:#t $rddl}|Y^wxYwctdSdS) 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. Nc|dduSNrr*)ps r!z!_run_finalizers..sqt4'r"c0|dduo |dkSrr*)r minprioritys r!rz!_run_finalizers..sqt4'?AaDK,?r"c*g|]}| |Sr*r*).0keyfs r! z#_run_finalizers..#s& ? ? ?C# ?C ? ? ?r"T)reversez calling %sr) rr`rcr[rrd traceback print_excclear)rkeysr finalizerrrs` @r!_run_finalizersr s "  ' ' ? ? ? ? @ ? ? ?4 344 ? ? ?DIIdI & &'++C00  lI . . . &  & & &    ##%%%%% & !!!#####s> B  "B.-B.c"tptduS)z6 Returns true if the process is shutting down N)_exitingr*r"r!rr8s  'x4''r"c|tsda|d|d|d|p|D]3}|jr*|d|j|j4|D]'}|d|j|(|d|dSdS)NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0rz!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rdaemonname_popen terminatejoin)rrractive_childrenrTrs r!r2r2@s   $%%% BCCC ?   (%_&& ) )8)D.ss|/A/A/C/Cr")r rs r!rzForkAwareLocal.__init__sD"C"CDDDDDr"c$t|dfS)Nr*)rsrs r! __reduce__zForkAwareLocal.__reduce__sDzz2~r"N)rrrrrr*r"r!rrs5EEEr"r SC_OPEN_MAXc(t|dtgz}||dtks Jdtt |dz D])}t j||dz||dz*dS)Nz fd too larger)r`MAXFDrcrangelenr} closerange)fdsis r!rrs s))r5k !CHHJJJ r7e   ^    3s88a< ** c!fQhAaC))))**r"ctjdS tjn#ttf$rYnwxYw t jt jt j} t |ddt_dS#t j|xYw#ttf$rYdSwxYw)Nzutf-8F)encodingclosefd) rGstdincloseOSErrorrwr}opendevnullO_RDONLY)fds r! _close_stdinrs y   Z       WRZ - - R'5AAACIII  HRLLL  Z      s3/AA)B)1BB&&B))B>=B>c tjn#ttf$rYnwxYw tjdS#ttf$rYdSwxYwr)rGstdoutflushrrwstderrr*r"r!_flush_std_streamsrs   J '        J '     s!55AA.-A.cddl}ddl}ttt t |}t j\}} |||gd|dddddddd||dddddddd|j t j |t j |S#t j |t j |wxYw)NrTrF) _posixsubprocess subprocesstuplesortedmaprqr}pipe fork_exec _USE_VFORKr)pathr passfdsrr errpipe_read errpipe_writes r!spawnv_passfdsrsF3sG,,--..G"$'))L- )) 4&$t BBL- 5"dD$D  ! ##    s 0B((*Cc8|D]}tj|dS)z/Close each file descriptor given as an argumentN)r}r)rrs r! close_fdsrs*  r"c ddlm}tjddlm}|jddlm}|j t| | dS)zKCleanup multiprocessing resources when multiprocessing tests completed.r)support) forkserver)resource_trackerN) testrr_cleanuprr _forkserver_stopr_resource_trackerr gc_collect reap_children)rrrs r!_cleanup_testsrs +*****  """100000&,,...  r"r)r sD   333333          F ***'''&&&,,,6*AAAA@BB 222   $2g133$Y_&&888III$Y_&&SSSSSvSSSl&$&$&$&$X((( E?#*#:#*#:((((T *****&***"Y_ BJ} % %EE EEE***   .        s5DDD