]L iJ`UddlmZddlZddlZddlZddlmZddlmZddl m Z m Z m Z ddl mZmZddlmZdd lmZdd lmZej,d k\r dd l mZmZndd lmZmZej,d k\rddlmZmZd*dZGddZn]ej,dk\rDddlZddl Z dZ!de"d<dZ#de"d<dZ$de"d<e$e!fZ%de"d<e#e!fZ&de"d<e'dddZ(GddZn GddZdZ)de"d <d!Z*e d"Z+ed#Z,eeed$Z-eed%Z.d+d&Z/dd' d,d(Z0d-d)Z1y).) annotationsN)deque)Callable)AnyFinalTypeVar) current_time to_thread)BrokenWorkerInterpreter)CapacityLimiter)RunVar) ) TypeVarTupleUnpack)r)ExecutionFailedcreatecJ ||}|dfS#t$r}|dfcYd}~Sd}~wwxYw)NFT) BaseException)funcargsretvalexcs Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/anyio/to_interpreter.py _interp_callrs8 !4[F5=  9  s """c@eZdZUdZded<ddZddZ d dZy) Workerrfloat last_usedc"t|_yN)r _interpreterselfs r__init__zWorker.__init__"s &D c8|jjyr#)r$closer%s rdestroyzWorker.destroy%s    # # %r(c |jjt||\}}|r||S#t$r}t |j |d}~wwxYwr#)r$callrrr excinfo)r&rrres is_exceptionrs rr-z Worker.call(s[  D$($5$5$:$:<t$T!\ J # D-ckk:C Ds$, AA  ANreturnNonerzCallable[..., T_Retval]rtuple[Any, ...]r2T_Retval__name__ __module__ __qualname__r!__annotations__r'r+r-r(rrrs7 5 ) & ) "  r(r)r rUNBOUND FMT_UNPICKLED FMT_PICKLEDQUEUE_PICKLE_ARGSQUEUE_UNPICKLE_ARGSa_ import _interpqueues from _interpreters import NotShareableError from pickle import loads, dumps, HIGHEST_PROTOCOL QUEUE_PICKLE_ARGS = (1, 2) QUEUE_UNPICKLE_ARGS = (0, 2) item = _interpqueues.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: _interpqueues.put(queue_id, (retval, is_exception), *QUEUE_UNPICKLE_ARGS) except NotShareableError: retval = dumps(retval, HIGHEST_PROTOCOL) _interpqueues.put(queue_id, (retval, is_exception), *QUEUE_PICKLE_ARGS) zexecc@eZdZUdZded<ddZddZ d dZy) rrr r!ctj|_tjdgt|_tj |jd|j iy)Nr queue_id) _interpretersr_interpreter_id _interpqueuesrC _queue_idset___main___attrsr%s rr'zWorker.__init__`sM#0#7#7#9D *11!J6IJDN  , ,$$z4>>&B r(ctj|jtj|jyr#)rJr+rKrHrIr%s rr+zWorker.destroygs(  ! !$.. 1  ! !$"6"6 7r(cddl}|j||f|j}tj|j |gt tj|jt}|r t|tj|j }|dd\\}}}|tk(r|j|}|r||S)Nrr>)pickledumpsHIGHEST_PROTOCOLrJputrKrBrHrDrI _run_funcr getrAloads) r&rrrOitemexc_infor/r0fmts rr-z Worker.callks <<t f.E.EFD   dnnd G5F G$))$*>*> JH-h77##DNN3C'*2Aw $ S,k!ll3' Jr(Nr1r4r7r<r(rrr]s7 5  8 ) "   r(c@eZdZUdZded<ddZ d dZddZy) rrr r!ctd)Nz,subinterpreters require at least Python 3.13) RuntimeErrorr%s rr'zWorker.__init__sMN Nr(ctr#)NotImplementedError)r&rrs rr-z Worker.calls & %r(cyr#r<r%s rr+zWorker.destroys r(Nr1r4)r8r9r:r!r;r'r-r+r<r(rrrs8 5 O &) &" &  & r(DEFAULT_CPU_COUNTr6PosArgsT_available_workers_default_interpreter_limitercR|D]}|j|jyr#)r+clear)workersworkers r _stop_workersris& MMOr(limitercK| t} tj}|4d{ |j}dddd{ tjj|||d{t}|rT||dj z t"krn:tj|j%j&|d{|rTt|_|j)|S#t$r=t }tj |t jt|YwxYw7#t$rt}YwxYw7#1d{7swY(xYw77#t}|rU||dj z t"krn;tj|j%j&|d{7|rUt_|j)|wxYww)a Call the given function with the given arguments in a subinterpreter. .. warning:: On Python 3.13, the :mod:`concurrent.interpreters` module was not yet available, so the code path for that Python version relies on an undocumented, private API. As such, it is recommended to not rely on this function for anything mission-critical on Python 3.13. :param func: a callable :param args: the positional arguments for the callable :param limiter: capacity limiter to use to limit the total number of subinterpreters running (if omitted, the default limiter is used) :return: the result of the call :raises BrokenWorkerInterpreter: if there's an internal error in a subinterpreter Nrjr)#current_default_interpreter_limiter _idle_workersrT LookupErrorrsetatexitregisterripop IndexErrorrr run_syncr-r r!MAX_WORKER_IDLE_TIMEpopleftr+append)rrkr idle_workersrhnows rrurus*575$((*  !%%'F $'' KK     n\!_...2FF$$\%9%9%;%C%CWU U U  (>F#9 5w ,' |45  XF   V n\!_...2FF$$\%9%9%;%C%CWU U U  (>F#s HC<HEHE%E H E" H&F7E;8F;AHE>H!HHEHEE%EE%"H%E8+E. ,E83H;F>HAHGH"!HHc tjS#t$r?tt j xst }tj||cYSwxYw)z Return the capacity limiter used by default to limit the number of concurrently running subinterpreters. Defaults to the number of CPU cores. :return: a capacity limiter object )rdrTror os cpu_countr`rprjs rrmrmsN+//11 !",,."E4EF$((1sAAA)rzCallable[..., Any]rr5)rgz deque[Worker]r2r3)rz&Callable[[Unpack[PosArgsT]], T_Retval]rzUnpack[PosArgsT]rkzCapacityLimiter | Noner2r6)r2r )2 __future__rrqr|sys collectionsrcollections.abcrtypingrrrr r _core._exceptionsr _core._synchronizationr lowlevelr version_inforrtyping_extensionsconcurrent.interpretersrrrrrJrHr?r;r@rArBrCcompilerSr`rvr6rbrnrdrirurmr<r(rrsm" $&&%63w++6w?!.  GUM5K +W5u5"/!99 0 5I:##L"5 :   #%uV}%&:; 6vo67UV'+6$ 06$ 6$$6$ 6$rr(