U e5dznã@s�dZddlZddlZddlmZddlZddlmZddlZddl Zddl m Z ddl Z ddl Z ddlmZddlZddlZddlZe  ¡ZdaGdd „d ƒZd d „Zd Zd ZGdd„deƒZGdd„dƒZdd„ZGdd„deƒZGdd„deƒZ Gdd„deƒZ!Gdd„de ƒZ"dd„Z#dd„Z$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/ƒZ0e 1e¡dS)1z"Brian Quinlan (brian@sweetapp.com)éN)Ú_base)ÚFull)ÚQueue)ÚpartialFc@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú _ThreadWakeupcCstjdd�\|_|_dS)NF)Zduplex)ÚmpZPipeÚ_readerÚ_writer©Úself©r ú2/usr/lib64/python3.8/concurrent/futures/process.pyÚ__init__Rsz_ThreadWakeup.__init__cCs|j ¡|j ¡dS©N)r Úcloserr r r r rUs z_ThreadWakeup.closecCs|j d¡dS)Nó)r Z send_bytesr r r r ÚwakeupYsz_ThreadWakeup.wakeupcCs|j ¡r|j ¡qdSr)rZpollZ recv_bytesr r r r Úclear\s z_ThreadWakeup.clearN)Ú__name__Ú __module__Ú __qualname__rrrrr r r r rQsrcCs@datt ¡ƒ}|D]\}}| ¡q|D]\}}| ¡q*dS©NT)Ú_global_shutdownÚlistÚ_threads_wakeupsÚitemsrÚjoin)rÚ_Ú thread_wakeupÚtr r r Ú _python_exitas     r éé=c@seZdZdd„Zdd„ZdS)Ú_RemoteTracebackcCs ||_dSr©Útb)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@seZdZdd„Zdd„ZdS)Ú_ExceptionWithTracebackcCs0t t|ƒ||¡}d |¡}||_d||_dS)NÚz """ %s""")Ú tracebackÚformat_exceptionÚtyperÚexcr%)r r,r%r r r r€s 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@seZdZdd„ZdS)Ú _WorkItemcCs||_||_||_||_dSr)ÚfutureÚfnÚargsÚkwargs)r r1r2r3r4r r r r�sz_WorkItem.__init__N©rrrrr r r r r0Œsr0c@seZdZddd„ZdS)Ú _ResultItemNcCs||_||_||_dSr)Úwork_idÚ exceptionÚresult)r r7r8r9r r r r”sz_ResultItem.__init__)NNr5r r r r r6“sr6c@seZdZdd„ZdS)Ú _CallItemcCs||_||_||_||_dSr)r7r2r3r4)r r7r2r3r4r r r ršsz_CallItem.__init__Nr5r r r r r:™sr:cs*eZdZd‡fdd„ Z‡fdd„Z‡ZS)Ú _SafeQueuercs||_tƒj||d�dS)N)Úctx)Úpending_work_itemsÚsuperr)r Úmax_sizer<r=©Ú __class__r r r£sz_SafeQueue.__init__cslt|tƒrZt t|ƒ||j¡}td d |¡¡ƒ|_ |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 ÚeÚobjr%Ú work_itemr@r r rG§s z!_SafeQueue._on_queue_feeder_error)r)rrrrrGÚ __classcell__r r r@r r;¡sr;cgs,t|Ž}tt ||¡ƒ}|s dS|VqdSr)ÚzipÚtupleÚ itertoolsÚislice)Ú chunksizeÚ iterablesÚitÚchunkr r r Ú _get_chunks´s rTcs‡fdd„|DƒS)Ncsg|] }ˆ|Ž‘qSr r )Ú.0r3©r2r r Ú Æsz"_process_chunk..r )r2rSr rVr Ú_process_chunk½s rXc Cs^z| t|||d�¡Wn@tk rX}z"t||jƒ}| t||d�¡W5d}~XYnXdS)N)r9r8©r8)Úputr6Ú BaseExceptionr'rC)Ú result_queuer7r9r8rHr,r r r Ú_sendback_resultÉs ÿ  r]c CsÐ|dk rtk r´}z t ||j ƒ}t ||j|d�W5d}~XYnXt ||j|d�~~qd‰‡fdd„}‡‡fdd„}|j} |j} | | g} t||ˆƒdd„ˆ ¡Dƒ} tj | | ¡} d}d}| | krºz|  ¡}d}WqÊtk r¶}zt  t |ƒ||j ¡}W5d}~XYqÊXn| | krÊd}d}|  ¡|�rl|ƒ‰ˆdk röd ˆ_ dˆ_d‰td ƒ}|dk �r td d  |¡›d �ƒ|_| ¡D]\}}|j |¡~�q(|  ¡ˆ ¡D]}| ¡�qR|ƒdSt|tƒ�rœˆ |¡}| ¡ˆ�sè|ƒdSnL|dk �rè| |jd¡}|dk �ræ|j�rÖ|j |j¡n|j |j¡~~|ƒ‰|ƒ�r4z&ˆdk �rdˆ_|�s|ƒWdSWntk �r2YnXd‰q2dS)NcstpˆdkpˆjSr)rÚ_shutdown_threadr )Úexecutorr r Ú shutting_down@s ÿz/_queue_management_worker..shutting_downc s¬tdd„ˆ ¡Dƒƒ}|}d}||krŠ|dkrŠt||ƒD]6}zˆ d¡|d7}Wq:tk rnYqrYq:Xq:tdd„ˆ ¡Dƒƒ}qˆ ¡ˆ ¡D] }| ¡qšdS)Ncss|]}| ¡VqdSr©Zis_alive©rUÚpr r r Ú FszD_queue_management_worker..shutdown_worker..rr!css|]}| ¡VqdSrrnror r r rqRs)ÚsumÚvaluesÚrangeZ put_nowaitrrr)Zn_children_aliveZn_children_to_stopZn_sentinels_sentÚirp)rdÚ processesr r Úshutdown_workerDs   z1_queue_management_worker..shutdown_workercSsg|] }|j‘qSr )Ú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 connectionÚwaitZrecvr[r)r*r+rCrÚ_brokenrkÚBrokenProcessPoolr#rr/rr1rFZ terminaterBÚintrEr7r8Z set_resultr9r)Zexecutor_referencervr=Zwork_ids_queuerdr\rrmrwZ result_readerZ wakeup_readerZreadersZworker_sentinelsZreadyÚcauseZ is_brokenZ result_itemrHZbper7rJrpr )rdrlrvr Ú_queue_management_worker"sˆ þ ( ÿ         r~c Csjtrtrttƒ‚dazt d¡}Wnttfk r<YdSX|dkrJdS|dkrVdSd|attƒ‚dS)NTÚSC_SEM_NSEMS_MAXéÿÿÿÿéz@system provides too few semaphores (%d available, 256 necessary))Ú_system_limits_checkedÚ_system_limitedÚNotImplementedErrorrbÚsysconfÚAttributeErrorÚ ValueError)Z nsems_maxr r r Ú_check_system_limitsÆs ÿrˆccs&|D]}| ¡|r| ¡VqqdSr)ÚreverserE)ÚiterableZelementr r r Ú_chain_from_iterable_of_listsÞsr‹c@s eZdZdS)r{N)rrrr r r r r{êsr{csteZdZddd„Zdd„Zdd„Zd d „Zejjj e_ ejjj e_ dd d œ‡fd d„ Z ddd„Z ejj j e _ ‡Z S)ÚProcessPoolExecutorNr cCstƒ|dkr6t ¡pd|_tjdkrntt|jƒ|_n8|dkrHtdƒ‚n tjdkrh|tkrhtdt›�ƒ‚||_|dkr~t   ¡}||_ |dk rœt |ƒsœt 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)$rˆrbÚ cpu_countÚ _max_workersÚsysÚplatformÚminÚ_MAX_WINDOWS_WORKERSr‡rZ get_contextÚ _mp_contextÚcallableÚ TypeErrorÚ _initializerÚ _initargsÚ_queue_management_threadÚ _processesrkÚ threadingZLockÚ_shutdown_lockrzÚ _queue_countÚ_pending_work_itemsÚEXTRA_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 ròsP  ÿ  ÿÿ  þ  zProcessPoolExecutor.__init__c Csv|jdkrr|jfdd„}| ¡tjtt ||¡|j|j |j |j |j |jfdd�|_d|j_ |j ¡|jt|j<dS)NcSstj d¡| ¡dS)Nz?Executor collected: triggering callback for QueueManager wakeup)rÚutilÚdebugr)rrr r r Ú weakref_cbBs zFProcessPoolExecutor._start_queue_management_thread..weakref_cbZQueueManagerThread)Útargetr3ÚnameT)r˜r¢Ú_adjust_process_countršZThreadr~ÚweakrefÚrefr™r�r¡rŸr ZdaemonÚstartr)r r¥r r r Ú_start_queue_management_thread=s( ÿ  ú÷  ÿz2ProcessPoolExecutor._start_queue_management_threadcCsPtt|jƒ|jƒD]8}|jjt|j|j|j |j fd�}|  ¡||j|j <qdS)N)r¦r3) rtÚlenr™rŽr“ZProcessrhrŸr r–r—r«Úpid)r rrpr r r r¨Xsýþz)ProcessPoolExecutor._adjust_process_countc Os t|ƒdkr|^}}}nV|s&tdƒ‚nHd|krZ| d¡}|^}}ddl}|jdtdd�ntdt|ƒdƒ‚|j�Œ|jr†t|jƒ‚|j r”t d ƒ‚t r t d ƒ‚t   ¡}t||||ƒ}||j|j<|j |j¡|jd7_|j ¡| ¡|W5QR£SQRXdS) NézEdescriptor '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)r­r•rEÚwarningsÚwarnÚDeprecationWarningr›rzr{rkÚ RuntimeErrorrrZFuturer0r�rœr¡rZr¢rr¬)r3r4r r2r±ÚfÚwr r r Úsubmitcs<    ÿ ÿ   zProcessPoolExecutor.submitr!)ÚtimeoutrPcs:|dkrtdƒ‚tƒjtt|ƒt|d|iŽ|d�}t|ƒS)Nr!zchunksize must be >= 1.rP)r¸)r‡r>ÚmaprrXrTr‹)r r2r¸rPrQZresultsr@r r r¹Šs þzProcessPoolExecutor.mapTc CsŠ|j� d|_W5QRX|jr6|j ¡|r6|j ¡d|_|jdk rd|j ¡|r^|j ¡d|_d|_ d|_ |jr†|j ¡d|_dSr) r›rkr˜r¢rrrŸrZ join_threadr r™)r ryr r r Úshutdown§s"      zProcessPoolExecutor.shutdown)NNNr )T)rrrrr¬r¨r·rÚExecutorÚ__text_signature__Ú__doc__r¹rºrKr r r@r rŒñsÿ K $   rŒ)NN)2Ú __author__ÚatexitrbZconcurrent.futuresrrirZmultiprocessingrZmultiprocessing.connectionZmultiprocessing.queuesrršr©Ú functoolsrrNr�r)ÚWeakKeyDictionaryrrrr ržr’Ú Exceptionr#r'r-Úobjectr0r6r:r;rTrXr]rhrjr~r‚rƒrˆr‹ZBrokenExecutorr{r»rŒÚregisterr r r r Ú.sT        )&! P