
    h                       % 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  S SKJrJrJr  SSKJrJr  SS	KJr  SS
KJr  SSKJr  \R2                  S:  a	  S SKJrJr  OS SKJrJr  SrS\S'   S rS\S'   Sr S\S'   Sr!S\S'   Sr"\" S5      r#\" S5      r$\\S      " S5      r%\\   " S5      r& " S S5      r'S S jr(SS.       S!S jjr)S"S jr*g)#    )annotationsN)deque)Callable)dedent)AnyFinalTypeVar   )current_time	to_thread)BrokenWorkerIntepreter)CapacityLimiter)RunVar)      )TypeVarTupleUnpack   r   UNBOUNDFMT_UNPICKLEDFMT_PICKLED   DEFAULT_CPU_COUNT   T_RetvalPosArgsTWorker_available_workers_default_interpreter_limiterc                      \ rS rSr% \" \" S5      SS5      rSrS\S'   Sr	S	\S
'   S\S'   S\S'   SS jr
SS jr      SS jr        SS jrSrg)r   %   a  
        import _interpqueues as queues
        import _interpreters as interpreters
        from pickle import loads, dumps, HIGHEST_PROTOCOL

        item = queues.get(queue_id)[0]
        try:
            func, args = loads(item)
            retval = func(*args)
        except BaseException as exc:
            is_exception = True
            retval = exc
        else:
            is_exception = False

        try:
            queues.put(queue_id, (retval, is_exception), FMT_UNPICKLED, UNBOUND)
        except interpreters.NotShareableError:
            retval = dumps(retval, HIGHEST_PROTOCOL)
            queues.put(queue_id, (retval, is_exception), FMT_PICKLED, UNBOUND)
        z<string>execr   float	last_usedFbool_initializedint_interpreter_id	_queue_idc                    SS K nSS KnUR                  5       U l        UR                  S[        [
        5      U l        SU l        UR                  U R                  U R                  [        [        [
        S.5        g )Nr   r   T)queue_idr   r   r   )
_interpqueues_interpreterscreater(   r   r   r)   r&   set___main___attrsr   selfqueuesinterpreterss      F/var/www/html/env/lib/python3.13/site-packages/anyio/to_interpreter.py
initializeWorker.initializeF   sa    &,+224q-A ''   NN*!."		
    c                    SS K nSS KnU R                  (       a7  UR                  U R                  5        UR                  U R
                  5        g g )Nr   )r,   r-   r&   destroyr(   r)   r0   s      r4   r9   Worker.destroyW   s:    &,  !5!56NN4>>* r7   c                   SS K nSS KnU R                  (       d  U R                  5         [        R
                  " X4[        R                  5      nUR                  U R                  U[        [        5        UR                  U R                  U R                  5      =n(       a  [        U5      eUR                  U R                  5      S S u  u  pxn	U	[        :X  a  [        R                   " U5      nXx4$ )Nr   r   )r,   r-   r&   r5   pickledumpsHIGHEST_PROTOCOLputr)   r   r   r"   r(   	_run_funcr   getloads)
r1   funcargsr2   r3   payloadexc_inforesis_exceptionfmts
             r4   _callWorker._call_   s    
 	',  OO,,|V-D-DE

4>>7KA $(()=)=t~~NN8N(22#)::dnn#=bq#A S+,,s#C  r7   c                z   #    [         R                  " U R                  UUUS9I S h  vN u  pEU(       a  UeU$  N7f)Nlimiter)r   run_syncrJ   )r1   rC   rD   rN   resultrH   s         r4   callWorker.callx   sC      &/%7%7JJ	&
  
 L 
s   %;9;)r&   r(   r)   N)returnNone)rC   Callable[..., T_Retval]rD   
tuple[Any]rS   ztuple[Any, bool])rC   rU   rD   rV   rN   r   rS   r   )__name__
__module____qualname____firstlineno__compiler   r@   r$   __annotations__r&   r5   r9   rJ   rQ   __static_attributes__ r7   r4   r   r   %   s      	* 	/I4 IuL$N
"+!%! ! 
	!2%  !	
 
