U e5dª-ã@sÐdddgZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z ddl mZejjZdd lmZmZmZmZmZGd d„deƒZeƒZGd d„deƒZGd d„deƒZdS) ÚQueueÚ SimpleQueueÚ JoinableQueueéN)ÚEmptyÚFullé)Ú connection)Úcontext)ÚdebugÚinfoÚFinalizeÚregister_after_forkÚ is_exitingc@sºeZdZd*dd„Zdd„Zdd„Zdd „Zd+d d „Zd,dd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zd d!„Zed"d#„ƒZed$d%„ƒZed&d'„ƒZed(d)„ƒZd S)-rrcCs’|dkrddlm}||_tjdd�\|_|_| ¡|_t   ¡|_ t j dkrTd|_n | ¡|_| |¡|_d|_| ¡t j dkrŽt|tjƒdS)Nrr)Ú SEM_VALUE_MAXF©ZduplexÚwin32)Z synchronizerÚ_maxsizerÚPipeÚ_readerÚ_writerÚLockÚ_rlockÚosÚgetpidÚ_opidÚsysÚplatformÚ_wlockZBoundedSemaphoreÚ_semÚ _ignore_epipeÚ _after_forkr r©ÚselfÚmaxsizeÚctx©r%ú./usr/lib64/python3.8/multiprocessing/queues.pyÚ__init__$s       zQueue.__init__cCs.t |¡|j|j|j|j|j|j|j|j fS©N) r Úassert_spawningrrrrrrrr©r"r%r%r&Ú __getstate__9s ÿzQueue.__getstate__c Cs0|\|_|_|_|_|_|_|_|_| ¡dSr() rrrrrrrrr ©r"Ústater%r%r&Ú __setstate__>sÿzQueue.__setstate__cCsbtdƒt t ¡¡|_t ¡|_d|_d|_ d|_ d|_ d|_ |j j|_|jj|_|jj|_dS)NzQueue._after_fork()F)r Ú threadingÚ ConditionrÚ _notemptyÚ collectionsÚdequeÚ_bufferÚ_threadÚ _jointhreadÚ_joincancelledÚ_closedÚ_closerÚ send_bytesÚ _send_bytesrÚ recv_bytesÚ _recv_bytesÚpollÚ_pollr*r%r%r&r Cs   zQueue._after_forkTNc Csf|jrtd|›d�ƒ‚|j ||¡s(t‚|j�.|jdkrB| ¡|j  |¡|j  ¡W5QRXdS©NzQueue z is closed) r8Ú ValueErrorrÚacquirerr1r5Ú _start_threadr4ÚappendÚnotify©r"ÚobjÚblockÚtimeoutr%r%r&ÚputPs  z Queue.putc CsÄ|jrtd|›d�ƒ‚|rH|dkrH|j�| ¡}W5QRX|j ¡nr|rXt ¡|}|j ||¡sjt ‚zB|rŒ|t ¡}|  |¡s˜t ‚n |  ¡s˜t ‚| ¡}|j ¡W5|j ¡Xt   |¡Sr@) r8rArr=rÚreleaseÚtimeÚ monotonicrBrr?Ú_ForkingPicklerÚloads)r"rHrIÚresZdeadliner%r%r&Úget\s*      z Queue.getcCs|j|jj ¡Sr()rrÚ_semlockZ _get_valuer*r%r%r&Úqsizevsz Queue.qsizecCs | ¡ Sr(©r?r*r%r%r&Úemptyzsz Queue.emptycCs |jj ¡Sr()rrRÚ_is_zeror*r%r%r&Úfull}sz Queue.fullcCs | d¡S©NF)rQr*r%r%r&Ú get_nowait€szQueue.get_nowaitcCs | |d¡SrX)rJ©r"rGr%r%r&Ú put_nowaitƒszQueue.put_nowaitcCs2d|_z|j ¡W5|j}|r,d|_|ƒXdS)NT)r8r9rÚclose)r"r\r%r%r&r\†sz Queue.closecCstdƒ|jr| ¡dS)NzQueue.join_thread())r r6r*r%r%r&Ú join_thread�szQueue.join_threadcCs6tdƒd|_z|j ¡Wntk r0YnXdS)NzQueue.cancel_join_thread()T)r r7r6ZcancelÚAttributeErrorr*r%r%r&Úcancel_join_thread–s zQueue.cancel_join_threadc Cs°tdƒ|j ¡tjtj|j|j|j|j |j j |j |j |jfdd�|_d|j_tdƒ|j ¡tdƒ|js�t|jtjt |j¡gdd�|_t|tj|j|jgd d�|_dS) NzQueue._start_thread()ZQueueFeederThread)ÚtargetÚargsÚnameTzdoing self._thread.start()z... done self._thread.start()éûÿÿÿ)Z exitpriorityé )r r4Úclearr/ZThreadrÚ_feedr1r;rrr\rÚ_on_queue_feeder_errorrr5ZdaemonÚstartr7r Ú_finalize_joinÚweakrefÚrefr6Ú_finalize_closer9r*r%r%r&rCžs<  þû  ý ýzQueue._start_threadcCs4tdƒ|ƒ}|dk r(| ¡tdƒntdƒdS)Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r Újoin)ZtwrÚthreadr%r%r&ri¾s  zQueue._finalize_joinc Cs.tdƒ|�| t¡| ¡W5QRXdS)Nztelling queue thread to quit)r rDÚ _sentinelrE)ÚbufferÚnotemptyr%r%r&rlÈs zQueue._finalize_closec CsXtdƒ|j}|j} |j} |j} t} tjdkr<|j} |j}nd} zš|ƒz|sT| ƒW5| ƒXzb| ƒ}|| kr†tdƒ|ƒWWdSt  |¡}| dkr¢||ƒqb| ƒz ||ƒW5|ƒXqbWnt k rÖYnXWq@t k �rP}zV|�rt |ddƒt jk�rWY¢6dStƒ�r.td|ƒWY¢dS| ¡|||ƒW5d}~XYq@Xq@dS)Nz$starting thread to feed data to piperz%feeder thread got sentinel -- exitingÚerrnorzerror in queue thread: %s)r rBrKÚwaitÚpopleftrorrrNÚdumpsÚ IndexErrorÚ ExceptionÚgetattrrrZEPIPErr )rprqr:Z writelockr\Z ignore_epipeÚonerrorZ queue_semZnacquireZnreleaseZnwaitZbpopleftÚsentinelZwacquireZwreleaserGÚer%r%r&rfÏsN         z Queue._feedcCsddl}| ¡dS)z˜ Private API hook called when feeding data in the background thread raises an exception. For overriding by concurrent.futures. rN)Ú tracebackÚ print_exc)r{rGr|r%r%r&rg szQueue._on_queue_feeder_error)r)TN)TN)Ú__name__Ú __module__Ú __qualname__r'r+r.r rJrQrSrUrWrYr[r\r]r_rCÚ staticmethodrirlrfrgr%r%r%r&r"s.       =c@s@eZdZddd„Zdd„Zdd„Zdd d „Zd d „Zdd„Zd S)rrcCs*tj|||d�| d¡|_| ¡|_dS)N)r$r)rr'Z SemaphoreÚ_unfinished_tasksr0Ú_condr!r%r%r&r'#s zJoinableQueue.__init__cCst |¡|j|jfSr()rr+rƒr‚r*r%r%r&r+(szJoinableQueue.__getstate__cCs,t ||dd…¡|dd…\|_|_dS)Néþÿÿÿ)rr.rƒr‚r,r%r%r&r.+szJoinableQueue.__setstate__TNc Cs‚|jrtd|›d�ƒ‚|j ||¡s(t‚|j�J|j�8|jdkrJ| ¡|j   |¡|j   ¡|j  ¡W5QRXW5QRXdSr@)r8rArrBrr1rƒr5rCr4rDr‚rKrErFr%r%r&rJ/s   zJoinableQueue.putc Cs@|j�0|j d¡stdƒ‚|jj ¡r2|j ¡W5QRXdS)NFz!task_done() called too many times)rƒr‚rBrArRrVZ notify_allr*r%r%r&Ú task_done<s   zJoinableQueue.task_donec Cs,|j�|jj ¡s|j ¡W5QRXdSr()rƒr‚rRrVrsr*r%r%r&rmCs zJoinableQueue.join)r)TN) r~rr€r'r+r.rJr…rmr%r%r%r&r!s   c@s<eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)rcCsHtjdd�\|_|_| ¡|_|jj|_tj dkr:d|_ n | ¡|_ dS)NFrr) rrrrrrr>r?rrr)r"r$r%r%r&r'Ns    zSimpleQueue.__init__cCs | ¡ Sr(rTr*r%r%r&rUWszSimpleQueue.emptycCst |¡|j|j|j|jfSr()r r)rrrrr*r%r%r&r+Zs zSimpleQueue.__getstate__cCs"|\|_|_|_|_|jj|_dSr()rrrrr>r?r,r%r%r&r.^szSimpleQueue.__setstate__c Cs&|j�|j ¡}W5QRXt |¡Sr()rrr<rNrO)r"rPr%r%r&rQbszSimpleQueue.getc CsDt |¡}|jdkr"|j |¡n|j�|j |¡W5QRXdSr()rNrurrr:rZr%r%r&rJhs   zSimpleQueue.putN) r~rr€r'rUr+r.rQrJr%r%r%r&rLs  )Ú__all__rrr/r2rLrjrrZqueuerrZ_multiprocessingÚrr Z reductionZForkingPicklerrNÚutilr r r r rÚobjectrrorrr%r%r%r&Ú s$   v +