<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

Yf#                 @   sv  d  d d g Z  d d l Z d d l Z d d l Z d d l Z d d l m Z y e j j e j	    Z
 Wn e k
 r d Z
 Yn Xd d   Z d d   Z d d	   Z Gd
 d    d  e  Z Gd d   d e  Z Gd d   d e  Z e   a e j d  a e   a [ i  Z xP e e j j    D]9 \ Z Z e d d  d k r,d e k r,e e e <q,We   Z d S)BaseProcesscurrent_processactive_children    N)WeakSetc               C   s   t  S)z@
    Return process object representing the current process
    )_current_process r   r   </opt/alt/python35/lib64/python3.5/multiprocessing/process.pyr   #   s    c               C   s   t    t t  S)zN
    Return list of process objects corresponding to live child processes
    )_cleanuplist	_childrenr   r   r   r   r   )   s    c              C   s=   x6 t  t  D]( }  |  j j   d  k	 r t j |   q Wd  S)N)r
   r   _popenpolldiscard)pr   r   r   r	   4   s    r	   c            	   @   sK  e  Z d  Z d Z d d   Z d d d f  i  d d d d Z d d	   Z d
 d   Z d d   Z d 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 d! d"   Z d# d$   Z d S)%r   z
    Process objects represent activity that is run in a separate process

    The class is analogous to `threading.Thread`
    c             C   s
   t   d  S)N)NotImplementedError)selfr   r   r   _PopenD   s    zBaseProcess._PopenNdaemonc            C   s   | d  k s t  d   t t  } t j | f |  _ t j j   |  _ t j   |  _	 d  |  _
 | |  _ t |  |  _ t |  |  _ | p t |   j d d j d d   |  j D  |  _ | d  k	 r | |  _ t j |   d  S)Nz#group argument must be None for now-:c             s   s   |  ] } t  |  Vq d  S)N)str).0ir   r   r   	<genexpr>S   s    z'BaseProcess.__init__.<locals>.<genexpr>)AssertionErrornext_process_counterr   	_identity_configcopyosgetpid_parent_pidr   _targettuple_argsdict_kwargstype__name__join_namer   	_danglingadd)r   grouptargetnameargskwargsr   countr   r   r   __init__G   s    		#	zBaseProcess.__init__c             C   s#   |  j  r |  j  |  j |  j   d S)zQ
        Method to be run in sub-process; can be overridden in sub-class
        N)r#   r%   r'   )r   r   r   r   runX   s    	zBaseProcess.runc             C   s   |  j  d k s t d   |  j t j   k s< t d   t j j d  s[ t d   t   |  j	 |   |  _  |  j  j
 |  _ |  ` |  ` |  ` t j |   d S)z%
        Start child process
        Nzcannot start a process twicez:can only start a process object created by current processr   z3daemonic processes are not allowed to have children)r   r   r"   r    r!   r   r   getr	   r   sentinel	_sentinelr#   r%   r'   r   r-   )r   r   r   r   start_   s    		zBaseProcess.startc             C   s   |  j  j   d S)zT
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N)r   	terminate)r   r   r   r   r:   p   s    zBaseProcess.terminatec             C   sk   |  j  t j   k s! t d   |  j d k	 s< t d   |  j j |  } | d k	 rg t j |   d S)z5
        Wait until child process terminates
        zcan only join a child processNzcan only join a started process)r"   r    r!   r   r   waitr   r   )r   Ztimeoutresr   r   r   r*   v   s
    !zBaseProcess.joinc             C   sa   |  t  k r d S|  j t j   k s1 t d   |  j d k rD d S|  j j   |  j j d k S)z1
        Return whether process is alive
        Tzcan only test a child processNF)r   r"   r    r!   r   r   r   
returncode)r   r   r   r   is_alive   s    !zBaseProcess.is_alivec             C   s   |  j  S)N)r+   )r   r   r   r   r0      s    zBaseProcess.namec             C   s(   t  | t  s t d   | |  _ d  S)Nzname must be a string)
isinstancer   r   r+   )r   r0   r   r   r   r0      s    c             C   s   |  j  j d d  S)z4
        Return whether process is a daemon
        r   F)r   r6   )r   r   r   r   r      s    zBaseProcess.daemonc             C   s,   |  j  d k s t d   | |  j d <d S)z1
        Set whether process is a daemon
        Nzprocess has already startedr   )r   r   r   )r   Zdaemonicr   r   r   r      s    c             C   s   |  j  d S)Nauthkey)r   )r   r   r   r   r@      s    zBaseProcess.authkeyc             C   s   t  |  |  j d <d S)z2
        Set authorization key of process
        r@   N)AuthenticationStringr   )r   r@   r   r   r   r@      s    c             C   s#   |  j  d k r |  j  S|  j  j   S)zM
        Return exit code of process or `None` if it has yet to stop
        N)r   r   )r   r   r   r   exitcode   s    zBaseProcess.exitcodec             C   s-   |  t  k r t j   S|  j o( |  j j Sd S)zU
        Return identifier (PID) of process or `None` if it has yet to start
        N)r   r    r!   r   pid)r   r   r   r   ident   s    
zBaseProcess.identc             C   s0   y |  j  SWn t k
 r+ t d   Yn Xd S)z{
        Return a file descriptor (Unix) or handle (Windows) suitable for
        waiting for process termination.
        zprocess not startedN)r8   AttributeError
ValueError)r   r   r   r   r7      s    zBaseProcess.sentinelc             C   s   |  t  k r d } n] |  j t j   k r3 d } n? |  j d  k rK d } n' |  j j   d  k	 rl |  j } n d } t |  t k r | d k r d } n d t	 j
 | |  } d t |   j |  j | |  j r d p d	 f S)
NZstartedunknowninitialr   Zstoppedzstopped[%s]z<%s(%s, %s%s)>z daemon )r   r"   r    r!   r   r   rB   r(   int_exitcode_to_namer6   r)   r+   r   )r   Zstatusr   r   r   __repr__   s    				zBaseProcess.__repr__c              C   s  d d l  m } m } zgy |  j d  k	 r; | j |  j  t j d  a t   a	 | j
   t } |  a z | j j   | j   Wd  ~ X| j d  z |  j   d } Wd  | j   XWn t k
 rA} zd | j s d } nM t | j d t  r| j d } n' t j j t | j d  d  d } WYd  d  } ~ Xn; d } d d  l } t j j d |  j  | j   Yn XWd  | j d |  t j j   t j j   X| S)N   )utilcontextz child process calling self.run()r   
zProcess %s:
z process exiting with exitcode %d)rI   rN   rO   Z_start_methodZ_force_start_method	itertoolsr3   r   setr   Z_close_stdinr   Z_finalizer_registryclearZ_run_after_forkersinfor5   Z_exit_function
SystemExitr1   r?   rJ   sysstderrwriter   	tracebackr0   	print_excstdoutflush)r   rN   rO   Zold_processrB   erY   r   r   r   
_bootstrap   sD    	


		!zBaseProcess._bootstrap)r)   
__module____qualname____doc__r   r4   r5   r9   r:   r*   r>   propertyr0   setterr   r@   rB   rD   rC   r7   rL   r^   r   r   r   r   r   >   s*   
	
c               @   s   e  Z d  Z d d   Z d S)rA   c             C   s>   d d l  m } |   d  k r+ t d   t t |   f f S)NrM   )get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)rO   rd   	TypeErrorrA   bytes)r   rd   r   r   r   
__reduce__  s
    	zAuthenticationString.__reduce__N)r)   r_   r`   rg   r   r   r   r   rA     s   rA   c               @   s   e  Z d  Z d d   Z d S)_MainProcessc             C   sL   f  |  _  d |  _ d  |  _ d  |  _ d t t j d   d d i |  _ d  S)NZMainProcessr@       Z	semprefixz/mp)r   r+   r"   r   rA   r    urandomr   )r   r   r   r   r4   (  s    				z_MainProcess.__init__N)r)   r_   r`   r4   r   r   r   r   rh   &  s   rh   rM      ZSIG_) __all__r    rV   signalrQ   _weakrefsetr   pathabspathgetcwdZORIGINAL_DIROSErrorr   r   r	   objectr   rf   rA   rh   r   r3   r   rR   r   rK   r
   __dict__itemsr0   Zsignumr,   r   r   r   r   <module>
   s0   
		""