509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \n.  ã               @   s¬  d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ ddlm	Z	 ddddd	d
dddddddddgZ
d ZdZdZdZdZdZdZdadadd„ Zdd„ Zdd„ Zdd„ Zdd	„ Zd6d d
„Zd!d„ Zejƒ Zejƒ Zd"d#„ Zd$d„ Z i Z!ejƒ Z"G d%d„ de#ƒZ$d7d&d'„Z%d(d„ Z&da'eee%e	j(e	j)fd)d*„Z*ej+e*ƒ G d+d„ de#ƒZ,G d,d„ dej-ƒZ.ye j/d-ƒZ0W n e1k
�r†   d.Z0Y nX d/d„ Z2d0d1„ Z3d2d3„ Z4d4d5„ Z5dS )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é   é
   é   é   Zmultiprocessingz+[%(levelname)s/%(processName)s] %(message)sFc             G   s   t rt jt| f|žŽ  d S )N)Ú_loggerÚlogr   )ÚmsgÚargs© r   ú,/usr/lib64/python3.6/multiprocessing/util.pyr   ,   s    c             G   s   t rt jt| f|žŽ  d S )N)r   r   ÚDEBUG)r   r   r   r   r   r   0   s    c             G   s   t rt jt| f|žŽ  d S )N)r   r   ÚINFO)r   r   r   r   r   r   4   s    c             G   s   t rt jt| f|žŽ  d S )N)r   r   r   )r   r   r   r   r   r   8   s    c           
   C   s|   ddl } | jƒ  z\tsj| jtƒadt_ttdƒrFtjt	ƒ tj
t	ƒ n$tjjt	f i fƒ tjjt	f i fƒ W d| jƒ  X tS )z0
    Returns logger used by multiprocessing
    r   NÚ
unregister)ÚloggingZ_acquireLockr   Z	getLoggerÚLOGGER_NAMEZ	propagateÚhasattrÚatexitr    Ú_exit_functionÚregisterZ_exithandlersÚremoveÚappendZ_releaseLock)r!   r   r   r   r	   <   s    



c             C   sJ   ddl }tƒ }|jtƒ}|jƒ }|j|ƒ |j|ƒ | rB|j| ƒ dat	S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
r!   r	   Z	FormatterÚDEFAULT_LOGGING_FORMATZStreamHandlerZsetFormatterZ
addHandlerZsetLevelÚ_log_to_stderrr   )Úlevelr!   ZloggerZ	formatterZhandlerr   r   r   r
   W   s    



c              C   sd   t jƒ jjdƒ} | d kr`dd l}dd l}|jdd�} td| ƒ td |j	| gdd� | t jƒ jd< | S )	NÚtempdirr   zpymp-)Úprefixzcreated temp directory %séd   )r   Úexitpriorityiœÿÿÿ)
r   Úcurrent_processZ_configÚgetÚshutilÚtempfileZmkdtempr   r   Zrmtree)r,   r2   r3   r   r   r   r   m   s    
c              C   sj   t tjƒ ƒ} | jƒ  xP| D ]H\\}}}}y||ƒ W q tk
r` } ztd|ƒ W Y d d }~X qX qW d S )Nz after forker raised exception %s)ÚlistÚ_afterfork_registryÚitemsÚsortÚ	Exceptionr   )r6   ÚindexZidentÚfuncÚobjÚer   r   r   Ú_run_after_forkers   s    r=   c             C   s   | t ttƒt| ƒ|f< d S )N)r5   ÚnextÚ_afterfork_counterÚid)r;   r:   r   r   r   r   ˆ   s    c               @   sL   e Zd ZdZf ddfdd„Zdeeejfdd„Z	dd„ Z
d	d
„ Zdd„ ZdS )r   zA
    Class which supports object finalization using weakrefs
    Nc             C   sx   |d kst |ƒtkst‚|d k	r0tj|| ƒ| _n|d k	s<t‚|| _|| _|pNi | _|t	t
