
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \óR  ã            
   @   sP  d Z ddlZddlZddlZddlZdZdZdZdZdZ	dZ
d	Zd
ZdZe	e
eeegZe	de
dededediZejdƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d eƒZd!d"„ Zd#d$„ Zd/d%d&„Zejd'd(ƒZ defd)d*„Z!G d+d,„ d,eƒZ"G d-d.„ d.eƒZ#dS )0z"Brian Quinlan (brian@sweetapp.com)é    NÚFIRST_COMPLETEDÚFIRST_EXCEPTIONÚALL_COMPLETEDÚ_AS_COMPLETEDÚPENDINGÚRUNNINGÚ	CANCELLEDÚCANCELLED_AND_NOTIFIEDÚFINISHEDÚpendingÚrunningÚ	cancelledÚfinishedzconcurrent.futuresc               @   s   e Zd ZdS )ÚErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú0/usr/lib64/python3.6/concurrent/futures/_base.pyr   ,   s   r   c               @   s   e Zd ZdS )ÚCancelledErrorN)r   r   r   r   r   r   r   r   0   s   r   c               @   s   e Zd ZdS )ÚTimeoutErrorN)r   r   r   r   r   r   r   r   4   s   r   c               @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_Waiterc             C   s   t jƒ | _g | _d S )N)Ú	threadingZEventÚeventÚfinished_futures)Úselfr   r   r   Ú__init__:   s    
z_Waiter.__init__c             C   s   | j j|ƒ d S )N)r   Úappend)r   Úfuturer   r   r   Ú
add_result>   s    z_Waiter.add_resultc             C   s   | j j|ƒ d S )N)r   r   )r   r   r   r   r   Úadd_exceptionA   s    z_Waiter.add_exceptionc             C   s   | j j|ƒ d S )N)r   r   )r   r   r   r   r   Úadd_cancelledD   s    z_Waiter.add_cancelledN)r   r   r   r   r   r    r!   r   r   r   r   r   8   s   r   c                   s@   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )	Ú_AsCompletedWaiterc                s   t t| ƒjƒ  tjƒ | _d S )N)Úsuperr"   r   r   ÚLockÚlock)r   )Ú	__class__r   r   r   J   s    z_AsCompletedWaiter.__init__c          
      s0   | j �  tt| ƒj|ƒ | jjƒ  W d Q R X d S )N)r%   r#   r"   r   r   Úset)r   r   )r&   r   r   r   N   s    z_AsCompletedWaiter.add_resultc          
      s0   | j �  tt| ƒj|ƒ | jjƒ  W d Q R X d S )N)r%   r#   r"   r    r   r'   )r   r   )r&   r   r   r    S   s    z _AsCompletedWaiter.add_exceptionc          
      s0   | j �  tt| ƒj|ƒ | jjƒ  W d Q R X d S )N)r%   r#   r"   r!   r   r'   )r   r   )r&   r   r   r!   X   s    z _AsCompletedWaiter.add_cancelled)r   r   r   r   r   r    r!   Ú__classcell__r   r   )r&   r   r"   G   s   r"   c                   s4   e Zd Z‡ fdd„Z‡ fdd„Z‡ fdd„Z‡  ZS )Ú_FirstCompletedWaiterc                s   t ƒ j|ƒ | jjƒ  d S )N)r#   r   r   r'   )r   r   )r&   r   r   r   `   s    z _FirstCompletedWaiter.add_resultc                s   t ƒ j|ƒ | jjƒ  d S )N)r#   r    r   r'   )r   r   )r&   r   r   r    d   s    z#_FirstCompletedWaiter.add_exceptionc                s   t ƒ j|ƒ | jjƒ  d S )N)r#   r!   r   r'   )r   r   )r&   r   r   r!   h   s    z#_FirstCompletedWaiter.add_cancelled)r   r   r   r   r    r!   r(   r   r   )r&   r   r)   ]   s   r)   c                   sH   e Zd Z‡ fdd„Zdd„ Z‡ fdd„Z‡ fdd„Z‡ fd	d
