3 \óRã @sPdZddlZddlZddlZddlZdZdZdZdZdZ dZ d Z d Z d Z e e e e e gZe d e d e de de diZejdƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd „d eƒZd!d"„Zd#d$„Zd/d%d&„Zejd'd(ƒZ defd)d*„Z!Gd+d,„d,eƒZ"Gd-d.„d.eƒZ#dS)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Úfinishedzconcurrent.futuresc@s eZdZdS)ÚErrorN)Ú__name__Ú __module__Ú __qualname__©rrú0/usr/lib64/python3.6/concurrent/futures/_base.pyr,src@s eZdZdS)ÚCancelledErrorN)rrrrrrrr0src@s eZdZdS)Ú TimeoutErrorN)rrrrrrrr4src@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú_WaitercCstjƒ|_g|_dS)N)Ú threadingZEventÚeventÚfinished_futures)ÚselfrrrÚ__init__:s z_Waiter.__init__cCs|jj|ƒdS)N)rÚappend)rÚfuturerrrÚ 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)rrrrrr r!rrrrr8srcs@eZdZ‡fdd„Z‡fdd„Z‡fdd„Z‡fdd„Z‡ZS) Ú_AsCompletedWaitercstt|ƒjƒtjƒ|_dS)N)Úsuperr"rrÚLockÚlock)r)Ú __class__rrrJsz_AsCompletedWaiter.__init__c s0|j� tt|ƒj|ƒ|jjƒWdQRXdS)N)r%r#r"rrÚset)rr)r&rrrNsz_AsCompletedWaiter.add_resultc s0|j� tt|ƒj|ƒ|jjƒWdQRXdS)N)r%r#r"r rr')rr)r&rrr Ssz _AsCompletedWaiter.add_exceptionc s0|j� tt|ƒj|ƒ|jjƒWdQRXdS)N)r%r#r"r!rr')rr)r&rrr!Xsz _AsCompletedWaiter.add_cancelled)rrrrrr r!Ú __classcell__rr)r&rr"Gs   r"cs4eZdZ‡fdd„Z‡fdd„Z‡fdd„Z‡ZS)Ú_FirstCompletedWaitercstƒj|ƒ|jjƒdS)N)r#rrr')rr)r&rrr`s z _FirstCompletedWaiter.add_resultcstƒj|ƒ|jjƒdS)N)r#r rr')rr)r&rrr ds z#_FirstCompletedWaiter.add_exceptioncstƒj|ƒ|jjƒdS)N)r#r!rr')rr)r&rrr!hs z#_FirstCompletedWaiter.add_cancelled)rrrrr r!r(rr)r&rr)]s  r)csHeZdZ‡fdd„Zdd„Z‡fdd„Z‡fdd„Z‡fd d „Z‡ZS) Ú_AllCompletedWaitercs$||_||_tjƒ|_tƒjƒdS)N)Únum_pending_callsÚstop_on_exceptionrr$r%r#r)rr+r,)r&rrros z_AllCompletedWaiter.__init__c Cs4|j�$|jd8_|js&|jjƒWdQRXdS)Né)r%r+rr')rrrrÚ_decrement_pending_callsusz,_AllCompletedWaiter._decrement_pending_callscstƒj|ƒ|jƒdS)N)r#rr.)rr)r&rrr{s z_AllCompletedWaiter.add_resultcs*tƒj|ƒ|jr|jjƒn|jƒdS)N)r#r r,rr'r.)rr)r&rrr s  z!_AllCompletedWaiter.add_exceptioncstƒj|ƒ|jƒdS)N)r#r!r.)rr)r&rrr!†s z!_AllCompletedWaiter.add_cancelled) rrrrr.rr r!r(rr)r&rr*ls    r*c@s$eZdZdd„Zdd„Zdd„ZdS)Ú_AcquireFuturescCst|td�|_dS)N)Úkey)ÚsortedÚidÚfutures)rr3rrrr�sz_AcquireFutures.__init__cCsx|jD]}|jjƒqWdS)N)r3Ú _conditionÚacquire)rrrrrÚ __enter__�s z_AcquireFutures.__enter__cGsx|jD]}|jjƒqWdS)N)r3r4Úrelease)rÚargsrrrrÚ__exit__”s z_AcquireFutures.__exit__N)rrrrr6r9rrrrr/Šsr/cCsˆ|tkrtƒ}nZ|tkr tƒ}nJtdd„|Dƒƒ}|tkrHt|dd�}n"|tkr^t|dd�}n td|ƒ‚x|D]}|j j |ƒqpW|S)Ncss|]}|jttgkVqdS)N)Ú_stater r )Ú.0Úfrrrú Ÿsz._create_and_install_waiters..T)r,FzInvalid return condition: %r) rr"rr)Úsumrr*rÚ ValueErrorÚ_waitersr)ÚfsÚ return_whenÚwaiterZ pending_countr<rrrÚ_create_and_install_waiters˜s  rDc csXxR|rR|d}x|D]}|j|ƒqW|j�|jj|ƒWdQRX~|jƒVqWdS)Nr-éÿÿÿÿ)Úremover4r@Úpop)rArCÚ ref_collectr<Z futures_setrrrÚ_yield_finished_futures®s  rIc csJ|dk r|tjƒ}t|ƒ}t|ƒ}t|ƒ�*tdd„|Dƒƒ}||}t|tƒ}WdQRXt|ƒ}z°t|||fd�EdHx”|�r|dkr’d}n(|tjƒ}|dkrºt dt|ƒ|fƒ‚|j j |ƒ|j �|j }g|_ |j jƒWdQRX|jƒt||||fd�EdHq~WWdx,|D]$}|j�|jj|ƒWdQRX�qWXdS)Ncss |]}|jttgkr|VqdS)N)r:r r )r;r<rrrr=Ýszas_completed..)rHrz%d (of %d) futures unfinished)ÚtimeÚ monotonicr'Úlenr/rDrÚlistrIrrÚwaitr%rÚclearÚreverser4r@rF) rAÚtimeoutÚend_timeZ total_futuresrr rCZ wait_timeoutr<rrrÚ as_completedÄs@     rSÚDoneAndNotDoneFuturesz done not_donecCsêt|ƒ�†tdd„|Dƒƒ}t|ƒ|}|tkr>|r>t||ƒS|tkrf|rftdd„|Dƒƒrft||ƒSt|ƒt|ƒkr€t||ƒSt||ƒ}WdQRX|jj |ƒx*|D]"}|j �|j j |ƒWdQRXq¦W|j |jƒt|t|ƒ|ƒS)Ncss |]}|jttgkr|VqdS)N)r:r r )r;r<rrrr=szwait..css(|] }|jƒ r|jƒdk r|VqdS)N)r Ú exception)r;r<rrrr=$s)r/r'rrTrÚanyrLrDrrNr4r@rFÚupdater)rArQrBÚdoneZnot_donerCr<rrrrNs"          rNc@s€eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z ddd„Z ddd„Z dd„Zdd„Zdd„ZdS) ÚFuturecCs,tjƒ|_t|_d|_d|_g|_g|_dS)N) rZ Conditionr4rr:Ú_resultÚ _exceptionr@Ú_done_callbacks)rrrrr8s  zFuture.__init__c CsBx<|jD]2}y ||ƒWqtk r8tjd|ƒYqXqWdS)Nz!exception calling callback for %r)r\Ú ExceptionÚLOGGERrU)rÚcallbackrrrÚ_invoke_callbacksAs   zFuture._invoke_callbacksc Cs†|j�v|jtkr`|jrz <%s at %#x state=%s returned %s>z<%s at %#x state=%s>) r4r:r r[r&rr2Ú_STATE_TO_DESCRIPTION_MAPrZ)rrrrÚ__repr__Hs" zFuture.__repr__c CsR|j�:|jttgkrdS|jttgkr,dSt|_|jjƒWdQRX|jƒdS)NFT)r4r:rr rr Ú notify_allr`)rrrrÚcancel\sz Future.cancelc Cs |j�|jttgkSQRXdS)N)r4r:rr )rrrrr oszFuture.cancelledc Cs|j� |jtkSQRXdS)N)r4r:r)rrrrr tszFuture.runningc Cs"|j�|jtttgkSQRXdS)N)r4r:rr r )rrrrrXysz Future.donecCs|jr|j‚n|jSdS)N)r[rZ)rrrrZ __get_result~szFuture.__get_resultc Cs>|j�&|jtttgkr(|jj|ƒdSWdQRX||ƒdS)N)r4r:rr r r\r)rÚfnrrrÚadd_done_callback„s  zFuture.add_done_callbackNc Csx|j�h|jttgkrtƒ‚n|jtkr0|jƒS|jj|ƒ|jttgkrRtƒ‚n|jtkrd|jƒStƒ‚WdQRXdS)N) r4r:rr rr Ú_Future__get_resultrNr)rrQrrrÚresult•s   z Future.resultc Cst|j�d|jttgkrtƒ‚n|jtkr.|jS|jj|ƒ|jttgkrPtƒ‚n|jtkr`|jStƒ‚WdQRXdS)N) r4r:rr rr r[rNr)rrQrrrrU´s   zFuture.exceptionc Cst|j�d|jtkr6t|_x|jD]}|j|ƒq WdS|jtkrJt|_dStj dt |ƒ|jƒt dƒ‚WdQRXdS)NFTz!Future %s in unexpected state: %szFuture in unexpected state) r4r:rr r@r!rrr^Zcriticalr2Ú RuntimeError)rrCrrrÚset_running_or_notify_cancelÖs   z#Future.set_running_or_notify_cancelc CsN|j�6||_t|_x|jD]}|j|ƒqW|jjƒWdQRX|jƒdS)N)r4rZr r:r@rrcr`)rrhrCrrrÚ set_resultþs zFuture.set_resultc CsN|j�6||_t|_x|jD]}|j|ƒqW|jjƒWdQRX|jƒdS)N)r4r[r r:r@r rcr`)rrUrCrrrÚ set_exception s zFuture.set_exception)N)N)rrrrr`rbrdr r rXrgrfrhrUrjrkrlrrrrrY5s   "( rYc@s>eZdZdd„Zdddœdd„Zdd d „Zd d „Zd d„ZdS)ÚExecutorcOs tƒ‚dS)N)ÚNotImplementedError)rrer8ÚkwargsrrrÚsubmits zExecutor.submitNr-)rQÚ chunksizecsBˆdk rˆtjƒ‰‡‡fdd„t|ŽDƒ‰‡‡‡fdd„}|ƒS)Ncsg|]}ˆjˆf|žŽ‘qSr)rp)r;r8)rerrrú ?sz Executor.map..c 3sdzFˆjƒx8ˆrBˆdkr(ˆjƒjƒVq ˆjƒjˆtjƒƒVq WWdxˆD] }|jƒqNWXdS)N)rPrGrhrJrKrd)r)rRrArQrrÚresult_iteratorCs  z%Executor.map..result_iterator)rJrKÚzip)rrerQrqÚ iterablesrsr)rRrerArrQrÚmap&s   z Executor.mapTcCsdS)Nr)rrNrrrÚshutdownRs zExecutor.shutdowncCs|S)Nr)rrrrr6_szExecutor.__enter__cCs|jdd�dS)NT)rNF)rw)rÚexc_typeZexc_valZexc_tbrrrr9bs zExecutor.__exit__)T)rrrrprvrwr6r9rrrrrms  , rm)N)$Ú __author__Ú collectionsZloggingrrJrrrrrrrr r Z_FUTURE_STATESraZ getLoggerr^r]rrrÚobjectrr"r)r*r/rDrIrSÚ namedtuplerTrNrYrmrrrrÚsR  >1d