]:N @sdZddlZddlZddlZddlZdZdZdZdZdZ dZ d Z d Z d Z e e e e e gZe d e d e de de diZejdZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZd!d"Zdd#d$Zejd%d&Zded'd(Z Gd)d*d*eZ!Gd+d,d,eZ"dS)-z"Brian Quinlan (brian@sweetapp.com)NFIRST_COMPLETEDFIRST_EXCEPTION ALL_COMPLETED _AS_COMPLETEDPENDINGRUNNING CANCELLEDCANCELLED_AND_NOTIFIEDFINISHEDpendingrunning cancelledfinishedzconcurrent.futuresc@seZdZdS)ErrorN)__name__ __module__ __qualname__rr*/opt/alt/python35/lib64/python3.5/_base.pyr,s rc@seZdZdS)CancelledErrorN)rrrrrrrr0s rc@seZdZdS) TimeoutErrorN)rrrrrrrr4s rc@s@eZdZddZddZddZddZd S) _WaitercCstj|_g|_dS)N) threadingEventeventfinished_futures)selfrrr__init__:sz_Waiter.__init__cCs|jj|dS)N)rappend)rfuturerrr add_result>sz_Waiter.add_resultcCs|jj|dS)N)rr)rrrrr add_exceptionAsz_Waiter.add_exceptioncCs|jj|dS)N)rr)rrrrr add_cancelledDsz_Waiter.add_cancelledN)rrrrr r!r"rrrrr8s    rcsXeZdZfddZfddZfddZfddZS) _AsCompletedWaitercs&tt|jtj|_dS)N)superr#rrLocklock)r) __class__rrrJsz_AsCompletedWaiter.__init__c s8|j(tt|j||jjWdQRXdS)N)r&r$r#r rset)rr)r'rrr Ns z_AsCompletedWaiter.add_resultc s8|j(tt|j||jjWdQRXdS)N)r&r$r#r!rr()rr)r'rrr!Ss z _AsCompletedWaiter.add_exceptionc s8|j(tt|j||jjWdQRXdS)N)r&r$r#r"rr()rr)r'rrr"Xs z _AsCompletedWaiter.add_cancelled)rrrrr r!r"rr)r'rr#Gs r#csFeZdZfddZfddZfddZS)_FirstCompletedWaitercs!tj||jjdS)N)r$r rr()rr)r'rrr `sz _FirstCompletedWaiter.add_resultcs!tj||jjdS)N)r$r!rr()rr)r'rrr!dsz#_FirstCompletedWaiter.add_exceptioncs!tj||jjdS)N)r$r"rr()rr)r'rrr"hsz#_FirstCompletedWaiter.add_cancelled)rrrr r!r"rr)r'rr)]s r)csdeZdZfddZddZfddZfddZfd d ZS) _AllCompletedWaitercs2||_||_tj|_tjdS)N)num_pending_callsstop_on_exceptionrr%r&r$r)rr+r,)r'rrros  z_AllCompletedWaiter.__init__c Cs:|j*|jd8_|js/|jjWdQRXdS)N)r&r+rr()rrrr_decrement_pending_callsus  z,_AllCompletedWaiter._decrement_pending_callscstj||jdS)N)r$r r.)rr)r'rrr {sz_AllCompletedWaiter.add_resultcs7tj||jr)|jjn |jdS)N)r$r!r,rr(r.)rr)r'rrr!s z!_AllCompletedWaiter.add_exceptioncstj||jdS)N)r$r"r.)rr)r'rrr"sz!_AllCompletedWaiter.add_cancelled)rrrrr.r r!r"rr)r'rr*ls  r*c@s4eZdZddZddZddZdS)_AcquireFuturescCst|dt|_dS)Nkey)sortedidfutures)rr3rrrrsz_AcquireFutures.__init__cCs%x|jD]}|jjq WdS)N)r3 _conditionacquire)rrrrr __enter__sz_AcquireFutures.__enter__cGs%x|jD]}|jjq WdS)N)r3r4release)rargsrrrr__exit__sz_AcquireFutures.__exit__N)rrrrr6r9rrrrr/s   r/cCs|tkrt}n|tkr0t}nktdd|D}|tkrjt|dd}n1|tkrt|dd}ntd|x|D]}|j j |qW|S)Ncss$|]}|jttgkVqdS)N)_stater r ).0frrr sz._create_and_install_waiters..r,TFzInvalid return condition: %r) rr#rr)sumrr*r ValueError_waitersr)fs return_whenwaiter pending_countr<rrr_create_and_install_waiterss       rEc csx|dk r|tj}t|}t|7tdd|D}||}t|t}WdQRXz|EdHx|r<|dkrd}n>|tj}|dkrtdt|t|f|jj||j $|j }g|_ |jj WdQRXx |D]}|V|j |qWq}WWdx/|D]'}|j |jj |WdQRXqHWXdS)Ncss*|] }|jttgkr|VqdS)N)r:r r )r;r<rrrr=szas_completed..rz%d (of %d) futures unfinished)timer(r/rErrlenrwaitr&rclearremover4r@) rAtimeoutend_timerr rC wait_timeoutrr<rrr as_completeds:               rNDoneAndNotDoneFuturesz done not_donecCs1t|tdd|D}t||}|tkrU|rUt||S|tkr|rtdd|Drt||St|t|krt||St||}WdQRX|jj |x/|D]'}|j |j j |WdQRXqW|j |jt|t||S)Ncss*|] }|jttgkr|VqdS)N)r:r r )r;r<rrrr=szwait..css4|]*}|j r|jdk r|VqdS)N)r exception)r;r<rrrr= s)r/r(rrOranyrGrErrHr4r@rJupdater)rArKrBdonenot_donerCr<rrrrHs"      rHc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dddZ dddZ ddZddZddZdS)FuturecCs@tj|_t|_d|_d|_g|_g|_dS)N) r Conditionr4rr:_result _exceptionr@_done_callbacks)rrrrrs     zFuture.__init__c CsKxD|jD]9}y||Wq tk rBtjd|Yq Xq WdS)Nz!exception calling callback for %r)rY ExceptionLOGGERrP)rcallbackrrr_invoke_callbacks&s  zFuture._invoke_callbacksc Cs|j|jtkr|jrRd|jjt|t|j|jjjfSd|jjt|t|j|jjjfSd|jjt|t|jfSWdQRXdS)Nz<%s at %#x state=%s raised %s>z <%s at %#x state=%s returned %s>z<%s at %#x state=%s>) r4r:r rXr'rr2_STATE_TO_DESCRIPTION_MAPrW)rrrr__repr__-s"          zFuture.__repr__c Csg|jM|jttgkr#dS|jttgkr<dSt|_|jjWdQRX|jdS)NFT)r4r:rr rr notify_allr])rrrrcancelAs   z Future.cancelc Cs(|j|jttgkSWdQRXdS)N)r4r:rr )rrrrr Ts zFuture.cancelledc Cs"|j|jtkSWdQRXdS)N)r4r:r)rrrrr Ys zFuture.runningc Cs+|j|jtttgkSWdQRXdS)N)r4r:rr r )rrrrrS^s z Future.donecCs |jr|jn|jSdS)N)rXrW)rrrr __get_resultcs  zFuture.__get_resultc CsK|j1|jtttgkr6|jj|dSWdQRX||dS)N)r4r:rr r rYr)rfnrrradd_done_callbackis  zFuture.add_done_callbackNc Cs|j|jttgkr+tn|jtkrD|jS|jj||jttgkrutn"|jtkr|jStWdQRXdS)N) r4r:rr rr _Future__get_resultrHr)rrKrrrresultzs     z Future.resultc Cs|j|jttgkr+tn|jtkrA|jS|jj||jttgkrrtn|jtkr|jStWdQRXdS)N) r4r:rr rr rXrHr)rrKrrrrPs   zFuture.exceptionc Cs|j|jtkrGt|_x|jD]}|j|q,WdS|jtkrct|_dStj dt ||jt dWdQRXdS)NFTz!Future %s in unexpected state: %szFuture in unexpected state) r4r:rr r@r"rrr[criticalr2 RuntimeError)rrCrrrset_running_or_notify_cancels      z#Future.set_running_or_notify_cancelc Cs_|jE||_t|_x|jD]}|j|q&W|jjWdQRX|jdS)N)r4rWr r:r@r r`r])rrfrCrrr set_results   zFuture.set_resultc Cs_|jE||_t|_x|jD]}|j|q&W|jjWdQRX|jdS)N)r4rXr r:r@r!r`r])rrPrCrrr set_exceptions   zFuture.set_exception)rrrrr]r_rar r rSrerdrfrPrirjrkrrrrrUs         " ( rUc@s[eZdZddZddddddZd d d Zd d ZddZdS)ExecutorcOs tdS)N)NotImplementedError)rrcr8kwargsrrrsubmits zExecutor.submitrKN chunksizer-cs]dk rtjfddt|Dfdd}|S)Ncs"g|]}j|qSr)ro)r;r8)rcrrr $s z Executor.map..c 3sjzGx@D]8}dkr*|jVq |jtjVq WWdxD]}|jqQWXdS)N)rfrFra)r)rLrArKrrresult_iterator(s    z%Executor.map..result_iterator)rFzip)rrcrKrp iterablesrrr)rLrcrArrKrmap s  " z Executor.mapTcCsdS)Nr)rrHrrrshutdown4s zExecutor.shutdowncCs|S)Nr)rrrrr6AszExecutor.__enter__cCs|jdddS)NrHTF)rv)rexc_typeexc_valexc_tbrrrr9DszExecutor.__exit__)rrrrorurvr6r9rrrrrls  ) rl)# __author__ collectionsloggingrrFrrrrrrrr r _FUTURE_STATESr^ getLoggerr[rZrrrobjectrr#r)r*r/rErN namedtuplerOrHrUrlrrrrsN       : 1