a
    xd+                     @   sZ  d dl mZ 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lmZmZ zeje ZW n ey   dZY n0 g dZdd	 Zd
d Zdd Zdd ZefddZG dd deZG dd deZG dd deZe a e!da"e# a$[eZ%i Z&eej'D ]0\Z(Z)e(dd dkrde(vre(e&e) < qe	 Z*dS )    )absolute_importN)WeakSetprocess   )itemsstring_t)BaseProcessProcesscurrent_processactive_childrenc                   C   s   t S )z@
    Return process object representing the current process
    )_current_process r   r   H/var/www/html/Ranjet/env/lib/python3.9/site-packages/billiard/process.pyr   '   s    r   c                 C   s   |  a t_ d S N)r   _mprocr   r   r   r   _set_current_process.   s    r   c                  C   s*   t tD ]} | j d urt|  qd S r   )list	_children_popenpolldiscard)pr   r   r   _cleanup3   s    r   c              
   C   s*   z|    W n tttfy$   Y n0 d S r   )flushAttributeErrorEnvironmentErrorNotImplementedError)fr   r   r   _maybe_flush:   s    r   c                 C   s*   z
|   W n t y    g  Y S 0 ttS )zN
    Return list of process objects corresponding to live child processes
    )	TypeErrorr   r   )r   r   r   r   r   A   s
    

r   c                   @   s2  e Zd ZdZdd Zddddi dfddZdd	 Zd
d Zdd Zdd Z	dd Z
d5ddZdd Zdd Zedd Zejdd Zedd Zejdd Zedd Zejd d Zed!d" Zed#d$ ZeZed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zd1d2 Zd3d4 ZdS )6r	   z
    Process objects represent activity that is run in a separate process

    The class is analagous to `threading.Thread`
    c                 C   s
   t  d S r   )r   selfr   r   r   _PopenT   s    zBaseProcess._PopenNr   c           	      K   s   |d u sJ dt t}tj|f | _tj | _t | _d | _	|| _
t|| _t|| _|pt| jd ddd | jD  | _|d ur|| _td urt|  d| _d S )Nz#group argument must be None for now-:c                 s   s   | ]}t |V  qd S r   )str).0ir   r   r   	<genexpr>d       z'BaseProcess.__init__.<locals>.<genexpr>F)next_process_counterr   	_identity_configcopyosgetpid_parent_pidr   _targettuple_argsdict_kwargstype__name__join_namedaemon	_danglingadd_controlled_termination)	r"   grouptargetnameargskwargsr<   Z_kwcountr   r   r   __init__W   s$    



zBaseProcess.__init__c                 C   s   | j r| j | ji | j dS )zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r3   r5   r7   r!   r   r   r   runm   s    zBaseProcess.runc                 C   sR   | j du sJ d| jt ks(J dt  | | | _ | j j| _t	|  dS )z%
        Start child process
        Nzcannot start a process twicez:can only start a process object created by current process)
r   r2   r0   r1   r   r#   sentinel	_sentinelr   r>   r!   r   r   r   startt   s    
zBaseProcess.startc                 C   s   | j d ur| j   d S r   )r   closer!   r   r   r   rK      s    
zBaseProcess.closec                 C   s   | j   dS )zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)r   	terminater!   r   r   r   rL      s    zBaseProcess.terminatec                 C   s   d| _ |   d S )NT)r?   rL   r!   r   r   r   terminate_controlled   s    z BaseProcess.terminate_controlledc                 C   sR   | j t ksJ d| jdus(J d| j|}|durFt|  |   dS )z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)r2   r0   r1   r   waitr   r   rK   )r"   timeoutresr   r   r   r:      s    
zBaseProcess.joinc                 C   sF   | t u rdS | jt ks"J d| jdu r0dS | j  | jjdu S )z1
        Return whether process is alive
        Tzcan only test a child processNF)r   r2   r0   r1   r   r   
returncoder!   r   r   r   is_alive   s    

zBaseProcess.is_alivec                 C   s   | j d u rdS | j  d u S )NFr   r   r!   r   r   r   	_is_alive   s    
zBaseProcess._is_alivec                 C   s   | j S r   )r;   r!   r   r   r   rB      s    zBaseProcess.namec                 C   s   t |tsJ d|| _d S )Nzname must be a string)
isinstancer   r;   )r"   rB   r   r   r   rB      s    c                 C   s   | j ddS )z4
        Return whether process is a daemon
        r<   Fr.   getr!   r   r   r   r<      s    zBaseProcess.daemonc                 C   s    | j du sJ d|| jd< dS )z1
        Set whether process is a daemon
        Nzprocess has already startedr<   )r   r.   )r"   daemonicr   r   r   r<      s    c                 C   s
   | j d S )Nauthkey)r.   r!   r   r   r   rY      s    zBaseProcess.authkeyc                 C   s   t || jd< dS )z2
        Set authorization key of process
        rY   N)AuthenticationStringr.   )r"   rY   r   r   r   rY      s    c                 C   s   | j du r| j S | j  S )zM
        Return exit code of process or `None` if it has yet to stop
        NrS   r!   r   r   r   exitcode   s    
