U
    Î~fh·  ã                   @   sL   d Z ddlmZ ddlmZ ddlmZ ddgiZdgZ	G d	d„ de
ƒZd
S )z,
IO/concurrency helpers for `tqdm.contrib`.
é    )Údeque)ÚThreadPoolExecutoré   )Útqdmzgithub.com/Z	casperdclÚ
MonoWorkerc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r   zƒ
    Supports one running task and one waiting task.
    The waiting task is the most recent submitted (others are discarded).
    c                 C   s   t dd| _tg dƒ| _d S )Né   )Úmax_workersr   )r   Úpoolr   Úfutures)Úself© r   ú=/tmp/pip-unpacked-wheel-q5zzfsrg/tqdm/contrib/utils_worker.pyÚ__init__   s    zMonoWorker.__init__c              
   O   s¢   | j }t|ƒ|jkrF| ¡ }| ¡ sFt|ƒr<| ¡ }| ¡  | |¡ z| jj	|f|ž|Ž}W n0 t
k
rŽ } zt t|ƒ¡ W 5 d}~X Y nX | |¡ |S dS )z;`func(*args, **kwargs)` may replace currently waiting task.N)r
   ÚlenÚmaxlenÚpopleftÚdoneÚpopÚcancelÚ
appendleftr	   ÚsubmitÚ	ExceptionÚ	tqdm_autoÚwriteÚstrÚappend)r   ÚfuncÚargsÚkwargsr
   ZrunningZwaitingÚer   r   r   r      s    
 
zMonoWorker.submitN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   N)r#   Úcollectionsr   Úconcurrent.futuresr   Úautor   r   Ú
__author__Ú__all__Úobjectr   r   r   r   r   Ú<module>   s   