„Z‡  ZS )Ú_AllCompletedWaiterc                s$   || _ || _tjƒ | _tƒ jƒ  d S )N)Únum_pending_callsÚstop_on_exceptionr   r$   r%   r#   r   )r   r+   r,   )r&   r   r   r   o   s    
z_AllCompletedWaiter.__init__c          
   C   s4   | j �$ |  jd8  _| js&| jjƒ  W d Q R X d S )Né   )r%   r+   r   r'   )r   r   r   r   Ú_decrement_pending_callsu   s    z,_AllCompletedWaiter._decrement_pending_callsc                s   t ƒ j|ƒ | jƒ  d S )N)r#   r   r.   )r   r   )r&   r   r   r   {   s    z_AllCompletedWaiter.add_resultc                s*   t ƒ j|ƒ | jr| jjƒ  n| jƒ  d S )N)r#   r    r,   r   r'   r.   )r   r   )r&   r   r   r       s    z!_AllCompletedWaiter.add_exceptionc                s   t ƒ j|ƒ | jƒ  d S )N)r#   r!   r.   )r   r   )r&   r   r   r!   †   s    z!_AllCompletedWaiter.add_cancelled)	r   r   r   r   r.   r   r    r!   r(   r   r   )r&   r   r*   l   s
   r*   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_AcquireFuturesc             C   s   t |td�| _d S )N)Úkey)ÚsortedÚidÚfutures)r   r3   r   r   r   r   �   s    z_AcquireFutures.__init__c             C   s   x| j D ]}|jjƒ  qW d S )N)r3   Ú
_conditionÚacquire)r   r   r   r   r   Ú	__enter__�   s    z_AcquireFutures.__enter__c             G   s   x| j D ]}|jjƒ  qW d S )N)r3   r4   Úrelease)r   Úargsr   r   r   r   Ú__exit__”   s    z_AcquireFutures.__exit__N)r   r   r   r   r6   r9   r   r   r   r   r/   Š   s   r/   c             C   sˆ   |t krtƒ }nZ|tkr tƒ }nJtdd„ | D ƒƒ}|tkrHt|dd�}n"|tkr^t|dd�}ntd| ƒ‚x| D ]}|j	j
|ƒ qpW |S )Nc             s   s   | ]}|j ttgkV  qd S )N)Ú_stater	   r
   )Ú.0Úfr   r   r   ú	<genexpr>Ÿ   s    z._create_and_install_waiters.<locals>.<genexpr>T)r,   FzInvalid return condition: %r)r   r"   r   r)   Úsumr   r*   r   Ú
ValueErrorÚ_waitersr   )ÚfsÚreturn_whenÚwaiterZpending_countr<   r   r   r   Ú_create_and_install_waiters˜   s    
rD   c          	   c   sX   xR| rR| d }x|D ]}|j |ƒ qW |j� |jj |ƒ W d Q R X ~| jƒ V  qW d S )Nr-   éÿÿÿÿ)Úremover4   r@   Úpop)rA   rC   Úref_collectr<   Zfutures_setr   r   r   Ú_yield_finished_futures®   s    
rI   c       	      c   sJ  |d k	r|t jƒ  }t| ƒ} t| ƒ}t| ƒ�* tdd„ | D ƒƒ}| | }t| tƒ}W d Q R X t|ƒ}z°t||| fd�E d H  x”|�r|d kr’d }n(|t jƒ  }|dk rºt	dt|ƒ|f ƒ‚|j
j|ƒ |j� |j}g |_|j
jƒ  W d Q R X |jƒ  t||| |fd�E d H  q~W W d x,| D ]$}|j� |jj|ƒ W d Q R X �qW X d S )Nc             s   s    | ]}|j ttgkr|V  qd S )N)r:   r	   r
   )r;   r<   r   r   r   r=   Ý   s    zas_completed.<locals>.<genexpr>)rH   r   z%d (of %d) futures unfinished)ÚtimeÚ	monotonicr'   Úlenr/   rD   r   ÚlistrI   r   r   Úwaitr%   r   ÚclearÚreverser4   r@   rF   )	rA   ÚtimeoutÚend_timeZtotal_futuresr   r   rC   Zwait_timeoutr<   r   r   r   Úas_completedÄ   s@    

