
    +h$                       U d dl m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	m
Z
 d dlmZmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZmZ ddl m!Z!m"Z" ddl#m$Z$ dZ% ed      Z& e!d      Z'de(d<    e!d      Z)de(d<    e!d      Z*de(d<   ddd	 	 	 	 	 	 	 	 	 ddZ+ddZ,ddZ-e.dk(  r e-        yy)     )annotationsN)deque)module_from_specspec_from_file_location)CallableTypeVarcast   )current_timeget_asynclibget_cancelled_exc_class)BrokenWorkerProcess)open_process)CapacityLimiter)CancelScope
fail_after)ByteReceiveStreamByteSendStreamProcess)RunVarcheckpoint_if_cancelled)BufferedByteReceiveStreami,  T_Retval_process_pool_workerszRunVar[set[Process]]_process_pool_idle_workersz$RunVar[deque[tuple[Process, float]]]_default_process_limiterzRunVar[CapacityLimiter]F)cancellablelimiterc          	       K   dfd}t                d{    t        j                  d| |ft        j                        }	 t        j                         t        j                         }|xs
 t               4 d{    |r|j                         \  }j                  t        t         j"                        t%        t        t&        j(                              t+               }g }	|r[||d   d   z
  t,        k  rnH|j/                         \  }j1                          j3                         |	j5                         |r[t7        d      5  |	D ]  j9                          d{     	 ddd       nRj3                         |rt:        j<                  d	d
t>        g}
tA        |
tB        jD                  tB        jD                         d{   	 t        t         j"                        t%        t        t&        j(                              tG        d      5  jI                  d       d{   }ddd       dk7  rtK        d|      tM        t:        jN                  d   dd      }t        j                  dt:        jP                  |ft        j                        } ||       d{    jW                         t7        |       5  	 t        tX         ||       d{         v r|j5                  t+               f       cddd       cddd      d{    S 7 $# t        $ r[ t               t               }t        j                         t        j                  |       t               j                         Y 4w xY w7 &7 7# 1 sw Y   4xY w7 7 {# 1 sw Y   {xY w7 # tJ        tS               f$ r  tT        $ r!}j1                          tK        d      |d}~ww xY w7 7 # v r|j5                  t+               f       w w xY w# 1 sw Y   nxY wddd      d{  7   y# 1 d{  7  sw Y   yxY ww)a  
    Call the given function with the given arguments in a worker process.

    If the ``cancellable`` option is enabled and the task waiting for its completion is cancelled,
    the worker process running it will be abruptly terminated using SIGKILL (or
    ``terminateProcess()`` on Windows).

    :param func: a callable
    :param args: positional arguments for the callable
    :param cancellable: ``True`` to allow cancellation of the operation while it's running
    :param limiter: capacity limiter to use to limit the total amount of processes running
        (if omitted, the default limiter is used)
    :return: an awaitable that yields the return value of the function.

    c                  K   	 	j                  |        d {    j                  dd       d {   }|j                  d      \  }}|dvrt        d|      j	                  t        |             d {   }t        j                   |      }|dk(  rt        |t              sJ ||S 7 7 ~7 8# t        $ r}
j                         	 j                          t        d      5  j                          d {  7   d d d        n# 1 sw Y   nxY wn# t        $ r Y nw xY wt        |t                     r t        |d }~ww xY ww)	N   
2       )   RETURN	   EXCEPTION-Worker process returned unexpected response: Tshieldr%   )sendreceive_untilsplitRuntimeErrorreceive_exactlyintBaseExceptiondiscardkillr   acloseProcessLookupError
isinstancer   r   pickleloads)pickled_cmdresponsestatuslengthpickled_responseexcretvalbufferedprocessstdinworkerss          C/var/www/html/venv/lib/python3.12/site-packages/anyio/to_process.pysend_raw_commandz"run_sync.<locals>.send_raw_command4   sD    	3**[)))%33E2>>H%^^D1NFF66"CH<P  &.%=%=c&k%JJ ./\!fm444LM9 *>  K 	3OOG$ - +!..***+ + +%  #689)s2	3s   EB6 B0B6 B2AB6 ;B4<B6  0E0B6 2B6 4B6 6	E?ED-DDD	DD	DE	D)&E(D))EEENrun)protocolr   r
   Tr'   z-uz-m)r@   stdout         READY
