
    Rh1                        g d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZ ddlZddlmZ ddlmZ ej                   j"                  ZddlmZmZmZmZmZ  G d d	e      Z e       Z G d
 de      Z G d de      Zy))QueueSimpleQueueJoinableQueue    N)EmptyFull   )
connection)context)debuginfoFinalizeregister_after_fork
is_exitingc                       e Zd ZddZd Zd Zd ZddZddZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zed        Zed        Zed        Zed        Z eej6                        Zy)r   c                   |dk  rddl m} || _        t        j                  d      \  | _        | _        |j                         | _        t        j                         | _        t        j                  dk(  rd | _        n|j                         | _        |j                  |      | _        d| _        | j%                          t        j                  dk7  rt'        | t(        j*                         y y )Nr   r   )SEM_VALUE_MAXFduplexwin32)synchronizer   _maxsizer	   Pipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockBoundedSemaphore_sem_ignore_epipe_resetr   r   _after_forkselfmaxsizectxs      -/usr/lib/python3.12/multiprocessing/queues.py__init__zQueue.__init__%   s    a<=%/__E%B"dlhhjYY[
<<7"DK((*DK((1	"<<7"e&7&78 #    c                     t        j                  |        | j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  fS N)
r
   assert_spawningr%   r   r   r   r   r"   r$   r   r)   s    r,   __getstate__zQueue.__getstate__9   sP    %""DMM4<<T[[$))TZZA 	Ar.   c           	          |\  | _         | _        | _        | _        | _        | _        | _        | _        | j                          y r0   )	r%   r   r   r   r   r"   r$   r   r&   r)   states     r,   __setstate__zQueue.__setstate__>   s5    <A	:	T]DL$,	dk49djr.   c                 >    t        d       | j                  d       y )NzQueue._after_fork()T)
after_fork)r   r&   r2   s    r,   r'   zQueue._after_forkC   s    #$t$r.   c                    |r| j                   j                          n,t        j                  t        j                               | _         t        j                         | _        d | _        d | _	        d| _
        d| _        d | _        | j                  j                  | _        | j                   j"                  | _        | j                   j&                  | _        y NF)	_notempty_at_fork_reinit	threading	Conditionr   collectionsdeque_buffer_thread_jointhread_joincancelled_closed_closer   
send_bytes_send_bytesr   
recv_bytes_recv_bytespoll_poll)r)   r9   s     r,   r&   zQueue._resetG   s    NN**,&001ABDN"((*#<<22<<22\\&&
r.   Nc                 b   | j                   rt        d| d      | j                  j                  ||      st        | j
                  5  | j                  | j                          | j                  j                  |       | j
                  j                          d d d        y # 1 sw Y   y xY wNzQueue z
 is closed)rF   
ValueErrorr$   acquirer   r<   rC   _start_threadrB   appendnotifyr)   objblocktimeouts       r,   putz	Queue.putV   s    <<vdXZ899yy  0J^^ 	$||#""$LL$NN!!#		$ 	$ 	$s   
AB%%B.c                    | j                   rt        d| d      |rB|@| j                  5  | j                         }d d d        | j                  j                          n|rt        j                         |z   }| j                  j                  ||      st        	 |r.t        j                         z
  }| j                  |      st        | j                         st        | j                         }| j                  j                          | j                  j                          t        j                        S # 1 sw Y   xY w# | j                  j                          w xY wrO   )rF   rP   r   rK   r$   releasetime	monotonicrQ   r   rM   _ForkingPicklerloads)r)   rW   rX   resdeadlines        r,   getz	Queue.getb   s   <<vdXZ899W_ )&&()II>>+g5;;&&ug6
&&)99G::g.#K&&(		!!###%$$S)))) )$ ##%s   D;A0E ;EE#c                 d    | j                   | j                  j                  j                         z
  S r0   )r   r$   _semlock
