o
    €¨Êhs  ã                   @   sV  d dl Z d dlZd dlZd dlZzd dlZW n ey#   d dlZY nw zd dlmZ W n ey9   dd„ ZY nw 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 g d¢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-d)d!d"„Z.d#d$„ Z/d%d&„ Z0d'd(„ Z1dS )*é    N)Ú_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_randomizationÚpy3k_warningr   ú-z-W)ÚitemsÚgetattrÚsysÚflagsÚappendÚwarnoptions)Úflag_opt_mapÚargsÚflagÚoptr	   © r"   ú?/var/www/html/env/lib/python3.10/site-packages/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   ó&   t rt jt| g|¢R i |¤Ž d S d S ©N)Ú_loggerÚlogr8   ©Úmsgr   Úkwargsr"   r"   r#   r3   `   ó   ÿr3   c                 O   rB   rC   )rD   rE   ÚDEBUGrF   r"   r"   r#   r   e   rI   r   c                 O   rB   rC   )rD   rE   ÚINFOrF   r"   r"   r#   r4   j   rI   r4   c                 O   rB   rC   )rD   rE   r9   rF   r"   r"   r#   r5   o   rI   r5   c                 O   rB   rC   )rD   rE   ÚWARNINGrF   r"   r"   r#   Úwarnings   rI   rM   c                 O   rB   rC   )rD   rE   ÚERRORrF   r"   r"   r#   Úerrorw   rI   rO   c                  C   sà   ddl } z	| j| j}}W n ty   | j| j}}Y nw |ƒ  zJts`|  t¡adt_	|  
td¡ |  
td¡ ttdƒrHt t¡ t t¡ ntj tdi f¡ tj tdi f¡ W |ƒ  tS W |ƒ  tS W |ƒ  tS |ƒ  w )z0
    Returns logger used by multiprocessing
    r   Nr8   r9   Ú
unregisterr"   )ÚloggingÚ_prepareForkÚ
_afterForkÚAttributeErrorÚ_acquireLockÚ_releaseLockrD   Ú	getLoggerÚLOGGER_NAMEÚ	propagateÚaddLevelNamer8   r9   ÚhasattrÚatexitrP   r&   ÚregisterÚ_exithandlersÚremover   )rQ   ÚacquireÚreleaser"   r"   r#   r6   |   s6   ÿ


ïùþr6   c                 C   sJ   ddl }tƒ }| t¡}| ¡ }| |¡ | |¡ | r!| | ¡ dat	S )zB
    Turn on logging and add a handler which prints to stderr
    r   NT)
rQ   r6   Ú	FormatterÚDEFAULT_LOGGING_FORMATÚStreamHandlerÚsetFormatterÚ
addHandlerÚsetLevelÚ_log_to_stderrrD   )ÚlevelrQ   ÚloggerÚ	formatterÚhandlerr"   r"   r#   r7   ž   s   



r7   c                  C   sœ   t j d¡s	tƒ ‚z:dt jv r-t ¡ } |  d¡ |  d¡}|  	d¡}| 
t|¡ |d W S t ¡ }tj d¡}| 
tt |¡¡ |jW S  tyM   tƒ ‚w )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Úmodulesrn   Ú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dƒ‚z2dt jv r+t ¡ }| d¡ | d¡}| 	t
| d| ¡¡ W dS tj d¡}| 	t
t | ¡¡ W dS  tyM } ztdƒ|‚d}~ww )	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.
    rm   z$pdeathsig is only supported on linuxrn   ro   NÚintrp   z(An error occured while setting pdeathsig)r   rq   rr   rs   rt   rn   ru   rv   rx   ry   ÚPR_SET_PDEATHSIGÚcastr{   r}   r~   r|   r�   )r…   r‚   r„   r†   Úer"   r"   r#   Úset_pdeathsigÉ   s   



€ÿrŒ   c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z&
    Automatic retry after EINTR.
    c               
      sJ   	 zˆ | i |¤ŽW S  t y# } zt|ƒtjkr‚ W Y d }~nd }~ww qrC   )rs   r2   ÚerrnoÚEINTR)r   rH   Úexc©Úfuncr"   r#   Úwrappedå   s   ÿ€ÿýz_eintr_retry.<locals>.wrapped)Ú	functoolsÚwraps)r‘   r’   r"   r�   r#   Ú_eintr_retryà   s   r•   rC   )2r   r�   r“   r\   rn   ÚImportErrorr{   Ú
subprocessr   Úmultiprocessing.utilr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Úcompatr2   Ú__all__rz   r‰   ÚNOTSETr8   rJ   rK   r9   rL   rN   rX   rc   rD   rh   r3   r   r4   r5   rM   rO   r6   r7   r‡   rŒ   r•   r"   r"   r"   r#   Ú<module>   sR   	ÿÿ<	
"