zBaseProcess.exitcodec                 C   s"   | t u rt S | jo| jjS dS )zU
        Return identifier (PID) of process or `None` if it has yet to start
        N)r   r0   r1   r   pidr!   r   r   r   ident   s    zBaseProcess.identc                 C   s(   z| j W S  ty"   tdY n0 dS )z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not startedN)rI   r   
ValueErrorr!   r   r   r   rH      s    zBaseProcess.sentinelc                 C   s   t S r   )r,   r!   r   r   r   _counter   s    zBaseProcess._counterc                 C   s   t S r   )r   r!   r   r   r   r      s    zBaseProcess._childrenc                 C   s   | j S r   )rY   r!   r   r   r   _authkey   s    zBaseProcess._authkeyc                 C   s   | j S r   )r<   r!   r   r   r   	_daemonic   s    zBaseProcess._daemonicc                 C   s   | j dS )NtempdirrV   r!   r   r   r   _tempdir  s    zBaseProcess._tempdirc                 C   s   | t u rd}n>| jt kr"d}n*| jd u r2d}n| j d urH| j}nd}t|tu rv|dkrfd}ndt	
|| }dt| j| j|| jrdpd	f S )
Nstartedunknowninitialr   stoppedzstopped[%s]z<%s(%s, %s%s)>z daemon )r   r2   r0   r1   r   r   r[   r8   int_exitcode_to_namerW   r9   r;   r<   )r"   statusr   r   r   __repr__  s     
zBaseProcess.__repr__c                 C   sd  ddl m}m} z&z&| jd ur.|| j tdat a	t
jd ur|zt
j  ttjt
_W n tttfyz   Y n0 t}t|  tjjj}t| }|d  |D ]2}|rt|| tjst|jD ]}|   qqt!" t_#z|j$%  |&  W ~n~0 |'d| j( z| )  d}W |*  n
|*  0 W n t+y }	 zv|	j,s\d}n\t|	j,d t-rz|	j,d }n>t
j./t0|	j,d d  t1t
j. t|	j,d t0rdnd}W Y d }	~	nNd }	~	0    d}|j2d| j3ddsdd l4}
t
j./d	| j3  |
5  Y n0 W |'d
| j(| t1t
j6 t1t
j. n&|'d
| j(| t1t
j6 t1t
j. 0 |S )Nr   )utilcontextz#child process %s calling self.run()r   
z
Process %sT)exc_infozProcess %s:
z#process %s exiting with exitcode %d)7rh   rm   rn   Z_start_methodZ_force_start_method	itertoolsrE   r,   setr   sysstdinrK   openr0   devnullr   OSErrorr^   r   r   loggingLoggermanager
loggerDictr   keysappendrU   PlaceHolder	getLoggerhandlers
createLock	threadingRLock_lockZ_finalizer_registryclearZ_run_after_forkersinfor\   rG   Z_exit_function
SystemExitrC   ri   stderrwriter&   r   errorrB   	traceback	print_excstdout)r"   rm   rn   Zold_processr{   Zlogger_namesrB   handlerr[   excr   r   r   r   
_bootstrap  st    









.

zBaseProcess._bootstrap)N)r9   
__module____qualname____doc__r#   rF   rG   rJ   rK   rL   rM   r:   rR   rT   propertyrB   setterr<   rY   r[   r]   r\   rH   r_   r   r`   ra   rc   rl   r   r   r   r   r   r	   M   sX   









	






r	   c                   @   s   e Zd Zdd ZdS )rZ   c                 C   s,   ddl m} | d u rtdtt| ffS )Nr   )get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rn   r   r    rZ   bytes)r"   r   r   r   r   
__reduce__i  s    
zAuthenticationString.__reduce__N)r9   r   r   r   r   r   r   r   rZ   g  s   rZ   c                   @   s   e Zd Zdd ZdS )_MainProcessc                 C   s2   d| _ d| _d | _d | _ttddd| _d S )Nr   MainProcess    z/mp)rY   Z	semprefix)r-   r;   r2   r   rZ   r0   urandomr.   r!   r   r   r   rF   y  s    z_MainProcess.__init__N)r9   r   r   rF   r   r   r   r   r   w  s   r      ZSIG_)+
__future__r   r0   rs   signalrq   rx   r   _weakrefsetr   multiprocessingr   r   Zfiver   r   pathabspathgetcwdZORIGINAL_DIRrw   __all__r   r   r   r   r   objectr	   r   rZ   r   r   rE   r,   rr   r   r
   rj   __dict__rB   signumr=   r   r   r   r   <module>	   sD   
  

