3 Õì2an.ã@s¬ddlZddlZddlZddlZddlZddlZddlmZddlm Z ddddd d d d d ddddddgZ dZ dZ dZ dZdZdZdZdadadd„Zdd„Zdd„Zdd„Zdd „Zd6d d „Zd!d „ZejƒZejƒZd"d#„Zd$d „Z iZ!ejƒZ"Gd%d„de#ƒZ$d7d&d'„Z%d(d „Z&da'eee%e j(e j)fd)d*„Z*ej+e*ƒGd+d„de#ƒZ,Gd,d„dej-ƒZ.yej/d-ƒZ0Wne1k �r†d.Z0YnXd/d„Z2d0d1„Z3d2d3„Z4d4d5„Z5dS)8é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éé ééZmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFcGstrtjt|f|žŽdS)N)Ú_loggerÚlogr)ÚmsgÚargs©rú)/opt/alt/python36/lib64/python3.6/util.pyr,scGstrtjt|f|žŽdS)N)rrÚDEBUG)rrrrrr0scGstrtjt|f|žŽdS)N)rrÚINFO)rrrrrr4scGstrtjt|f|žŽdS)N)rrr)rrrrrr8sc Cs|ddl}|jƒz\tsj|jtƒadt_ttdƒrFtjt ƒtj t ƒn$tj j t fifƒtj j t fifƒWd|jƒXtS)NrÚ unregister)ÚloggingZ _acquireLockrZ getLoggerÚ LOGGER_NAMEZ propagateÚhasattrÚatexitr Ú_exit_functionÚregisterZ _exithandlersÚremoveÚappendZ _releaseLock)r!rrrr <s     cCsJddl}tƒ}|jtƒ}|jƒ}|j|ƒ|j|ƒ|rB|j|ƒdat S)NrT) r!r Z FormatterÚDEFAULT_LOGGING_FORMATZ StreamHandlerZ setFormatterZ addHandlerZsetLevelÚ_log_to_stderrr)Úlevelr!ZloggerÚ formatterZhandlerrrrr Ws    cCsdtjƒjjdƒ}|dkr`ddl}ddl}|jdd�}td|ƒtd|j |gdd�|tjƒjd<|S) NÚtempdirrzpymp-)Úprefixzcreated temp directory %séd)rÚ exitpriorityiœÿÿÿ) rÚcurrent_processZ_configÚgetÚshutilÚtempfileZmkdtemprrZrmtree)r-r3r4rrrr ms  cCsjttjƒƒ}|jƒxP|D]H\\}}}}y ||ƒWqtk r`}ztd|ƒWYdd}~XqXqWdS)Nz after forker raised exception %s)ÚlistÚ_afterfork_registryÚitemsÚsortÚ Exceptionr)r7ÚindexZidentÚfuncÚobjÚerrrÚ_run_after_forkerss  r>cCs|tttƒt|ƒ|f<dS)N)r6ÚnextÚ_afterfork_counterÚid)r<r;rrrr ˆsc@sHeZdZfddfdd„Zdeeejfdd„Zdd„Z dd „Z d d „Z dS) rNcCsT|dk rtj||ƒ|_n||_||_|p*i|_|ttƒf|_t j ƒ|_ |t |j<dS)N) ÚweakrefÚrefÚ_weakrefÚ _callbackÚ_argsÚ_kwargsr?Ú_finalizer_counterÚ_keyÚosÚgetpidÚ_pidÚ_finalizer_registry)Úselfr<ÚcallbackrÚkwargsr0rrrÚ__init__—s  zFinalize.__init__c CsŽy ||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)rIÚKeyErrorrLrErFrGrD)rNÚwrrMrrKÚresrrrÚ__call__§s  zFinalize.__call__c CsDy t|j=Wntk r Yn Xd|_|_|_|_|_dS)N)rMrIrRrDrErFrG)rNrrrÚcancel¿s  zFinalize.cancelcCs |jtkS)N)rIrM)rNrrrÚ still_activeËszFinalize.still_activecCs¶y |jƒ}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, exitprority=ú>) rDÚAttributeErrorÚ TypeErrorÚ __class__rXÚgetattrrErFÚstrrGrI)rNr<ÚxrrrÚ__repr__Ñs    zFinalize.__repr__) rXÚ __module__Ú __qualname__rQrMrrJrKrUrVrWr`rrrrr“s c sºtdkr dSˆdkrdd„‰n ‡fdd„‰‡fdd„ttƒDƒ}|jdd�xX|D]P}tj|ƒ}|dk rRtd|ƒy |ƒWqRtk r d dl}|jƒYqRXqRWˆdkr¶tjƒdS) NcSs |ddk S)Nrr)ÚprrrÚôsz!_run_finalizers..cs|ddk o|dˆkS)Nrr)rc)Ú minpriorityrrrdöscsg|]}ˆ|ƒr|‘qSrr)Ú.0Úkey)Úfrrú ýsz#_run_finalizers..T)Úreversez calling %sr) rMr5r8r2rr9Ú tracebackÚ print_excÚclear)reÚkeysrgÚ finalizerrkr)rhrerÚ_run_finalizersæs$       rpcCs tp tdkS)N)Ú_exitingrrrrr scCsŒtsˆda|dƒ|dƒ|dƒ|ƒdk rzx*|ƒD] }|jr2|d|jƒ|jjƒq2Wx"|ƒD]}|d|jƒ|jƒq^W|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)rqZdaemonÚnameZ_popenZ terminateÚjoin)rrrpÚactive_childrenr1rcrrrr%s       r%c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rcCs|jƒt|tjƒdS)N)Ú_resetr r)rNrrrrQKszForkAwareThreadLock.__init__cCs"tjƒ|_|jj|_|jj|_dS)N)Ú threadingZLockÚ_lockÚacquireÚrelease)rNrrrruOs  zForkAwareThreadLock._resetcCs |jjƒS)N)rwÚ __enter__)rNrrrrzTszForkAwareThreadLock.__enter__cGs |jj|ŽS)N)rwÚ__exit__)rNrrrrr{WszForkAwareThreadLock.__exit__N)rXrarbrQrurzr{rrrrrJsc@seZdZdd„Zdd„ZdS)rcCst|dd„ƒdS)NcSs |jjƒS)N)Ú__dict__rm)r<rrrrd]sz)ForkAwareLocal.__init__..)r )rNrrrrQ\szForkAwareLocal.__init__cCs t|ƒffS)N)Útype)rNrrrÚ __reduce__^szForkAwareLocal.__reduce__N)rXrarbrQr~rrrrr[sÚ SC_OPEN_MAXécCsRt|ƒdtg}|jƒx4tt|ƒdƒD] }tj||d||dƒq*WdS)Nréÿÿÿÿ)r5ÚMAXFDr8ÚrangeÚlenrJÚ closerange)ZfdsÚirrrrjscCs”tjdkrdSytjjƒWnttfk r4YnXy@tjtjtjƒ}yt|dd�t_Wntj|ƒ‚YnXWnttfk rŽYnXdS)NF)Úclosefd) ÚsysÚstdinÚcloseÚOSErrorÚ ValueErrorrJÚopenÚdevnullÚO_RDONLY)ÚfdrrrÚ _close_stdints   r‘cCsTytjjƒWnttfk r&YnXytjjƒWnttfk rNYnXdS)N)rˆÚstdoutÚflushrZrŒÚstderrrrrrÚ_flush_std_streams‹sr•cCstddl}tttt|ƒƒƒ}tjƒ\}}z2|j|tj|ƒgd|ddddddd d ||dddƒStj |ƒtj |ƒXdS) NrTrFr�r�r�r�r�r�) Ú_posixsubprocessÚtupleÚsortedÚmapÚintrJÚpipeZ fork_execÚfsencoderŠ)ÚpathrZpassfdsr–Z errpipe_readZ errpipe_writerrrÚspawnv_passfds™s   rž)N)N)6rJÚ itertoolsrˆrBr$rvÚ subprocessrÚrÚ__all__ZNOTSETrrrrr"r)rr*rrrrr r r ÚWeakValueDictionaryr6Úcountr@r>r rMrHÚobjectrrpr rqrtr1r%r&rZlocalrÚsysconfr‚r9rr‘r•ržrrrrÚ sf      S ,(