ƒf| _tjƒ | _| t| j< d S )N)ÚtypeÚintÚAssertionErrorÚweakrefÚrefÚ_weakrefÚ	_callbackÚ_argsÚ_kwargsr>   Ú_finalizer_counterÚ_keyÚosÚgetpidÚ_pidÚ_finalizer_registry)Úselfr;   Úcallbackr   Úkwargsr/   r   r   r   Ú__init__—   s    

zFinalize.__init__c             C   sŽ   y|| j = W n tk
r(   |dƒ Y nbX | j|ƒ krD|dƒ d}n$|d| j| j| jƒ | j| j| jŽ}d | _ | _ | _ | _| _ |S dS )zQ
        Run the callback unless it has already been called or cancelled
        zfinalizer no longer registeredz+finalizer ignored because different processNz/finalizer calling %s with args %s and kwargs %s)rK   ÚKeyErrorrN   rG   rH   rI   rF   )rP   ÚwrrO   r   rM   Úresr   r   r   Ú__call__§   s    zFinalize.__call__c             C   sD   yt | j= W n tk
r    Y n X d | _ | _ | _ | _| _dS )z3
        Cancel finalization of the object
        N)rO   rK   rT   rF   rG   rH   rI   )rP   r   r   r   Úcancel¿   s
    zFinalize.cancelc             C   s
   | j tkS )zS
        Return whether this finalizer is still waiting to invoke callback
        )rK   rO   )rP   r   r   r   Ústill_activeË   s    zFinalize.still_activec             C   s¶   y| j ƒ }W n ttfk
r(   d }Y nX |d kr>d| jj S d| jjt| jd| jƒf }| jrr|dt| jƒ 7 }| j	rŠ|dt| j	ƒ 7 }| j
d d k	r®|dt| j
d ƒ 7 }|d S )	Nz<%s object, dead>z<%s object, callback=%sÚ__name__z, args=z	, kwargs=r   z, exitprority=ú>)rF   ÚAttributeErrorÚ	TypeErrorÚ	__class__rZ   ÚgetattrrG   rH   ÚstrrI   rK   )rP   r;   Úxr   r   r   Ú__repr__Ñ   s     
zFinalize.__repr__)rZ   Ú
__module__Ú__qualname__Ú__doc__rS   rO   r   rL   rM   rW   rX   rY   rb   r   r   r   r   r   “   s   c                sº   t dkrdS ˆdkrdd„ ‰ n‡fdd„‰ ‡ fdd„tt ƒD ƒ}|jdd� xX|D ]P}t j|ƒ}|dk	rRtd	|ƒ y
|ƒ  W qR tk
r    d
dl}|jƒ  Y qRX qRW ˆdkr¶t jƒ  dS )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             S   s   | d d k	S )Nr   r   )Úpr   r   r   Ú<lambda>ô   s    z!_run_finalizers.<locals>.<lambda>c                s   | d d k	o| d ˆ kS )Nr   r   )rf   )Úminpriorityr   r   rg   ö   s    c                s   g | ]}ˆ |ƒr|‘qS r   r   )Ú.0Úkey)Úfr   r   ú
<listcomp>ý   s    z#_run_finalizers.<locals>.<listcomp>T)Úreversez
calling %sr   )	rO   r4   r7   r1   r   r8   Ú	tracebackÚ	print_excÚclear)rh   Úkeysrj   Ú	finalizerrn   r   )rk   rh   r   Ú_run_finalizersæ   s$    




rs   c               C   s   t p
t dkS )z6
    Returns true if the process is shutting down
    N)Ú_exitingr   r   r   r   r     s    c             C   sŒ   t sˆda | dƒ |dƒ |dƒ |ƒ d k	rzx*|ƒ D ] }|jr2| d|jƒ |jjƒ  q2W x"|ƒ D ]}| d|jƒ |jƒ  q^W |dƒ |ƒ  d S )NTzprocess shutting downz2running all "atexit" finalizers with priority >= 0r   z!calling terminate() for daemon %szcalling join() for process %sz)running the remaining "atexit" finalizers)rt   ZdaemonÚnameZ_popenZ	terminateÚjoin)r   r   rs   Úactive_childrenr0   rf   r   r   r   r%     s    	
