
    h/+                        S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r
   \ R                  R                  \ R                  " 5       5      r/ SQrS rS rS rS r\4S	 jr " S
 S5      r " S S\5      r " S S\5      r\" 5       q\R6                  " S5      q\" 5       qC\r0 r \RB                  RE                  5        H  u  r#r$\#SS S:X  d  M  S\#;  d  M  \#\ \$* '   M!     \" 5       r%g! \ a    Sr Nf = f)    N)WeakSetprocess)BaseProcessProcesscurrent_processactive_childrenc                      [         $ )z8
Return process object representing the current process
)_current_process     8D:\TimeStamps\venv\Lib\site-packages\billiard/process.pyr   r   #   s
     r   c                     U =q [        l         g N)r   _mprocr   s    r   _set_current_processr   *   s    188v.r   c                      [        [        5       H5  n U R                  R                  5       c  M   [        R	                  U 5        M7     g r   )list	_children_popenpolldiscard)ps    r   _cleanupr   /   s.    )_88==?&a  r   c                 \     U R                  5         g ! [        [        [        4 a     g f = fr   )flushAttributeErrorEnvironmentErrorNotImplementedError)fs    r   _maybe_flushr!   6   s+    		,.AB s    ++c                 T     U " 5         [        [        5      $ ! [          a    / s $ f = f)zF
Return list of process objects corresponding to live child processes
)	TypeErrorr   r   )r   s    r   r	   r	   =   s.    
 	?  	s    ''c                      \ rS rSrSrS rSSSS0 S4S jrS rS rS	 r	S
 r
S rS S jrS rS r\S 5       r\R"                  S 5       r\S 5       r\R"                  S 5       r\S 5       r\R"                  S 5       r\S 5       r\S 5       r\r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS rSrg)!r   I   zt
Process objects represent activity that is run in a separate process

The class is analogous to `threading.Thread`
c                     [        5       er   )r   selfs    r   _PopenBaseProcess._PopenP   s    !##r   Nr   c                 &   Ub   S5       e[        [        5      n[        R                  U4-   U l        [        R                  R                  5       U l        [        R                  " 5       U l        S U l	        X l
        [        U5      U l        [        U5      U l        U=(       d;    [        U 5      R                   S-   SR#                  S U R                   5       5      -   U l        Ub  X`l        [(        b  [(        R+                  U 5        SU l        g )Nz#group argument must be None for now-:c              3   8   #    U  H  n[        U5      v   M     g 7fr   )str).0is     r   	<genexpr>'BaseProcess.__init__.<locals>.<genexpr>`   s     4^SVV^s   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kwargsrE   _kwcounts	            r   __init__BaseProcess.__init__S   s    }CCC}%&)33ui?'//44699;4[
F| 5DJ''#-HH4T^^445 	
  K MM$',$r   c                 t    U R                   (       a'  U R                   " U R                  0 U R                  D6  gg)zA
Method to be run in sub-process; can be overridden in sub-class
N)r<   r>   r@   r'   s    r   runBaseProcess.runi   s)     <<LL$**55 r   c                     U R                   b   S5       eU R                  [        R                  " 5       :X  d   S5       e[	        5         U R                  U 5      U l         U R                   R                  U l        [        R                  U 5        g)z
Start child process
Nzcannot start a process twicez:can only start a process object created by current process)
r   r;   r9   r:   r   r)   sentinel	_sentinelr   rG   r'   s    r   startBaseProcess.startp   sr     {{"B$BB"299;. 	IH	I.
kk$'--dr   c                 T    U R                   b  U R                   R                  5         g g r   )r   closer'   s    r   r[   BaseProcess.close|   s!    ;;"KK #r   c                 8    U R                   R                  5         g)zD
Terminate process; sends SIGTERM signal or uses TerminateProcess()
N)r   	terminater'   s    r   r^   BaseProcess.terminate   s     	r   c                 2    SU l         U R                  5         g )NT)rH   r^   r'   s    r   terminate_controlled BaseProcess.terminate_controlled   s    '+$r   c                    U R                   [        R                  " 5       :X  d   S5       eU R                  c   S5       eU R                  R	                  U5      nUb&  [
        R                  U 5        U R                  5         gg)z%