_get_valuer2   s    r,   qsizezQueue.qsize|   s$    }}tyy11<<>>>r.   c                 $    | j                          S r0   rM   r2   s    r,   emptyzQueue.empty       ::<r.   c                 J    | j                   j                  j                         S r0   )r$   rd   _is_zeror2   s    r,   fullz
Queue.full   s    yy!!**,,r.   c                 $    | j                  d      S r;   )rb   r2   s    r,   
get_nowaitzQueue.get_nowait   s    xxr.   c                 &    | j                  |d      S r;   )rY   r)   rV   s     r,   
put_nowaitzQueue.put_nowait   s    xxU##r.   c                 L    d| _         | j                  }|rd | _         |        y y )NT)rF   rG   )r)   closes     r,   rt   zQueue.close   s&    DKG r.   c                     t        d       | j                  sJ dj                  |              | j                  r| j                          y y )NzQueue.join_thread()zQueue {0!r} not closed)r   rF   formatrD   r2   s    r,   join_threadzQueue.join_thread   sB    #$||B5<<TBB| r.   c                 |    t        d       d| _        	 | j                  j                          y # t        $ r Y y w xY w)NzQueue.cancel_join_thread()T)r   rE   rD   cancelAttributeErrorr2   s    r,   cancel_join_threadzQueue.cancel_join_thread   s<    *+"	##% 		s   / 	;;c                     | j                   j                          t        j                  dk(  r| j                  j                          | j                          | j                          y )Nr   )r   rt   r    r!   r   rw   r2   s    r,   _terminate_brokenzQueue._terminate_broken   sG     	 <<7"LL 

r.   c                 ,   t        d       | j                  j                          t        j                  t
        j                  | j                  | j                  | j                  | j                  | j                  j                  | j                  j                  | j                  | j                  | j                  f	dd      | _        	 t        d       | j                   j#                          t        d       | j$                  sJt'        | j                   t
        j(                  t+        j,                  | j                         gd      | _        t'        | t
        j0                  | j                  | j                  gd	      | _        y #  d | _         xY w)
NzQueue._start_thread()QueueFeederThreadT)targetargsnamedaemonzdoing self._thread.start()z... done self._thread.start())exitpriority
   )r   rB   clearr>   Threadr   _feedr<   rI   r"   r   rt   r   r%   _on_queue_feeder_errorr$   rC   startrE   r   _finalize_joinweakrefrefrD   _finalize_closerG   r2   s    r,   rR   zQueue._start_thread   s2   %& 	 '';;,,0@0@++t||114<<3E3E$$d&A&A)) %
	./LL 12 ""'e22T\\*+ D %''\\4>>*	  DLs   
0F	 	
Fc                 z    t        d        |        }||j                          t        d       y t        d       y )Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r   join)twrthreads     r,   r   zQueue._finalize_join   s3    $%KKM+,12r.   c                     t        d       |5  | j                  t               |j                          d d d        y # 1 sw Y   y xY w)Nztelling queue thread to quit)r   rS   	_sentinelrT   )buffernotemptys     r,   r   zQueue._finalize_close   s9    ,- 	MM)$OO	 	 	s	   &=Ac	                    t        d       |j                  }	|j                  }
|j                  }| j                  }t
        }t        j                  dk7  r|j                  }|j                  }nd }	 	  |	        	 | s |         |
        	 	  |       }||u rt        d        |         |        y t        j                  |      }|	 ||       n |        	  ||                ]#  |
        w xY w#          w xY w# t        $ r Y nw xY wno# t        $ rc}|r#t        |dd      t        j                  k(  rY d }~y t               rt!        d|       Y d }~y |j                           ||       Y d }~nd }~ww xY w)Nz$starting thread to feed data to piper   z%feeder thread got sentinel -- exitingerrnor   zerror in queue thread: %s)r   rQ   r[   waitpopleftr   r    r!   r^   dumps
IndexError	Exceptiongetattrr   EPIPEr   r   )r   r   rH   	writelockreader_closewriter_closeignore_epipeonerror	queue_semnacquirenreleasenwaitbpopleftsentinelwacquirewreleaserV   es                     r,   r   zQueue._feed   sh    	45####>><<7" ((H ((HH-$
!J&j(?!"IJ(N(N" .33C8#+&sO$J+ *3 (
#  J& !)
!  $GAw$:ekk$I
 <4a8 %%'AsOO#$; sx   2D :	C) D %D 1'D C5 !D )	C22D 5	C>>D 	D
D DD 	E= E8?E8E88E=c                 ,    ddl }|j                          y)z
        Private API hook called when feeding data in the background thread
        raises an exception.  For overriding by concurrent.futures.
        r   N)	traceback	print_exc)r   rV   r   s      r,   r   zQueue._on_queue_feeder_error&  s     	r.   r   )FTN)__name__
__module____qualname__r-   r3   r7   r'   r&   rY   rb   rf   ri   rm   ro   rr   rt   rw   r{   r}   rR   staticmethodr   r   r   r   classmethodtypesGenericAlias__class_getitem__ r.   r,   r   r   #   s    9(A

