U e5dzn@sdZddlZddlZddlmZddlZddlmZddlZddl Zddl m Z ddl Z ddl Z ddlmZddlZddlZddlZe ZdaGdd d Zd d Zd Zd ZGdddeZGdddZddZGdddeZGdddeZ GdddeZ!Gddde Z"ddZ#ddZ$d0d d!Z%d"d#Z&d$d%Z'd&d'Z(da)da*d(d)Z+d*d+Z,Gd,d-d-ej-Z.Gd.d/d/ej/Z0e1edS)1z"Brian Quinlan (brian@sweetapp.com)N)_base)Full)Queue)partialFc@s,eZdZddZddZddZddZd S) _ThreadWakeupcCstjdd\|_|_dS)NF)Zduplex)mpZPipe_reader_writerselfr 2/usr/lib64/python3.8/concurrent/futures/process.py__init__Rsz_ThreadWakeup.__init__cCs|j|jdSN)r closerr r r r rUs z_ThreadWakeup.closecCs|jddS)N)r Z send_bytesr r r r wakeupYsz_ThreadWakeup.wakeupcCs|jr|jqdSr)rZpollZ recv_bytesr r r r clear\s z_ThreadWakeup.clearN)__name__ __module__ __qualname__rrrrr r r r rQsrcCs@datt}|D]\}}|q|D]\}}|q*dSNT)_global_shutdownlist_threads_wakeupsitemsrjoin)r_ thread_wakeuptr r r _python_exitas     r =c@seZdZddZddZdS)_RemoteTracebackcCs ||_dSrtb)r r%r r r rzsz_RemoteTraceback.__init__cCs|jSrr$r r r r __str__|sz_RemoteTraceback.__str__N)rrrrr&r r r r r#ysr#c@seZdZddZddZdS)_ExceptionWithTracebackcCs0tt|||}d|}||_d||_dS)Nz """ %s""") tracebackformat_exceptiontyperexcr%)r r,r%r r r rs z _ExceptionWithTraceback.__init__cCst|j|jffSr) _rebuild_excr,r%r r r r __reduce__sz"_ExceptionWithTraceback.__reduce__N)rrrrr.r r r r r'sr'cCst||_|Sr)r# __cause__)r,r%r r r r-s r-c@seZdZddZdS) _WorkItemcCs||_||_||_||_dSr)futurefnargskwargs)r r1r2r3r4r r r rsz_WorkItem.__init__Nrrrrr r r r r0sr0c@seZdZdddZdS) _ResultItemNcCs||_||_||_dSr)work_id exceptionresult)r r7r8r9r r r rsz_ResultItem.__init__)NNr5r r r r r6sr6c@seZdZddZdS) _CallItemcCs||_||_||_||_dSr)r7r2r3r4)r r7r2r3r4r r r rsz_CallItem.__init__Nr5r r r r r:sr:cs*eZdZdfdd ZfddZZS) _SafeQueuercs||_tj||ddS)N)ctx)pending_work_itemssuperr)r max_sizer<r= __class__r r rsz_SafeQueue.__init__cslt|trZtt|||j}tdd||_ |j |j d}|dk rh|j |nt||dS)Nz """ {}"""r() isinstancer:r)r*r+ __traceback__r#formatrr/r=popr7r1 set_exceptionr>_on_queue_feeder_error)r eobjr% work_itemr@r r rGs z!_SafeQueue._on_queue_feeder_error)r)rrrrrG __classcell__r r r@r r;sr;cgs,t|}tt||}|s dS|VqdSr)ziptuple itertoolsislice) chunksize iterablesitchunkr r r _get_chunkss rTcsfdd|DS)Ncsg|] }|qSr r ).0r3r2r r sz"_process_chunk..r )r2rSr rVr _process_chunks rXc Cs^z|t|||dWn@tk rX}z"t||j}|t||dW5d}~XYnXdS)N)r9r8r8)putr6 BaseExceptionr'rC) result_queuer7r9r8rHr,r r r _sendback_results   r]c Cs|dk rtk r}z t ||j }t ||j|dW5d}~XYnXt ||j|d~~qdfdd}fdd}|j} |j} | | g} t||ddD} tj| | } d}d}| | krz| }d}Wqtk r}zt t |||j }W5d}~XYqXn| | krd}d}| |rl|dk rd _ d_dtd }|dk r td d |d |_|D]\}}|j|~q(| D]}|qR|dSt|tr|}|s|dSnL|dk r||jd}|dk r|jr|j|jn|j|j~~||r4z&dk rd_|s|WdSWntk r2YnXdq2dS)NcstpdkpjSr)r_shutdown_threadr )executorr r shutting_down@s z/_queue_management_worker..shutting_downc stddD}|}d}||kr|dkrt||D]6}zd|d7}Wq:tk rnYqrYq:Xq:tddD}qD] }|qdS)Ncss|]}|VqdSrZis_aliverUpr r r FszD_queue_management_worker..shutdown_worker..rr!css|]}|VqdSrrnror r r rqRs)sumvaluesrangeZ put_nowaitrrr)Zn_children_aliveZn_children_to_stopZn_sentinels_sentirp)rd processesr r shutdown_workerDs   z1_queue_management_worker..shutdown_workercSsg|] }|jqSr )sentinelror r r rWisz,_queue_management_worker..TFzKA child process terminated abruptly, the process pool is not usable anymorez^A process in the process pool was terminated abruptly while the future was running or pending.z ''' r(z''')rrjrsrZ connectionwaitZrecvr[r)r*r+rCr_brokenrkBrokenProcessPoolr#rr/rr1rFZ terminaterBintrEr7r8Z set_resultr9r)Zexecutor_referencervr=Zwork_ids_queuerdr\rrmrwZ result_readerZ wakeup_readerZreadersZworker_sentinelsZreadycauseZ is_brokenZ result_itemrHZbper7rJrpr )rdrlrvr _queue_management_worker"s  (          r~c Csjtrtrttdaztd}Wnttfk r<YdSX|dkrJdS|dkrVdSd|attdS)NTSC_SEM_NSEMS_MAXz@system provides too few semaphores (%d available, 256 necessary))_system_limits_checked_system_limitedNotImplementedErrorrbsysconfAttributeError ValueError)Z nsems_maxr r r _check_system_limitss rccs&|D]}||r|VqqdSr)reverserE)iterableZelementr r r _chain_from_iterable_of_listssrc@s eZdZdS)r{N)rrrr r r r r{sr{csteZdZdddZddZddZd d Zejjj e_ ejjj e_ dd d fd d Z dddZ ejj j e _ Z S)ProcessPoolExecutorNr cCst|dkr6tpd|_tjdkrntt|j|_n8|dkrHtdn tjdkrh|tkrhtdt||_|dkr~t }||_ |dk rt |st d||_||_d|_i|_d|_t|_d|_d|_i|_|jt}t||j |jd|_d |j_||_t |_!t"|_#dS) Nr!Zwin32rz"max_workers must be greater than 0zmax_workers must be <= zinitializer must be a callableF)r?r<r=T)$rrb cpu_count _max_workerssysplatformmin_MAX_WINDOWS_WORKERSrrZ get_context _mp_contextcallable TypeError _initializer _initargs_queue_management_thread _processesrk threadingZLock_shutdown_lockrz _queue_count_pending_work_itemsEXTRA_QUEUED_CALLSr; _call_queueZ _ignore_epipeZ SimpleQueue _result_queuerir _work_idsr_queue_management_thread_wakeup)r Z max_workersZ mp_contextrerfZ queue_sizer r r rsP        zProcessPoolExecutor.__init__c Csv|jdkrr|jfdd}|tjtt|||j|j |j |j |j |jfdd|_d|j_ |j|jt|j<dS)NcSstjd|dS)Nz?Executor collected: triggering callback for QueueManager wakeup)rutildebugr)rrr r r weakref_cbBs zFProcessPoolExecutor._start_queue_management_thread..weakref_cbZQueueManagerThread)targetr3nameT)rr_adjust_process_countrZThreadr~weakrefrefrrrrrZdaemonstartr)r rr r r _start_queue_management_thread=s(     z2ProcessPoolExecutor._start_queue_management_threadcCsPtt|j|jD]8}|jjt|j|j|j |j fd}| ||j|j <qdS)N)rr3) rtlenrrrZProcessrhrrrrrpid)r rrpr r r rXsz)ProcessPoolExecutor._adjust_process_countc Os t|dkr|^}}}nV|s&tdnHd|krZ|d}|^}}ddl}|jdtddntdt|d|j|jrt|j|j rt d t rt d t }t||||}||j|j<|j|j|jd7_|j||W5QRSQRXdS) NzEdescriptor 'submit' of 'ProcessPoolExecutor' object needs an argumentr2rz.Passing 'fn' as keyword argument is deprecated) stacklevelz6submit expected at least 1 positional argument, got %dr!z*cannot schedule new futures after shutdownz6cannot schedule new futures after interpreter shutdown)rrrEwarningswarnDeprecationWarningrrzr{rk RuntimeErrorrrZFuturer0rrrrZrrr)r3r4r r2rfwr r r submitcs<        zProcessPoolExecutor.submitr!)timeoutrPcs:|dkrtdtjtt|t|d|i|d}t|S)Nr!zchunksize must be >= 1.rP)r)rr>maprrXrTr)r r2rrPrQZresultsr@r r rs zProcessPoolExecutor.mapTc Cs|j d|_W5QRX|jr6|j|r6|jd|_|jdk rd|j|r^|jd|_d|_ d|_ |jr|jd|_dSr) rrkrrrrrrZ join_threadrr)r ryr r r shutdowns"      zProcessPoolExecutor.shutdown)NNNr )T)rrrrrrrrExecutor__text_signature____doc__rrrKr r r@r rs K $   r)NN)2 __author__atexitrbZconcurrent.futuresrrirZmultiprocessingrZmultiprocessing.connectionZmultiprocessing.queuesrrr functoolsrrNrr)WeakKeyDictionaryrrrr rr Exceptionr#r'r-objectr0r6r:r;rTrXr]rhrjr~rrrrZBrokenExecutorr{rrregisterr r r r .sT        )&! P