Wait until child process terminates
zcan only join a child processNzcan only join a started process)r;   r9   r:   r   waitr   r   r[   )r(   timeoutress      r   rC   BaseProcess.join   so     299;.O0OO.{{&I(II&kkw'?d#JJL r   c                     U [         L a  gU R                  [        R                  " 5       :X  d   S5       eU R                  c  gU R                  R                  5         U R                  R                  SL $ )z!
Return whether process is alive
Tzcan only test a child processNF)r   r;   r9   r:   r   r   
returncoder'   s    r   is_aliveBaseProcess.is_alive   sb     ##299;.O0OO.;;{{%%--r   c                 V    U R                   c  gU R                   R                  5       S L $ )NFr   r   r'   s    r   	_is_aliveBaseProcess._is_alive   s'    ;;{{!T))r   c                     U R                   $ r   )rD   r'   s    r   rK   BaseProcess.name   s    zzr   c                 H    [        U[        5      (       d   S5       eXl        g )Nzname must be a string)
isinstancer/   rD   )r(   rK   s     r   rK   rq      s     $$$=&==$
r   c                 :    U R                   R                  SS5      $ )z$
Return whether process is a daemon
rE   Fr7   getr'   s    r   rE   BaseProcess.daemon   s    
 ||%00r   c                 H    U R                   b   S5       eXR                  S'   g)z!
Set whether process is a daemon
Nzprocess has already startedrE   )r   r7   )r(   daemonics     r   rE   rw      s&    
 {{"A$AA"!)Xr   c                      U R                   S   $ )Nauthkey)r7   r'   s    r   r{   BaseProcess.authkey   s    ||I&&r   c                 4    [        U5      U R                  S'   g)z"