%'
$*4? -$%N 3 3   <$ <$|   $E$6$67r.   r   c                   4    e Zd ZddZd Zd Zd	dZd Zd Zy)
r   c                    t         j                  | ||       |j                  d      | _        |j	                         | _        y )N)r+   r   )r   r-   	Semaphore_unfinished_tasksr?   _condr(   s      r,   r-   zJoinableQueue.__init__>  s2    tW#.!$q!1]]_
r.   c                 ^    t         j                  |       | j                  | j                  fz   S r0   )r   r3   r   r   r2   s    r,   r3   zJoinableQueue.__getstate__C  s'    !!$'4::t7M7M*NNNr.   c                 Z    t         j                  | |d d        |dd  \  | _        | _        y )N)r   r7   r   r   r5   s     r,   r7   zJoinableQueue.__setstate__F  s-    4s,-223Z*
D*r.   Nc                    | j                   rt        d| d      | j                  j                  ||      st        | j
                  5  | j                  5  | j                  | j                          | j                  j                  |       | j                  j                          | j
                  j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY wrO   )rF   rP   r$   rQ   r   r<   r   rC   rR   rB   rS   r   r[   rT   rU   s       r,   rY   zJoinableQueue.putJ  s    <<vdXZ899yy  0J^^ 	$TZZ 	$||#""$LL$""**,NN!!#	$ 	$ 	$ 	$ 	$ 	$s%   
C A,CC C	C  C)c                    | j                   5  | j                  j                  d      st        d      | j                  j                  j                         r| j                   j                          d d d        y # 1 sw Y   y xY w)NFz!task_done() called too many times)r   r   rQ   rP   rd   rl   
notify_allr2   s    r,   	task_donezJoinableQueue.task_doneW  sf    ZZ 	())11%8 !DEE%%..779

%%'		( 	( 	(s   A%A;;Bc                     | j                   5  | j                  j                  j                         s| j                   j	                          d d d        y # 1 sw Y   y xY wr0   )r   r   rd   rl   r   r2   s    r,   r   zJoinableQueue.join^  sD    ZZ 	"))22;;=

!	" 	" 	"s   ?AAr   r   )	r   r   r   r-   r3   r7   rY   r   r   r   r.   r,   r   r   <  s!    %
O8$("r.   r   c                   Z    e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
ej                        Zy)	r   c                
   t        j                  d      \  | _        | _        |j	                         | _        | j                  j                  | _        t        j                  dk(  rd | _
        y |j	                         | _
        y )NFr   r   )r	   r   r   r   r   r   rL   rM   r    r!   r"   )r)   r+   s     r,   r-   zSimpleQueue.__init__i  sW    %/__E%B"dlhhj\\&&
<<7"DK((*DKr.   c                 l    | j                   j                          | j                  j                          y r0   )r   rt   r   r2   s    r,   rt   zSimpleQueue.closer  s"    r.   c                 $    | j                          S r0   rh   r2   s    r,   ri   zSimpleQueue.emptyv  rj   r.   c                     t        j                  |        | j                  | j                  | j                  | j
                  fS r0   )r
   r1   r   r   r   r"   r2   s    r,   r3   zSimpleQueue.__getstate__y  s/    %dllDKKEEr.   c                 p    |\  | _         | _        | _        | _        | j                   j                  | _        y r0   )r   r   r   r"   rL   rM   r5   s     r,   r7   zSimpleQueue.__setstate__}  s)    AF>t|T[$+\\&&
r.   c                     | j                   5  | j                  j                         }d d d        t        j	                        S # 1 sw Y   xY wr0   )r   r   rJ   r^   r_   )r)   r`   s     r,   rb   zSimpleQueue.get  sC    [[ 	,,,))+C	, $$S))	, 	,s   AAc                     t         j                  |      }| j                  | j                  j	                  |       y | j                  5  | j                  j	                  |       d d d        y # 1 sw Y   y xY wr0   )r^   r   r"   r   rH   rq   s     r,   rY   zSimpleQueue.put  s\    ##C(;;LL##C( -'',- - -s   
A//A8N)r   r   r   r-   rt   ri   r3   r7   rb   rY   r   r   r   r   r   r.   r,   r   r   g  s9    % F'*- $E$6$67r.   r   )__all__r    r   r>   r@   r\   r   r   r   queuer   r   _multiprocessing r	   r
   	reductionForkingPicklerr^   utilr   r   r   r   r   objectr   r   r   r   r   r.   r,   <module>r      sx    4 
 	          ##22 H HL8F L8^ H	%"E %"V*8& *8r.   