
    gS                    L   S SK J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  S SK	J
r
Jr  S SKrS SKJr  S SKJr  SR#                  5        V s0 s H#  n \" \S	U  35      (       d  M  \" \S	U  35      U _M%     sn r\R*                  " S
5      r " S S5      r " S S5      rgs  sn f )    )annotationsN)Pipe)socket)AnyCallable)get_subprocess)Configz1INT TERM BREAK HUP QUIT TTIN TTOU USR1 USR2 WINCHSIGzuvicorn.errorc                      \ rS rSr        SS jrSSS jjrSS jrSS jrSSS jjrSSS jjr	SS	 jr
SS
 jrSS jrSS jr\SS j5       rSrg)Process   c                t    X l         [        5       u  U l        U l        [	        XR
                  U5      U l        g N)real_targetr   parent_conn
child_connr   targetprocess)selfconfigr   socketss       Y/home/matz/Project1/venv/lib/python3.13/site-packages/uvicorn/supervisors/multiprocess.py__init__Process.__init__   s-     ",0F)$/%fkk7C    c                    U R                   R                  S5        U R                   R                  U5      (       a  U R                   R                  5         gg)Ns   pingTF)r   sendpollrecvr   timeouts     r   pingProcess.ping%   sE    g&  ))!!#r   c                n    U R                   R                  5         U R                   R                  S5        g )Ns   pong)r   r   r   r   s    r   pongProcess.pong,   s$    W%r   c                (     U R                  5         M  r   )r&   r%   s    r   always_pongProcess.always_pong0   s    IIK r   Nc                    [         R                  S:X  a&  [        R                  " [        R                  S 5        [        R
                  " U R                  SS9R                  5         U R                  U5      $ )Nntc                J    [         R                  " [         R                  5      $ r   )signalraise_signalSIGTERM)sigframes     r   <lambda> Process.target.<locals>.<lambda>;   s    6#6#6v~~#Fr   T)r   daemon)	osnamer.   SIGBREAK	threadingThreadr)   startr   )r   r   s     r   r   Process.target4   sW    77d? MMF
 	 0 0>DDF((r   c                d    U R                   R                  5       (       d  gU R                  U5      $ )NF)r   is_aliver"   r    s     r   r>   Process.is_aliveA   s'    ||$$&&yy!!r   c                8    U R                   R                  5         g r   )r   r;   r%   s    r   r;   Process.startG   s    r   c                8   U R                   R                  Gc  U R                   R                  c   e[        R                  S:X  a:  [        R
                  " U R                   R                  [        R                  5        O9[        R
                  " U R                   R                  [        R                  5        [        R                  SU R                   R                   S35        U R                  R                  5         U R                  R                  5         g g )Nr,   zTerminated child process [])r   exitcodepidr6   r7   killr.   CTRL_BREAK_EVENTr0   loggerinfor   closer   r%   s    r   	terminateProcess.terminateJ   s    <<  (<<##///ww$ ((&*A*AB((&..9KK4T\\5E5E4FaHI""$OO!!# )r   c                8    U R                   R                  5         g r   )r   rF   r%   s    r   rF   Process.killX   s     	r   c                    [         R                  SU R                  R                   S35        U R                  R	                  5         g )NzWaiting for child process [rC   )rH   rI   r   rE   joinr%   s    r   rP   Process.join]   s3    1$,,2B2B1C1EFr   c                .    U R                   R                  $ r   )r   rE   r%   s    r   rE   Process.pida   s    ||r   )r   r   r   r   r   r	   r   z%Callable[[list[socket] | None], None]r   zlist[socket]returnNone)   )r!   floatrU   boolrU   rV   r   )r   zlist[socket] | NonerU   r   )rU   z
int | None)__name__
__module____qualname____firstlineno__r   r"   r&   r)   r   r>   r;   rK   rF   rP   propertyrE   __static_attributes__ r   r   r   r      ss    	D	D 6	D 		D
 
	D&)"$
    r   r   c                      \ rS rSr        SS jrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSS jrSS jrSS jrSrg)Multiprocessf   c                   ^  UT l         UT l        UT l        UR                  T l        / T l        [        R                  " 5       T l        / T l	        [         H  n[        R                  " UU 4S j5        M      g )Nc                :   > TR                   R                  U 5      $ r   )signal_queueappend)r1   r2   r   s     r   r3   'Multiprocess.__init__.<locals>.<lambda>x   s    $2C2C2J2J32Or   )r   r   r   workersprocesses_num	processesr9   Eventshould_exitrg   SIGNALSr.   )r   r   r   r   r1   s   `    r   r   Multiprocess.__init__g   s]     #^^(*$??,')CMM#OP r   c                    [        U R                  5       HY  n[        U R                  U R                  U R
                  5      nUR                  5         U R                  R                  U5        M[     g r   )	rangerk   r   r   r   r   r;   rl   rh   )r   _r   s      r   init_processesMultiprocess.init_processesz   sL    t))*Adkk4;;EGMMONN!!'* +r   c                J    U R                    H  nUR                  5         M     g r   )rl   rK   r   r   s     r   terminate_allMultiprocess.terminate_all   s    ~~G &r   c                J    U R                    H  nUR                  5         M     g r   )rl   rP   rw   s     r   join_allMultiprocess.join_all   s    ~~GLLN &r   c                   [        U R                  5       Hn  u  pUR                  5         UR                  5         [	        U R
                  U R                  U R                  5      nUR                  5         X0R                  U'   Mp     g r   )		enumeraterl   rK   rP   r   r   r   r   r;   )r   idxr   new_processs       r   restart_allMultiprocess.restart_all   s^    %dnn5LCLLN!$++t{{DLLIK"-NN3 6r   c                   S[         R                  " 5        S3nSR                  [        R                  " [        [         R                  " 5       5      SSS95      n[        R                  USU0S9  U R                  5         U R                  R                  S	5      (       dB  U R                  5         U R                  5         U R                  R                  S	5      (       d  MB  U R                  5         U R                  5         S
