U :eY @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__rr=/usr/local/python38/lib/python3.8/concurrent/futures/_base.pyr,src@s eZdZdS)CancelledErrorNrrrrrr0src@s eZdZdS) TimeoutErrorNrrrrrr4src@s eZdZdS)InvalidStateErrorNrrrrrr8src@s,eZdZddZddZddZddZd S) _WaitercCst|_g|_dSN) threadingEventeventfinished_futuresselfrrr__init__>s z_Waiter.__init__cCs|j|dSrrappendr futurerrr 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(r0rrr-rr1as  r1csHeZdZfddZddZfddZfddZfd d ZZS) _AllCompletedWaitercs$||_||_t|_tdSr)num_pending_callsstop_on_exceptionrr+r,r*r!)r r3r4r-rrr!ss z_AllCompletedWaiter.__init__c Cs4|j$|jd8_|js&|jW5QRXdS)N)r,r3rr/rrrr_decrement_pending_callsysz,_AllCompletedWaiter._decrement_pending_callscst||dSr)r*r&r6r$r-rrr&s z_AllCompletedWaiter.add_resultcs*t||jr|jn|dSr)r*r'r4rr/r6r$r-rrr's  z!_AllCompletedWaiter.add_exceptioncst||dSr)r*r(r6r$r-rrr(s z!_AllCompletedWaiter.add_cancelled) rrrr!r6r&r'r(r0rrr-rr2ps    r2c@s$eZdZddZddZddZdS)_AcquireFuturescCst|td|_dS)N)key)sortedidfutures)r r;rrrr!sz_AcquireFutures.__init__cCs|jD]}|jqdSr)r; _conditionacquirer$rrr __enter__s z_AcquireFutures.__enter__cGs|jD]}|jqdSr)r;r<release)r argsr%rrr__exit__s z_AcquireFutures.__exit__N)rrrr!r>rArrrrr7sr7cCs|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)r4FzInvalid return condition: %r) rr)rr1sumrr2r ValueError_waitersr#)fs return_whenwaiter pending_countrFrrr_create_and_install_waiterss rOc csP|rL|d}|D]}||q|j|j|W5QRX~|VqdS)N)remover<rJpop)rKrM ref_collectrF futures_setrrr_yield_finished_futuress  rUc 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|VqdSrrBrDrrrrGszas_completed..)rSrz%d (of %d) futures unfinished)time monotonicr/lenr7rOrlistr<rJrQrUrrwaitr,rclearreverse) rKtimeoutend_time total_futuresrr rMrF wait_timeoutrrr as_completedsL     raDoneAndNotDoneFuturesz 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|VqdSrrBrDrrrrG!szwait..css&|]}|s|dk r|VqdSr)r exceptionrDrrrrG(s )r7r/rrbranyrXrOrrZr<rJrQupdater)rKr]rLdonenot_donerMrFrrrrZs"      rZc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dddZ dddZ ddZddZddZdS) FuturecCs,t|_t|_d|_d|_g|_g|_dSr) r Conditionr<rrC_result _exceptionrJ_done_callbacksrrrrr!<s  zFuture.__init__c Cs>|jD]2}z ||Wqtk r6td|YqXqdSNz!exception calling callback for %r)rl ExceptionLOGGERrc)r callbackrrr_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<rCr rkr.rr:_STATE_TO_DESCRIPTION_MAPrjrrrr__repr__Ls( zFuture.__repr__c Csf|jN|jttfkr$W5QRdS|jttfkr@W5QRdSt|_|jW5QRX|dS)NFT)r<rCrr rr notify_allrqrrrrcancel`sz Future.cancelc Cs,|j|jttfkW5QRSQRXdSr)r<rCrr rrrrr sszFuture.cancelledc Cs(|j|jtkW5QRSQRXdSr)r<rCrrrrrr xszFuture.runningc Cs.|j|jtttfkW5QRSQRXdSr)r<rCrr r rrrrrf}sz Future.donecCs$|jrz |jW5d}Xn|jSdSr)rkrjrrrr __get_results  zFuture.__get_resultc Csn|j0|jtttfkr2|j|W5QRdSW5QRXz ||Wn tk rht d|YnXdSrm) r<rCrr r rlr#rnrorc)r fnrrradd_done_callbacks   zFuture.add_done_callbackNc Csz|j|jttfkr tn"|jtkrB|W5QRWZS|j||jttfkrdtn(|jtkr|W5QRWStW5QRXW5d}XdSr) r<rCrr rr _Future__get_resultrZrr r]rrrresults   z Future.resultc Cs|j||jttfkrtn|jtkr:|jW5QRS|j||jttfkr\tn"|jtkrx|jW5QRStW5QRXdSr) r<rCrr rr rkrZrrzrrrrcs   zFuture.exceptionc Cs|jt|jtkrddl}|jdtddntdt|dtdS) Nz:descriptor 'submit' of 'Executor' object needs an argumentrwrz.Passing 'fn' as keyword argument is deprecated) stacklevelz6submit expected at least 1 positional argument, got %dr5)rX TypeErrorwarningswarnDeprecationWarningNotImplementedError)r@kwargsrrrrsubmit.s   zExecutor.submitz($self, fn, /, *args, **kwargs)Nr5)r] chunksizecsBdk rtfddt|Dfdd}|S)Ncsg|]}jf|qSr)r)rEr@)rwr rr `sz Executor.map..c 3s\zBr@dkr&Vq tVq W5D] }|qHXdSr)rur\rRr{rVrW)r%)r^rKr]rrresult_iteratordsz%Executor.map..result_iterator)rVrWzip)r rwr]r iterablesrr)r^rwrKr r]rmapGs   z Executor.mapTcCsdSrr)r rZrrrshutdownss zExecutor.shutdowncCs|Srrrrrrr>szExecutor.__enter__cCs|jdddS)NT)rZF)r)r exc_typeexc_valexc_tbrrrrAs zExecutor.__exit__)T) rrrr__text_signature__rrr>rArrrrr+s , rc@s eZdZdS)BrokenExecutorNrrrrrrsr)N)' __author__ collectionsloggingrrVrrrrrrrr r _FUTURE_STATESrr getLoggerrornrrrrobjectrr)r1r2r7rOrUra namedtuplerbrZrhrr}rrrrrsh   >1s]