rS   ÚDoneAndNotDoneFutureszdone not_donec             C   sê   t | ƒ�† tdd„ | D ƒƒ}t| ƒ| }|tkr>|r>t||ƒS |tkrf|rftdd„ |D ƒƒrft||ƒS t|ƒt| ƒkr€t||ƒS t| |ƒ}W d Q R X |jj	|ƒ x*| D ]"}|j
� |jj|ƒ W d Q R X q¦W |j|jƒ t|t| ƒ| ƒS )Nc             s   s    | ]}|j ttgkr|V  qd S )N)r:   r	   r
   )r;   r<   r   r   r   r=     s    zwait.<locals>.<genexpr>c             s   s(   | ] }|j ƒ  r|jƒ d k	r|V  qd S )N)r   Ú	exception)r;   r<   r   r   r   r=   $  s    )r/   r'   r   rT   r   ÚanyrL   rD   r   rN   r4   r@   rF   Úupdater   )rA   rQ   rB   ÚdoneZnot_donerC   r<   r   r   r   rN     s"    




rN   c               @   s€   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zddd„Zddd„Zdd„ Zdd„ Zdd„ ZdS ) ÚFuturec             C   s,   t jƒ | _t| _d | _d | _g | _g | _d S )N)	r   Z	Conditionr4   r   r:   Ú_resultÚ
_exceptionr@   Ú_done_callbacks)r   r   r   r   r   8  s    
zFuture.__init__c             C   sB   x<| j D ]2}y|| ƒ W q tk
r8   tjd| ƒ Y qX qW d S )Nz!exception calling callback for %r)r\   Ú	ExceptionÚLOGGERrU   )r   Úcallbackr   r   r   Ú_invoke_callbacksA  s
    zFuture._invoke_callbacksc             C   s†   | j �v | jtkr`| jr<d| jjt| ƒt| j | jjjf S d| jjt| ƒt| j | jjjf S d| jjt| ƒt| j f S Q R X d S )Nz<%s at %#x state=%s raised %s>z <%s at %#x state=%s returned %s>z<%s at %#x state=%s>)	r4   r:   r
   r[   r&   r   r2   Ú_STATE_TO_DESCRIPTION_MAPrZ   )r   r   r   r   Ú__repr__H  s"    
zFuture.__repr__c          
   C   sR   | j �: | jttgkrdS | jttgkr,dS t| _| j jƒ  W d Q R X | jƒ  dS )NFT)r4   r:   r   r
   r   r	   Ú
notify_allr`   )r   r   r   r   Úcancel\  s    zFuture.cancelc          
   C   s    | j � | jttgkS Q R X d S )N)r4   r:   r   r	   )r   r   r   r   r   o  s    zFuture.cancelledc          	   C   s   | j � | jtkS Q R X d S )N)r4   r:   r   )r   r   r   r   r   t  s    zFuture.runningc             C   s"   | j � | jtttgkS Q R X d S )N)r4   r:   r   r	   r
   )r   r   r   r   rX   y  s    zFuture.donec             C   s   | j r| j ‚n| jS d S )N)r[   rZ   )r   r   r   r   Z__get_result~  s    zFuture.__get_resultc             C   s>   | j �& | jtttgkr(| jj|ƒ d S W d Q R X || ƒ d S )N)r4   r:   r   r	   r
   r\   r   )r   Úfnr   r   r   Úadd_done_callback„  s
    zFuture.add_done_callbackNc          
   C   sx   | j �h | jttgkrtƒ ‚n| jtkr0| jƒ S | j j|ƒ | jttgkrRtƒ ‚n| jtkrd| jƒ S tƒ ‚W d Q R X d S )N)	r4   r:   r   r	   r   r
   Ú_Future__get_resultrN   r   )r   rQ   r   r   r   Úresult•  s    

