U e5dY @spdZddlZddlZddlZddlZdZdZdZdZdZ dZ d Z d Z d Z e e e e e gZe d e d e de de diZedZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdd d eZGd!d"d"eZd#d$Zd%d&Zd3d'd(Ze d)d*Z!defd+d,Z"Gd-d.d.eZ#Gd/d0d0eZ$Gd1d2d2e%Z&dS)4z"Brian Quinlan (brian@sweetapp.com)NFIRST_COMPLETEDFIRST_EXCEPTION ALL_COMPLETED _AS_COMPLETEDPENDINGRUNNING CANCELLEDCANCELLED_AND_NOTIFIEDFINISHEDpendingrunning cancelledfinishedzconcurrent.futuresc@s eZdZdS)ErrorN__name__ __module__ __qualname__rr0/usr/lib64/python3.8/concurrent/futures/_base.pyr,src@s eZdZdS)CancelledErrorNrrrrrr0src@s eZdZdS) TimeoutErrorNrrrrrr4src@s eZdZdS)InvalidStateErrorNrrrrrr8src@s,eZdZddZddZddZddZd S) _WaitercCst|_g|_dSN) threadingZEventeventfinished_futuresselfrrr__init__>s z_Waiter.__init__cCs|j|dSrrappendrfuturerrr add_resultBsz_Waiter.add_resultcCs|j|dSrr!r#rrr add_exceptionEsz_Waiter.add_exceptioncCs|j|dSrr!r#rrr add_cancelledHsz_Waiter.add_cancelledN)rrrr r%r&r'rrrrr<srcs@eZdZfddZfddZfddZfddZZS) _AsCompletedWaitercstt|t|_dSr)superr(r rLocklockr __class__rrr Nsz_AsCompletedWaiter.__init__c s0|j tt|||jW5QRXdSr)r+r)r(r%rsetr#r,rrr%Rsz_AsCompletedWaiter.add_resultc s0|j tt|||jW5QRXdSr)r+r)r(r&rr.r#r,rrr&Wsz _AsCompletedWaiter.add_exceptionc s0|j tt|||jW5QRXdSr)r+r)r(r'rr.r#r,rrr'\sz _AsCompletedWaiter.add_cancelled)rrrr r%r&r' __classcell__rrr,rr(Ks   r(cs4eZdZfddZfddZfddZZS)_FirstCompletedWaitercst||jdSr)r)r%rr.r#r,rrr%ds z _FirstCompletedWaiter.add_resultcst||jdSr)r)r&rr.r#r,rrr&hs z#_FirstCompletedWaiter.add_exceptioncst||jdSr)r)r'rr.r#r,rrr'ls z#_FirstCompletedWaiter.add_cancelled)rrrr%r&r'r/rrr,rr0as  r0csHeZdZfddZddZfddZfddZfd d ZZS) _AllCompletedWaitercs$||_||_t|_tdSr)num_pending_callsstop_on_exceptionrr*r+r)r )rr2r3r,rrr ss z_AllCompletedWaiter.__init__c Cs4|j$|jd8_|js&|jW5QRXdS)N)r+r2rr.rrrr_decrement_pending_callsysz,_AllCompletedWaiter._decrement_pending_callscst||dSr)r)r%r5r#r,rrr%s z_AllCompletedWaiter.add_resultcs*t||jr|jn|dSr)r)r&r3rr.r5r#r,rrr&s  z!_AllCompletedWaiter.add_exceptioncst||dSr)r)r'r5r#r,rrr's z!_AllCompletedWaiter.add_cancelled) rrrr r5r%r&r'r/rrr,rr1ps    r1c@s$eZdZddZddZddZdS)_AcquireFuturescCst|td|_dS)N)key)sortedidfutures)rr:rrrr sz_AcquireFutures.__init__cCs|jD]}|jqdSr)r: _conditionacquirer#rrr __enter__s z_AcquireFutures.__enter__cGs|jD]}|jqdSr)r:r;release)rargsr$rrr__exit__s z_AcquireFutures.__exit__N)rrrr r=r@rrrrr6sr6cCs|tkrt}nZ|tkr t}nJtdd|D}|tkrHt|dd}n"|tkr^t|dd}n td||D]}|j |qn|S)Ncss|]}|jttfkVqdSr_stater r .0frrr sz._create_and_install_waiters..T)r3FzInvalid return condition: %r) rr(rr0sumrr1r ValueError_waitersr")fs return_whenwaiterZ pending_countrErrr_create_and_install_waiterss rMc csP|rL|d}|D]}||q|j|j|W5QRX~|VqdS)N)remover;rIpop)rJrL ref_collectrEZ futures_setrrr_yield_finished_futuress  rRc csB|dk r|t}t|}t|}t|*tdd|D}||}t|t}W5QRXt|}zt |||fdEdH|r|dkrd}n(|t}|dkrt dt||f|j ||j|j}g|_|j W5QRX|t ||||fdEdHq|W5|D]$}|j|j |W5QRXqXdS)Ncss |]}|jttfkr|VqdSrrArCrrrrFszas_completed..)rQrz%d (of %d) futures unfinished)time monotonicr.lenr6rMrlistr;rIrOrRrrwaitr+rclearreverse) rJtimeoutend_timeZ total_futuresrr rLrEZ wait_timeoutrrr as_completedsL     r\DoneAndNotDoneFuturesz done not_donec Cs t|tdd|D}t||}|tkrJ|rJt||W5QRS|tkr~|r~tdd|Dr~t||W5QRSt|t|krt||W5QRSt||}W5QRX|j ||D]"}|j |j |W5QRXq| |jt|t||S)Ncss |]}|jttfkr|VqdSrrArCrrrrF!szwait..css&|]}|s|dk r|VqdSr)r exceptionrCrrrrF(s )r6r.rr]ranyrUrMrrWr;rIrOupdater)rJrZrKdoneZnot_donerLrErrrrWs"      rWc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dddZ dddZ ddZddZddZdS) FuturecCs,t|_t|_d|_d|_g|_g|_dSr) rZ Conditionr;rrB_result _exceptionrI_done_callbacksrrrrr <s  zFuture.__init__c Cs>|jD]2}z ||Wqtk r6td|YqXqdSNz!exception calling callback for %r)re ExceptionLOGGERr^)rcallbackrrr_invoke_callbacksEs   zFuture._invoke_callbacksc Cs|j|jtkrx|jrHd|jjt|t|j|jjjfW5QRSd|jjt|t|j|jjjfW5QRSd|jjt|t|jfW5QRSQRXdS)Nz<%s at %#x state=%s raised %s>z <%s at %#x state=%s returned %s>z<%s at %#x state=%s>) r;rBr rdr-rr9_STATE_TO_DESCRIPTION_MAPrcrrrr__repr__Ls( zFuture.__repr__c Csf|jN|jttfkr$W5QRdS|jttfkr@W5QRdSt|_|jW5QRX|dS)NFT)r;rBrr rr notify_allrjrrrrcancel`sz Future.cancelc Cs,|j|jttfkW5QRSQRXdSr)r;rBrr rrrrr sszFuture.cancelledc Cs(|j|jtkW5QRSQRXdSr)r;rBrrrrrr xszFuture.runningc Cs.|j|jtttfkW5QRSQRXdSr)r;rBrr r rrrrra}sz Future.donecCs$|jrz |jW5d}Xn|jSdSr)rdrcrrrrZ __get_results  zFuture.__get_resultc Csn|j0|jtttfkr2|j|W5QRdSW5QRXz ||Wn tk rht d|YnXdSrf) r;rBrr r rer"rgrhr^)rfnrrradd_done_callbacks   zFuture.add_done_callbackNc Csz|j|jttfkr tn"|jtkrB|W5QRWZS|j||jttfkrdtn(|jtkr|W5QRWStW5QRXW5d}XdSr) r;rBrr rr _Future__get_resultrWrrrZrrrresults   z Future.resultc Cs|j||jttfkrtn|jtkr:|jW5QRS|j||jttfkr\tn"|jtkrx|jW5QRStW5QRXdSr) r;rBrr rr rdrWrrrrrrr^s   zFuture.exceptionc Cs|jt|jtkrddl}|jdtddntdt|dtdS) Nz:descriptor 'submit' of 'Executor' object needs an argumentrorz.Passing 'fn' as keyword argument is deprecated) stacklevelz6submit expected at least 1 positional argument, got %dr4)rU TypeErrorwarningswarnDeprecationWarningNotImplementedError)r?kwargsr~rrrsubmit.s   zExecutor.submitz($self, fn, /, *args, **kwargs)Nr4)rZ chunksizecsBdk rtfddt|Dfdd}|S)Ncsg|]}jf|qSr)r)rDr?)rorrr `sz Executor.map..c 3s\zBr@dkr&Vq tVq W5D] }|qHXdSr)rnrYrPrsrSrT)r$)r[rJrZrrresult_iteratordsz%Executor.map..result_iterator)rSrTzip)rrorZr iterablesrr)r[rorJrrZrmapGs   z Executor.mapTcCsdSrr)rrWrrrshutdownss zExecutor.shutdowncCs|Srrrrrrr=szExecutor.__enter__cCs|jdddS)NT)rWF)r)rexc_typeZexc_valZexc_tbrrrr@s zExecutor.__exit__)T) rrrr__text_signature__rrr=r@rrrrrz+s , rzc@s eZdZdS)BrokenExecutorNrrrrrrsr)N)' __author__ collectionsZloggingrrSrrrrrrrr r Z_FUTURE_STATESrkZ getLoggerrhrgrrrrobjectrr(r0r1r6rMrRr\ namedtupler]rWrbrzrtrrrrrsh   >1s]