Set authorization key of process
r{   N)AuthenticationStringr7   )r(   r{   s     r   r{   r|      s    
 #7w"?Yr   c                 h    U R                   c  U R                   $ U R                   R                  5       $ )z=
Return exit code of process or `None` if it has yet to stop
rm   r'   s    r   exitcodeBaseProcess.exitcode   s+    
 ;;;;{{!!r   c                     U [         L a  [        R                  " 5       $ U R                  =(       a    U R                  R                  $ )zE
Return identifier (PID) of process or `None` if it has yet to start
)r   r9   r:   r   pidr'   s    r   identBaseProcess.ident   s0    
 ##99;;;24;;??2r   c                 N     U R                   $ ! [         a    [        S5      ef = f)zc
Return a file descriptor (Unix) or handle (Windows) suitable for
waiting for process termination.
zprocess not started)rW   r   
ValueErrorr'   s    r   rV   BaseProcess.sentinel   s,    	4>>! 	4233	4s    $c                     [         $ r   )r5   r'   s    r   _counterBaseProcess._counter   s
      r   c                     [         $ r   )r   r'   s    r   r   BaseProcess._children   s
     r   c                     U R                   $ r   )r{   r'   s    r   _authkeyBaseProcess._authkey   s     ||r   c                     U R                   $ r   )rE   r'   s    r   	_daemonicBaseProcess._daemonic   s     {{r   c                 8    U R                   R                  S5      $ )Ntempdirru   r'   s    r   _tempdirBaseProcess._tempdir   s     ||	**r   c                    U [         L a  SnO`U R                  [        R                  " 5       :w  a  SnO:U R                  c  SnO*U R                  R                  5       b  U R                  nOSn[        U5      [        L a!  US:X  a  SnOS[        R                  X5      -  nS[        U 5      R                  < SU R                  < S	U< U R                  =(       a    S
=(       d    S< S3$ )Nstartedunknowninitialr   stoppedzstopped[%s]<(z, z daemon z)>)r   r;   r9   r:   r   r   r   rA   int_exitcode_to_namerv   rB   rD   rE   )r(   statuss     r   __repr__BaseProcess.__repr__  s    ##F,F[[ F{{!-"<3{"&):)>)>v)NN#':#6#6

#)4;;+D9+J+JL 	Lr   c                 (   SSK JnJn   U R                  b  UR	                  U R                  5        [
        R                  " S5      q[        5       q	[        R                  bA   [        R                  R                  5         [        [        R                  5      [        l        [&        n[)        U 5        [*        R,                  R.                  R0                  n[3        UR5                  5       5      nUR7                  S 5        U Hd  nU(       a#  [9        XF   [*        R:                  5      (       a  M-  [*        R<                  " U5      R>                   H  nURA                  5         M     Mf     [B        RD                  " 5       [*        l#         URH                  RK                  5         URM                  5         AURO                  SU RP                  5         U RS                  5         SnURU                  5         URO                  S
U RP                  U5        [c        [        Rl                  5        [c        [        R\                  5        U$ ! [         ["        [$        4 a     GNf = f! Af = f! URU                  5         f = f! [V         a  n	U	RX                  (       d  Sn S n	A	N[9        U	RX                  S   [Z        5      (       a  U	RX                  S   n S n	A	N[        R\                  R_                  [a        U	RX                  S   5      S-   5        [c        [        R\                  5        [9        U	RX                  S   [`        5      (       a  SOSn S n	A	GN]S n	A	f  SnURe                  SU Rf                  SS9(       d@  SS K4n
[        R\                  R_                  S	U Rf                  -  5        U
Rk                  5          GN= f! URO                  S
U RP                  W5        [c        [        Rl                  5        [c        [        R\                  5        f = f)N   )utilcontextz#child process %s calling self.run()r   
z
Process %sT)exc_infozProcess %s:
z#process %s exiting with exitcode %d)7r   r   r   _start_method_force_start_method	itertoolsrO   r5   setr   sysstdinr[   openr9   devnullr   OSErrorr   r   r   loggingLoggermanager
loggerDictr   keysappendrs   PlaceHolder	getLoggerhandlers
createLock	threadingRLock_lock_finalizer_registryclear_run_after_forkersinfor   rS   _exit_function
SystemExitrL   r   stderrwriter/   r!   errorrK   	traceback	print_excstdout)r(   r   r   old_processr   logger_namesrK   handlerr   excr   s              r   
_bootstrapBaseProcess._bootstrap  s   #<	%!!-++D,>,>?(q1Iyy$IIOO% $RZZ 0CI +K & !//::J
 12L%$:j.>.5.A.A$C $C#*#4#4T#:#C#C**, $D %
 &OO-GM ((..0'')  II;TXXF&
##%" II;hh*$$k )':> 2   ##% 	D88CHHQK--88A;

  SXXa[!1D!89SZZ( *388A; < <1!	&H::lDII:E 

  499!<=##%II;hh*$$s   AI> $A I $B
I> 2AI> *I# 6I> I) &I> I I> I  I> #I&&I> )I;;I> >
N=MO   1MO  A7MO  A'N=:O   AP)r>   r7   rH   r6   r@   rD   r;   r   rW   r<   rE   r   ) rB   
__module____qualname____firstlineno____doc__r)   rP   rS   rX   r[   r^   ra   rC   rj   rn   propertyrK   setterrE   r{   r   r   r   rV   r   r   r   r   r   r   r   __static_attributes__r   r   r   r   r   I   s   $ "$TD-,6
  	
.*
   
[[  1 1 ]]* * ' ' ^^@ @ " " 3 3 C4 4           + +L0Br   r   c                       \ rS rSrS rSrg)r~   ic  c                 X    SSK Jn  U" 5       c  [        S5      e[        [	        U 5      44$ )Nr   )get_spawning_popenzJPickling an AuthenticationString object is disallowed for security reasons)r   r   r#   r~   bytes)r(   r   s     r   
__reduce__AuthenticationString.__reduce__e  s3    /'23 3 $eDk^33r   r   N)rB   r   r   r   r   r   r   r   r   r~   r~   c  s    4r   r~   c                       \ rS rSrS rSrg)_MainProcessis  c                     SU l         SU l        S U l        S U l        [	        [
        R                  " S5      5      SS.U l        g )Nr   MainProcess    z/mp)r{   	semprefix)r6   rD   r;   r   r~   r9   urandomr7   r'   s    r   rP   _MainProcess.__init__u  s;    "
#7

2#G%*,r   )r7   r6   rD   r;   r   N)rB   r   r   r   rP   r   r   r   r   r   r   s  s    ,r   r   r      SIG_)&r9   r   signalr   r   r   _weakrefsetr   multiprocessingr   r   pathabspathgetcwdORIGINAL_DIRr   __all__r   r   r   r!   r	   r   r   r~   r   r   rO   r5   r   r   r   r   __dict__itemsrK   signumrF   r   r   r   <module>r      s   
 
      -77??299;/L K9
! & 	S St	45 	4 ,; ,  > ??1% E	   OO))+LD&BQx5S_%)6'" ,
 I	o  Ls   *C0 0C;:C;