zFuture.resultc          
   C   st   | j �d | jttgkrtƒ ‚n| jtkr.| jS | j j|ƒ | jttgkrPtƒ ‚n| jtkr`| jS tƒ ‚W d Q R X d S )N)	r4   r:   r   r	   r   r
   r[   rN   r   )r   rQ   r   r   r   rU   ´  s    

zFuture.exceptionc             C   st   | j �d | jtkr6t| _x| jD ]}|j| ƒ q W dS | jtkrJt| _dS tj	dt
| ƒ| jƒ tdƒ‚W d Q R X d S )NFTz!Future %s in unexpected state: %szFuture in unexpected state)r4   r:   r   r	   r@   r!   r   r   r^   Zcriticalr2   ÚRuntimeError)r   rC   r   r   r   Úset_running_or_notify_cancelÖ  s    

z#Future.set_running_or_notify_cancelc          
   C   sN   | j �6 || _t| _x| jD ]}|j| ƒ qW | j jƒ  W d Q R X | jƒ  d S )N)r4   rZ   r
   r:   r@   r   rc   r`   )r   rh   rC   r   r   r   Ú
set_resultþ  s    zFuture.set_resultc          
   C   sN   | j �6 || _t| _x| jD ]}|j| ƒ qW | j jƒ  W d Q R X | jƒ  d S )N)r4   r[   r
   r:   r@   r    rc   r`   )r   rU   rC   r   r   r   Úset_exception  s    zFuture.set_exception)N)N)r   r   r   r   r`   rb   rd   r   r   rX   rg   rf   rh   rU   rj   rk   rl   r   r   r   r   rY   5  s   	

"(rY   c               @   s>   e Zd Zdd„ Zdddœdd„Zdd	d
„Zdd„ Zdd„ ZdS )ÚExecutorc             O   s
   t ƒ ‚d S )N)ÚNotImplementedError)r   re   r8   Úkwargsr   r   r   Úsubmit  s    	zExecutor.submitNr-   )rQ   Ú	chunksizec               sB   ˆd k	rˆt jƒ  ‰ ‡‡fdd„t|Ž D ƒ‰‡ ‡‡fdd„}|ƒ S )Nc                s   g | ]}ˆj ˆ f|žŽ ‘qS r   )rp   )r;   r8   )re   r   r   r   ú
<listcomp>?  s    z Executor.map.<locals>.<listcomp>c              3   sd   zFˆj ƒ  x8ˆrBˆd kr(ˆjƒ jƒ V  qˆjƒ jˆ tjƒ  ƒV  qW W d xˆD ]} | jƒ  qNW X d S )N)rP   rG   rh   rJ   rK   rd   )r   )rR   rA   rQ   r   r   Úresult_iteratorC  s     
z%Executor.map.<locals>.result_iterator)rJ   rK   Úzip)r   re   rQ   rq   Ú	iterablesrs   r   )rR   re   rA   r   rQ   r   Úmap&  s
    zExecutor.mapTc             C   s   d S )Nr   )r   rN   r   r   r   ÚshutdownR  s    zExecutor.shutdownc             C   s   | S )Nr   )r   r   r   r   r6   _  s    zExecutor.__enter__c             C   s   | j dd� dS )NT)rN   F)rw   )r   Úexc_typeZexc_valZexc_tbr   r   r   r9   b  s    zExecutor.__exit__)T)r   r   r   rp   rv   rw   r6   r9   r   r   r   r   rm     s
   ,
rm   )N)$Ú
__author__ÚcollectionsZloggingr   rJ   r   r   r   r   r   r   r   r	   r
   Z_FUTURE_STATESra   Z	getLoggerr^   r]   r   r   r   Úobjectr   r"   r)   r*   r/   rD   rI   rS   Ú
namedtuplerT   rN   rY   rm   r   r   r   r   Ú<module>   sR   

>1 d