r%   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
r   c             C   s   | j ƒ  t| tj ƒ d S )N)Ú_resetr   r   )rP   r   r   r   rS   K  s    zForkAwareThreadLock.__init__c             C   s"   t jƒ | _| jj| _| jj| _d S )N)Ú	threadingZLockÚ_lockÚacquireÚrelease)rP   r   r   r   rx   O  s    

zForkAwareThreadLock._resetc             C   s
   | j jƒ S )N)rz   Ú	__enter__)rP   r   r   r   r}   T  s    zForkAwareThreadLock.__enter__c             G   s   | j j|Ž S )N)rz   Ú__exit__)rP   r   r   r   r   r~   W  s    zForkAwareThreadLock.__exit__N)rZ   rc   rd   rS   rx   r}   r~   r   r   r   r   r   J  s   c               @   s   e Zd Zdd„ Zdd„ ZdS )r   c             C   s   t | dd„ ƒ d S )Nc             S   s
   | j jƒ S )N)Ú__dict__rp   )r;   r   r   r   rg   ]  s    z)ForkAwareLocal.__init__.<locals>.<lambda>)r   )rP   r   r   r   rS   \  s    zForkAwareLocal.__init__c             C   s   t | ƒf fS )N)rA   )rP   r   r   r   Ú
__reduce__^  s    zForkAwareLocal.__reduce__N)rZ   rc   rd   rS   r€   r   r   r   r   r   [  s   ÚSC_OPEN_MAXé   c             C   sf   t | ƒdtg } | jƒ  | d tks,tdƒ‚x4tt| ƒd ƒD ] }tj| | d | |d  ƒ q>W d S )Nr   zfd too largeéÿÿÿÿrƒ   )r4   ÚMAXFDr7   rC   ÚrangeÚlenrL   Ú
closerange)ZfdsÚir   r   r   r   j  s
    c              C   s”   t jd krd S yt jjƒ  W n ttfk
r4   Y nX y@tjtjtjƒ} yt| dd�t _W n   tj| ƒ ‚ Y nX W n ttfk
rŽ   Y nX d S )NF)Úclosefd)	ÚsysÚstdinÚcloseÚOSErrorÚ
ValueErrorrL   ÚopenÚdevnullÚO_RDONLY)Úfdr   r   r   Ú_close_stdint  s    

r“   c               C   sT   yt jjƒ  W n ttfk
r&   Y nX yt jjƒ  W n ttfk
rN   Y nX d S )N)rŠ   ÚstdoutÚflushr\   rŽ   Ústderrr   r   r   r   Ú_flush_std_streams‹  s    r—   c             C   st   dd l }tttt|ƒƒƒ}tjƒ \}}z2|j|tj| ƒgd|d d ddddd	d
||ddd ƒS tj	|ƒ tj	|ƒ X d S )Nr   Tr   Frƒ   rƒ   rƒ   rƒ   rƒ   rƒ   )
Ú_posixsubprocessÚtupleÚsortedÚmaprB   rL   ÚpipeZ	fork_execÚfsencoderŒ   )Úpathr   Zpassfdsr˜   Zerrpipe_readZerrpipe_writer   r   r   Úspawnv_passfds™  s    

rŸ   )N)N)6rL   Ú	itertoolsrŠ   rD   r$   ry   Ú
subprocessr   Ú r   Ú__all__ZNOTSETr   r   r   r   r"   r)   r   r*   r   r   r   r   r	   r
   r   ÚWeakValueDictionaryr5   Úcountr?   r=   r   rO   rJ   Úobjectr   rs   r   rt   rw   r0   r%   r&   r   Zlocalr   Úsysconfr„   r8   r   r“   r—   rŸ   r   r   r   r   Ú<module>
   sf   


	S
,(



