B
    T\~	                 @   s   d Z ddlmZmZmZ ddlZddlmZ ddlm	Z	 ddl
Z
ddl
mZmZ ddlmZ dd	lmZ dd
lmZmZ dd Ze ZdaeeZe Zdd ZdddZdS )z2
A threaded shared-memory scheduler

See local.py
    )absolute_importdivisionprint_functionN)defaultdict)
ThreadPool)current_threadLock   )config)	get_async)incaddc               C   s   t  jS )N)r   Zident r   r   ,lib/python3.7/site-packages/dask/threaded.py_thread_get_id   s    r   c             C   s   | t  d fS )N   )sysexc_info)edumpsr   r   r   pack_exception   s    r   c          	   K   s$  |pt dd}|pt dd}t }th |dkr|dkrX|tkrXtdkrRt at}n6|tkrz|t| krzt| | }nt|}|t| |< W dQ R X t|j	t
|j| |f|ttd|}tX tt }|tk	rx:ttD ].}	|	|krx t|	 D ]}
|
  q W qW W dQ R X |S )aE   Threaded cached implementation of dask.get

    Parameters
    ----------

    dsk: dict
        A dask dictionary specifying a workflow
    result: key or list of keys
        Keys corresponding to desired data
    num_workers: integer of thread count
        The number of threads to use in the ThreadPool that will actually execute tasks
    cache: dict-like (optional)
        Temporary storage of results

    Examples
    --------

    >>> dsk = {'x': 1, 'y': 2, 'z': (inc, 'x'), 'w': (add, 'z', 'y')}
    >>> get(dsk, 'w')
    4
    >>> get(dsk, ['w', 'y'])
    (4, 2)
    poolNnum_workers)cacheZget_idr   )r
   getr   
pools_lockmain_threaddefault_poolr   poolsr   Zapply_asynclenZ_poolr   r   set	threading	enumeratelistpopvaluesclose)Zdskresultr   r   r   kwargsZthreadZresultsZactive_threadstpr   r   r   r   !   s0    
r   )NNN)__doc__Z
__future__r   r   r   r   collectionsr   Zmultiprocessing.poolr   r!   r   r    r
   Zlocalr   Z
utils_testr   r   r   r   r   dictr   r   r   r   r   r   r   r   <module>   s    