r7   c                V    U  H  nUR                  5         M     U R                  5         g )N)r9   clear)workersworkers     r4   _stop_workersrc      s!      MMOr7   rM   c               b  #    [         R                  S::  a  [        S5      eUc
  [        5       n [        R                  5       nU ISh  vN    UR                  5       nSSS5      ISh  vN    WR                  XU5      I Sh  vN [!        5       nU(       aX  XSS   R"                  -
  [$        ::  a  O>[&        R(                  " UR+                  5       R,                  US9I Sh  vN   U(       a  MX  [!        5       Ul        UR/                  U5        $ ! [         a>    [        5       n[        R                  U5        [        R                  " [        U5         GNf = f GN! [         a    [        5       n GNf = f GN! , ISh  vN  (       d  f       GN(= f GN N! [!        5       nU(       aY  XSS   R"                  -
  [$        ::  a  O?[&        R(                  " UR+                  5       R,                  US9I Sh  vN    U(       a  MY  [!        5       Wl        UR/                  U5        f = f7f)a  
Call the given function with the given arguments in a subinterpreter.

If the ``cancellable`` option is enabled and the task waiting for its completion is
cancelled, the call will still run its course but its return value (or any raised
exception) will be ignored.

.. warning:: This feature is **experimental**. The upstream interpreter API has not
    yet been finalized or thoroughly tested, so don't rely on this for anything
    mission critical.

:param func: a callable
:param args: positional arguments for the callable
:param limiter: capacity limiter to use to limit the total amount of subinterpreters
    running (if omitted, the default limiter is used)
:return: the result of the call
:raises BrokenWorkerIntepreter: if there's an internal error in a subinterpreter

)r      z,subinterpreters require at least Python 3.13Nr   rM   )sysversion_infoRuntimeError#current_default_interpreter_limiter_idle_workersrA   LookupErrorr   setatexitregisterrc   pop
IndexErrorr   rQ   r   r$   MAX_WORKER_IDLE_TIMEr   rO   popleftr9   append)rC   rN   rD   idle_workersrb   nows         r4   rO   rO      s    0 7"IJJ575$((* w	!%%'F w$[[W55 n!_...2FF$$\%9%9%;%C%CWUUU	 l (>F#/  5w,'|45
   	XF	 www 6 V n!_...2FF$$\%9%9%;%C%CWUUU	 l (>F#s   -H/D H/
EH/F E" H/+E=,H/1F  FF  
AH/%F&H/3!H/AEH/EH/"E:6F 9E::F =H/ FF	FH/F  H/ AH,<G?=H,!H,,H/c                      [         R                  5       $ ! [         aE    [        [        R
                  " 5       =(       d    [        5      n [         R                  U 5        U s $ f = f)z
Return the capacity limiter that is used by default to limit the number of
concurrently running subinterpreters.

Defaults to the number of CPU cores.

:return: a capacity limiter object

)r   rA   rk   r   os	cpu_countr   rl   rM   s    r4   ri   ri      sN    +//11 !",,."E4EF$((1s    AA%$A%)ra   zdeque[Worker]rS   rT   )rC   z&Callable[[Unpack[PosArgsT]], T_Retval]rD   zUnpack[PosArgsT]rN   zCapacityLimiter | NonerS   r   )rS   r   )+
__future__r   rm   rw   r<   rf   collectionsr   collections.abcr   textwrapr   typingr   r   r	    r   r   _core._exceptionsr   _core._synchronizationr   lowlevelr   rg   r   r   typing_extensionsr   r\   r   r   r   rq   r   r   rj   r   r   rc   rO   ri   r^   r7   r4   <module>r      s    "  	  
  $  & & % 5 3 w++6 u U  5   :
#uX'(<=%o67UV b bJ '+7$
07$7$ $7$ 	7$tr7   