r&   __main____file__initz*Error during worker process initialization)r7   bytesreturnobject)-r   r5   dumpsHIGHEST_PROTOCOLr   getr   LookupErrorsetr   r   #setup_process_pool_exit_at_shutdowncurrent_default_process_limiterpop
returncoder	   r   r@   r   r   rF   r   WORKER_MAX_IDLE_TIMEpopleftr1   removeappendr   r2   sys
executable__name__r   
subprocessPIPEr   receiver   getattrmodulespathr   r/   addr   )funcr   r   argsrC   requestidle_workers
idle_sincenowkilled_processescommandmessagemain_module_pathpickledr<   r>   r?   r@   rA   s                  @@@@rB   run_syncrr      s    , B "
###llE4.9P9PQGD'++-1557 <:< GC GC "."2"2"4GZ!!)^W]];4*GNN; #n24 "\!_Q//2FF*6*>*>*@'GZLLNNN7+$++G4 # !- /#3 /%nn...// NN7#7 : ~~tT8<G(zz G^W]];4*GNN;  ^ 8$,$4$4Q$77G8 j(-G{S  $+3;;z+BJPT#U  ,,SXX'78#44 'w/// KK K0 	CCH,<W,E&EFg% '',.(AB	C 	CEGC GC GC $  D%w!!'*"&&|4::7CDGC6 // / 88 8 0')@)BC   )@ 'FIGCL g% '',.(AB &		C 	CEGC GC GC GC GCsj  Q1M,Q1(M 3Q1N+Q1	CQQN17N.
8N1?QAQ#N>$Q)AO1OOOA:OOO
Q(P>*P?P PP>&	Q/Q1;P<Q1A N($Q1'N((Q1.N11N;	6	QOO			OP0PPQPQ1"P;;P>>Q	Q
Q1QQ1Q."Q%#Q.*Q1c                     	 t         j                         S # t        $ r; t        t	        j
                         xs d      } t         j                  |        | cY S w xY w)z
    Return the capacity limiter that is used by default to limit the number of worker processes.

    :return: a capacity limiter object

       )r   rR   rS   r   os	cpu_countrT   )r   s    rB   rV   rV      sM    '++-- !",,."5A6 $$W-s    AAAc                    t         j                  } t         j                  }t        t        j
                        t         _        t        t        j
                  d      t         _        |j                  j                  d       	 d x}}	 t        j                  | j                        ^}}|dk(  r|\  }}	  || }nz|dk(  ru|\  t         _        }t         j                  d= |rT	 t        d|      }	|	rE|	j                  r9t        |	      }
|	j                  j!                  |
       |
t         j                  d<   	 |'d}t        j$                  |t        j&                        }n&d}t        j$                  |t        j&                        }|j                  j                  d	|t)        |      fz         |j                  j                  |       t+        |t,              r|Y# t        $ r}|}Y d }~d }~ww xY w# t        $ r}|}Y d }~d }~ww xY w# t"        $ r Y y t        $ r}|}Y d }~d }~ww xY w# t        $ r2}|}d}t        j$                  |t        j&                        }Y d }~d }~ww xY w)
NwrI   rD   rL   rJ   __mp_main__r%   r$   s   %s %d
)r]   r@   rF   openru   devnullbufferwriter5   loadr/   re   rd   r   loaderr   exec_moduleEOFErrorrP   rQ   lenr4   
SystemExit)r@   rF   r=   	exceptionrn   rh   rg   r<   rp   specmainr9   rq   s                rB   process_workerr      s    IIEZZFRZZ CIbjj#&CJ
MM
#
!!	(#[[6NGd %!
d$!4[F F"-1**KK
+#(6}FVWDKK#3D#9D KK33D96:CKK
3
	A$% ,,y&2I2IJ" ,,vv/F/FG 	J&#g,)??@G$ i,Oa  % $ #I$ ) ($'	(1  	 	I	@  	AI!Fll3(?(?@G	Ash   !H 3G  AG3 4AH- 	G0$G++G03	H<HH	H*H*H%%H*-	I(6(I##I(rJ   )
rg   zCallable[..., T_Retval]rh   rO   r   boolr   zCapacityLimiter | NonerN   r   )rN   r   )rN   None)/
__future__r   ru   r5   r`   r]   collectionsr   importlib.utilr   r   typingr   r   r	   _core._eventloopr   r   r   _core._exceptionsr   _core._subprocessesr   _core._synchronizationr   _core._tasksr   r   abcr   r   r   lowlevelr   r   streams.bufferedr   rY   r   r   __annotations__r   r   rr   rV   r   r_        rB   <module>r      s    " 	   
  D * * Q Q 2 - 3 1 ; ; 5 7 :.45L.M + MCI D @  5;;U4V 1 V &*	LC
!LCLC LC $	LC
 LC^9x z r   