[         R                  " 5        S3nSR                  [        R                  " [        [         R                  " 5       5      SSS95      n[        R                  USU0S9  g )NzStarted parent process [rC   zStarted parent process [{}]cyanT)fgboldcolor_message)extrag      ?zStopping parent process [zStopping parent process [{}])r6   getpidformatclickstylestrrH   rI   rt   rn   waithandle_signalskeep_subprocess_aliverx   r{   )r   messager   s      r   runMultiprocess.run   s   ,RYY[M;5<<U[[RYY[IY^dko=pqGO]#CD""'',,!&&( ""'',, 	-biik]!<6==ekk#biikJZ_elp>qrGO]#CDr   c                   U R                   R                  5       (       a  g [        U R                  5       H  u  pUR	                  5       (       a  M  UR                  5         UR                  5         U R                   R                  5       (       a    g [        R                  SUR                   S35        [        U R                  U R                  U R                  5      nUR                  5         X R                  U'   M     g )NzChild process [z] died)rn   is_setr~   rl   r>   rF   rP   rH   rI   rE   r   r   r   r   r;   )r   r   r   s      r   r   "Multiprocess.keep_subprocess_alive   s    ""$$%dnn5LC!!LLNLLN&&((KK/'++f=>dkk4;;EGMMO")NN3 6r   c                
   [        U R                  5       Hj  nU R                  R                  U5        [        U   n[	        U SUR                  5        3S 5      nUb	  U" 5         MQ  [        R                  SU S35        Ml     g )Nhandle_zReceived signal z#, but no handler is defined for it.)tuplerg   removero   getattrlowerrH   debug)r   r1   sig_namesig_handlers       r   r   Multiprocess.handle_signals   ss    **+C$$S)s|H!$'(..2B1C(DdKK&/z9\]^ ,r   c                b    [         R                  S5        U R                  R                  5         g )NzReceived SIGINT, exiting.rH   rI   rn   setr%   s    r   
handle_intMultiprocess.handle_int   s!    /0r   c                b    [         R                  S5        U R                  R                  5         g )NzReceived SIGTERM, exiting.r   r%   s    r   handle_termMultiprocess.handle_term   s!    01r   c                b    [         R                  S5        U R                  R                  5         g )NzReceived SIGBREAK, exiting.r   r%   s    r   handle_breakMultiprocess.handle_break   s!    12r   c                N    [         R                  S5        U R                  5         g )Nz&Received SIGHUP, restarting processes.)rH   rI   r   r%   s    r   
handle_hupMultiprocess.handle_hup   s    <=r   c                   [         R                  S5        U =R                  S-  sl        [        U R                  U R
                  U R                  5      nUR                  5         U R                  R                  U5        g )Nz5Received SIGTTIN, increasing the number of processes.   )
rH   rI   rk   r   r   r   r   r;   rl   rh   rw   s     r   handle_ttinMultiprocess.handle_ttin   sU    KLa$++t{{DLLAg&r   c                   [         R                  S5        U R                  S::  a  [         R                  S5        g U =R                  S-  sl        U R                  R	                  5       nUR                  5         UR                  5         g )Nz1Received SIGTTOU, decreasing number of processes.r   zMAlready reached one process, cannot decrease the number of processes anymore.)rH   rI   rk   rl   poprK   rP   rw   s     r   handle_ttouMultiprocess.handle_ttou   se    GH"KKgha..$$&r   )r   rl   rk   rn   rg   r   r   NrT   rZ   )r[   r\   r]   r^   r   rt   rx   r{   r   r   r   r   r   r   r   r   r   r   r`   ra   r   r   rc   rc   f   su    QQ 6Q 	Q
 
Q&+ .E$*&_'r   rc   )
__future__r   loggingr6   r.   r9   multiprocessingr   r   typingr   r   r   uvicorn._subprocessr   uvicorn.configr	   splithasattrr   ro   	getLoggerrH   r   rc   )xs   0r   <module>r      s    "  	         . ! AFFHHvQCy! "GFc!I!H 
		?	+J  J Zx xms   B!&B!