
    0Fie
                        d dl m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 ej        d
d            Zd	 ZdS )    )annotationsN)time)rejoinsecede)
get_client
get_workerthread_state)SecedeEventTc              #    K   | t           j                            d          } t           j                            | d          } t                      }t          |           }t          j                    5 }|r	 t          j
         t                      t          j
        z
  }t                       |                    t                     |j                            |j        t%          t          j        |dt                                            n# t(          $ r Y nw xY w|V  ddd           dS # 1 swxY w Y   dS )a  Get client for this thread

    This context manager is intended to be called within functions that we run
    on workers.  When run as a context manager it delivers a client
    ``Client`` object that can submit other tasks directly from that worker.

    Parameters
    ----------
    timeout : Number or String
        Timeout after which to error out. Defaults to the
        ``distributed.comm.timeouts.connect`` configuration value.
    separate_thread : bool, optional
        Whether to run this function outside of the normal thread pool
        defaults to True

    Examples
    --------
    >>> def func(x):
    ...     with worker_client() as c:  # connect from worker back to scheduler
    ...         a = c.submit(inc, x)     # this task can submit more tasks
    ...         b = c.submit(dec, x)
    ...         result = c.gather([a, b])  # and gather results
    ...     return result

    >>> future = client.submit(func, 1)  # submit func(1) on cluster

    See Also
    --------
    get_worker
    get_client
    secede
    Nz!distributed.comm.timeouts.connects)timeoutzworker-client-secede-)keycompute_durationstimulus_id)daskconfiggetutilsparse_timedeltar   r   
contextlib	ExitStackr	   
start_timer   r   callbackr   loopadd_callbackhandle_stimulusr
   r   AttributeError)r   separate_threadworkerclientstackdurations         9lib/python3.11/site-packages/distributed/worker_client.pyworker_clientr$      s     F +//"EFFj((#66G\\F(((F				 5 	''  66L$;;v&&&((*(,)1$DDFF$D$D      "    '                 s7   5D39DBD3
DD3DD33D7:D7c                 B    t          j        d           t          | i |S )Nz'local_client has moved to worker_client)warningswarnr$   )argskwargss     r#   local_clientr*   N   s&    M;<<<$)&)))    )NT)
__future__r   r   r&   r   distributed.metricsr   distributed.threadpoolexecutorr   r   distributed.workerr   r   r	    distributed.worker_state_machiner
   contextmanagerr$   r*    r+   r#   <module>r3      s    " " " " " "       $ $ $ $ $ $ 9 9 9 9 9 9 9 9 C C C C C C C C C C 8 8 8 8 8 8 < < < <~* * * * *r+   