U
    d                     @   s~  d dl mZ d dlZd dlZd dlZd dlZzd dlZW n ek
rT   d dlZY nX zd dl	m
Z
 W n ek
r   dd Z
Y nX d dlmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ 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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-d'd( Z.d)d Z/d1d*dZ0d+d, Z1d-d. Z2d/d0 Z3dS )2    )absolute_importN)_args_from_interpreter_flagsc                  C   st   ddddddddd	d
d
} g }|   D ].\}}ttj|}|dkr&|d||   q&tjD ]}|d|  q\|S )zrReturn a list of command-line arguments reproducing the current
        settings in sys.flags and sys.warnoptions.dOBsSEvbR3)
debugoptimizedont_write_bytecodeno_user_siteno_siteignore_environmentverbosebytes_warninghash_randomizationZpy3k_warningr   -z-W)itemsgetattrsysflagsappendwarnoptions)flag_opt_mapargsflagoptr
    r"   1/tmp/pip-unpacked-wheel-lulkwrw3/billiard/util.pyr      s&    
r   )_afterfork_registry_afterfork_counter_exit_function_finalizer_registry_finalizer_counterFinalizeForkAwareLocalForkAwareThreadLockget_temp_dir
is_exitingregister_after_fork_run_after_forkers_run_finalizers   )	get_errno	sub_debugr   infosub_warning
get_loggerlog_to_stderrr,   r.   r-   r)   r+   r*   SUBDEBUG
SUBWARNING      
            (   multiprocessingz+[%(levelname)s/%(processName)s] %(message)sFc                 O   s   t rt jt| f|| d S N)_loggerlogr8   msgr   kwargsr"   r"   r#   r3   a   s    c                 O   s   t rt jt| f|| d S rB   )rC   rD   DEBUGrE   r"   r"   r#   r   f   s    c                 O   s   t rt jt| f|| d S rB   )rC   rD   INFOrE   r"   r"   r#   r4   k   s    c                 O   s   t rt jt| f|| d S rB   )rC   rD   r9   rE   r"   r"   r#   r5   p   s    c                 O   s   t rt jt| f|| d S rB   )rC   rD   WARNINGrE   r"   r"   r#   warningt   s    rK   c                 O   s   t rt jt| f|| d S rB   )rC   rD   ERRORrE   r"   r"   r#   errorx   s    rM   c                  C   s   ddl } |   ztts| tadt_| td | t	d t
tdr^tt tt n$tjtdi f tjtdi f W 5 |   X tS )z0
    Returns logger used by multiprocessing
    r   Nr8   r9   
unregisterr"   )logging_acquireLock_releaseLockrC   	getLoggerLOGGER_NAME	propagateaddLevelNamer8   r9   hasattratexitrN   r&   registerZ_exithandlersremover   )rO   r"   r"   r#   r6   }   s    



c                 C   sJ   ddl }t }|t}| }|| || | rB||  dat	S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
rO   r6   	FormatterDEFAULT_LOGGING_FORMATStreamHandlersetFormatter
addHandlersetLevel_log_to_stderrrC   )levelrO   logger	formatterhandlerr"   r"   r#   r7      s    



c                  C   s   t jdst zxdt jkrZt } | d | d}| 	d}|
t| |d W S t }tjd}|
tt| |jW S W n tk
r   t Y nX dS )zE
    Return the current value of the parent process death signal
    linuxcffiint prctl (int __option, ...);zint *Nr   	libc.so.6)r   platform
startswithOSErrormodulesrf   FFIcdefnewdlopenprctlPR_GET_PDEATHSIGctypesc_intcdllLoadLibrarybyrefvalue	Exception)ffiargCsiglibcr"   r"   r#   get_pdeathsig   s     




r   c                 C   s   t jdst zXdt jkrPt }|d |d}|	t
|d|  ntjd}|	t
|  W n tk
r   t Y nX dS )am  
    Set the parent process death signal of the calling process to sig
    (either a signal value in the range 1..maxsig, or 0 to clear).
    This is the signal that the calling process will get when its parent dies.
    This value is cleared for the child of a fork(2) and
    (since Linux 2.4.36 / 2.6.23) when executing a set-user-ID or set-group-ID binary.
    re   rf   rg   Nintrh   )r   ri   rj   rk   rl   rf   rm   rn   rp   rq   PR_SET_PDEATHSIGcastrs   ru   rv   ry   )r}   rz   r|   r~   r"   r"   r#   set_pdeathsig   s    


r   c                    s   t   fdd}|S )z&
    Automatic retry after EINTR.
    c               
      sF   z | |W S  t k
r> } zt|tjkr. W 5 d }~X Y q X q d S rB   )rk   r2   errnoZEINTR)r   rG   excfuncr"   r#   wrapped   s
    z_eintr_retry.<locals>.wrapped)	functoolswraps)r   r   r"   r   r#   _eintr_retry   s    r   )N)4
__future__r   r   r   r   rW   rf   ImportErrorrs   
subprocessr   Zmultiprocessing.utilr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   compatr2   __all__rr   r   NOTSETr8   rH   rI   r9   rJ   rL   rS   r[   rC   r`   r3   r   r4   r5   rK   rM   r6   r7   r   r   r   r"   r"   r"   r#   <module>	   sj   <          	
