
    h1                     
   S SK r S SKrS SKrS SKrS SKrS SKrSSKJr  SSKJr  SSK	J
r
  S SKJr  S SKJrJr  SSKJrJrJrJrJrJr  SS	KJr  / S
Qr " S S5      r\" 5       r " S S\5      r " S S5      r " S S\5      rg)    N   )
connection)context)	get_errno)	monotonic)EmptyFull)debugerrorinfoFinalizeregister_after_fork
is_exiting)ForkingPickler)QueueSimpleQueueJoinableQueuec                       \ rS rSrSrSS jrS rS rS rSS jr	SS	 jr
S
 rS rS rS rS rS rS rS rS r\S 5       r\S 5       r\S 5       rSrg)r      z,
Queue type using a pipe, buffer and thread
c                      US   nUS::  a  SSKJn  Xl        [
        R                  " SS9u  U l        U l        UR                  5       U l
        [        R                  " 5       U l        [        R                  S:X  a  S U l        OUR                  5       U l        UR#                  U5      U l        SU l        U R)                  5         [        R                  S:w  a  [+        U [,        R(                  5        g g ! [          a    [        S5      ef = f)	Nctxz-missing 1 required keyword-only argument: ctxr   r   )SEM_VALUE_MAXFduplexwin32)KeyError	TypeErrorsynchronizer   _maxsizer   Pipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockBoundedSemaphore_sem_ignore_epipe_after_forkr   r   selfmaxsizeargskwargsr   s        7D:\TimeStamps\venv\Lib\site-packages\billiard/queues.py__init__Queue.__init__#   s    	M-C a<=%/__E%B"dlhhjYY[
<<7"DK((*DK((1	"<<7"e&7&78 #'  	MKLL	Ms   C7 7Dc                     [         R                  " U 5        U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  4$ N)
r   assert_spawningr-   r   r!   r"   r$   r*   r,   r'   r0   s    r4   __getstate__Queue.__getstate__<   sP    %""DMM4<<T[[$))TZZA 	A    c           	          Uu  U l         U l        U l        U l        U l        U l        U l        U l        U R                  5         g r8   )	r-   r   r!   r"   r$   r*   r,   r'   r.   r0   states     r4   __setstate__Queue.__setstate__A   s8    <A	:	T]DL$,	dk49djr=   c                    [        S5        [        R                  " [        R                  " 5       5      U l        [
        R                  " 5       U l        S U l        S U l	        SU l
        SU l        S U l        U R                  R                  U l        U R                   R"                  U l        U R                  R&                  U l        U R                   R(                  U l        U R                   R,                  U l        g )NzQueue._after_fork()F)r
   	threading	Conditionr#   	_notemptycollectionsdeque_buffer_thread_jointhread_joincancelled_closed_closer"   send_send_bytesr!   recv_recv
send_bytes
recv_bytes_recv_bytespoll_pollr:   s    r4   r.   Queue._after_forkF   s    #$",,Y^^-=>"((*#<<,,\\&&
<<22<<22\\&&
r=   Nc                 f   U R                   (       a   eU R                  R                  X#5      (       d  [        eU R                     U R
                  c  U R                  5         U R                  R                  U5        U R                  R                  5         S S S 5        g ! , (       d  f       g = fr8   )
rM   r,   acquirer	   rF   rJ   _start_threadrI   appendnotifyr0   objblocktimeouts       r4   put	Queue.putU   sr    <<yy  00J^^||#""$LL$NN!!#	 ^^s   AB""
B0c                    U(       aC  Uc@  U R                      U R                  5       nS S S 5        U R                  R                  5         OU(       a  [	        5       U-   nU R                   R                  X5      (       d  [        e U(       a0  W[	        5       -
  nUS:  d  U R                  U5      (       d  [        eOU R                  5       (       d  [        eU R                  5       nU R                  R                  5         U R                   R                  5         [        R                  " W5      $ ! , (       d  f       GN= f! U R                   R                  5         f = f)Nr   )
r$   rU   r,   releaser   rZ   r   rW   r   loads)r0   r`   ra   resdeadlines        r4   get	Queue.get`   s    W_&&( II $;0;;&&u66
&&4G{$**W*=*=# +>K&&(		!!###%##C((+ & ##%s   D2A<E 2
EE c                 d    U R                   U R                  R                  R                  5       -
  $ r8   )r   r,   _semlock
_get_valuer:   s    r4   qsizeQueue.qsizey   s&     }}tyy11<<>>>r=   c                 ,    U R                  5       (       + $ r8   rW   r:   s    r4   emptyQueue.empty~       ::<r=   c                 J    U R                   R                  R                  5       $ r8   )r,   rl   _is_zeror:   s    r4   full
Queue.full   s    yy!!**,,r=   c                 $    U R                  S5      $ NF)ri   r:   s    r4   
get_nowaitQueue.get_nowait   s    xxr=   c                 &    U R                  US5      $ rz   )rb   r0   r_   s     r4   
put_nowaitQueue.put_nowait   s    xxU##r=   c                     SU l          U R                  R                  5         U R                  nU(       a  S U l        U" 5         g g ! U R                  nU(       a  S U l        U" 5         f f = f)NT)rM   r!   closerN   )r0   r   s     r4   r   Queue.close   s\    	LL KKE"  KKE" s   A $A*c                     [        S5        U R                  (       d   eU R                  (       a  U R                  5         g g )NzQueue.join_thread())r
   rM   rK   r:   s    r4   join_threadQueue.join_thread   s1    #$||| r=   c                 ~    [        S5        SU l         U R                  R                  5         g ! [         a     g f = f)NzQueue.cancel_join_thread()T)r
   rL   rK   cancelAttributeErrorr:   s    r4   cancel_join_threadQueue.cancel_join_thread   s<    *+"	##% 		s   / 
<<c           	      (   [        S5        U R                  R                  5         [        R                  " [
        R                  U R                  U R                  U R                  U R                  U R                  R                  U R                  4SS9U l        SU R                  l        [        S5        U R                  R                  5         [        S5        U R                   ["        R$                  " 5       :H  nU R&                  (       dO  U(       dH  [)        U R                  [
        R*                  [,        R.                  " U R                  5      /SS9U l        [)        U [
        R2                  U R                  U R                  /S	S9U l        g )
NzQueue._start_thread()QueueFeederThread)targetr2   nameTzdoing self._thread.start()z... done self._thread.start())exitpriority
   )r
   rI   clearrD   Threadr   _feedrF   rP   r*   r"   r   r-   rJ   daemonstartr'   r%   r&   rL   r   _finalize_joinweakrefrefrK   _finalize_closerN   )r0   created_by_this_processs     r4   r[   Queue._start_thread   s    %& 	 '';;,,0@0@++t||1143E3EG$	
 #*+-. $(::#<""+B'e22T\\*+ D %''\\4>>*
r=   c                 |    [        S5        U " 5       nUb  UR                  5         [        S5        g [        S5        g )Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r
   join)twrthreads     r4   r   Queue._finalize_join   s3    $%KKM+,12r=   c                     [        S5        U   U R                  [        5        UR                  5         S S S 5        g ! , (       d  f       g = f)Nztelling queue thread to quit)r
   r\   	_sentinelr]   )buffernotemptys     r4   r   Queue._finalize_close   s.    ,-MM)$OO XXs	   &=
Ac                 d   [        S5        UR                  nUR                  nUR                  nU R                  n	[
        n
[        R                  S:w  a  UR                  nUR                  nOS n  U" 5          U (       d  U" 5         U" 5           U	" 5       nXL a  [        S5        U" 5         g [        R                  " U5      nUc	  U" U5        OU" 5          U" U5        W" 5         MY  ! U" 5         f = f! W" 5         f = f! [         a     Of = fM  ! [         a  nU(       a"  [        U5      [        R                  :X  a   S nAg  [        5       (       a  [!        SUSS9   S nAg [#        SUSS9(       d  SS KnUR'                  5          S nAg  S nAg ! [         a      S nAg f = fS nAff = f)Nz$starting thread to feed data to piper   z%feeder thread got sentinel -- exitingzerror in queue thread: %rT)exc_infor   )r
   rZ   re   waitpopleftr   r(   r)   r   dumps
IndexError	Exceptionr   errnoEPIPEr   r   r   	traceback	print_exc)r   r   rS   	writelockr   ignore_epipenacquirenreleasenwaitbpopleftsentinelwacquirewreleaser_   excr   s                   r4   r   Queue._feed   s~   45####>><<7" ((H ((HH,	
!J&j?!"IJ!G" -2237#+&sO$J+ *3 (
!  J$ !)
! 3 6  		#%++ =
	<<4cDI !<c*.0(!++--0  	s   2D ;C+ 	D D 0)D C7 "	D +	C44D 7	D  D 
DD DD 
F/$F*	F($F
F' F*&F''F**F/)rI   rN   rM   r-   rL   rK   r   rF   r'   rW   r!   rR   rU   r$   r,   rP   rJ   r*   r"   r   TN)__name__
__module____qualname____firstlineno____doc__r5   r;   rA   r.   rb   ri   rn   rr   rw   r{   r   r   r   r   r[   staticmethodr   r   r   __static_attributes__ r=   r4   r   r      s    92A

'	$)2?
 -$$
L 3 3   : :r=   r   c                   D    \ rS rSrSrSS jrS rS rSS jrS r	S	 r
S
rg)r   i  z
A queue type which also supports join() and task_done() methods

Note that if you do not call task_done() for each finished task then
eventually the counter's semaphore may overflow causing Bad Things
to happen.
c                      US   n[        R                  XUS9  UR	                  S5      U l        UR                  5       U l        g ! [          a    [        S5      ef = f)Nr   z(missing 1 required keyword argument: ctx)r   r   )r   r   r   r5   	Semaphore_unfinished_tasksrE   _condr/   s        r4   r5   JoinableQueue.__init__"  s`    	H-C 	t#.!$q!1]]_
	  	HFGG	Hs   A Ac                 ^    [         R                  U 5      U R                  U R                  4-   $ r8   )r   r;   r   r   r:   s    r4   r;   JoinableQueue.__getstate__+  s'    !!$'4::t7M7M*NNNr=   c                 X    [         R                  XS S 5        USS  u  U l        U l        g )N)r   rA   r   r   r?   s     r4   rA   JoinableQueue.__setstate__.  s+    4s,-223Z*
D*r=   Nc                    U R                   (       a   eU R                  R                  X#5      (       d  [        eU R                     U R
                     U R                  c  U R                  5         U R                  R                  U5        U R                  R                  5         U R                  R                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr8   )rM   r,   rZ   r	   rF   r   rJ   r[   rI   r\   r   re   r]   r^   s       r4   rb   JoinableQueue.put2  s    <<yy  00J^^<<'&&(##C(&&..0%%'  ^ ^s%   C"A-C C"
C	C""
C0c                 ,   U R                      U R                  R                  S5      (       d  [        S5      eU R                  R                  R                  5       (       a  U R                   R                  5         S S S 5        g ! , (       d  f       g = f)NFz!task_done() called too many times)r   r   rZ   
ValueErrorrl   rv   
notify_allr:   s    r4   	task_doneJoinableQueue.task_done?  sa    ZZ))11%88 !DEE%%..7799

%%'	 ZZs   A/B
Bc                     U R                      U R                  R                  R                  5       (       d  U R                   R	                  5         S S S 5        g ! , (       d  f       g = fr8   )r   r   rl   rv   r   r:   s    r4   r   JoinableQueue.joinF  s<    ZZ))22;;==

! ZZs   AA
A()r   r   r   r   )r   r   r   r   r   r5   r;   rA   rb   r   r   r   r   r=   r4   r   r     s&    %O8(("r=   r   c                   R    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rS rSrg)_SimpleQueueiL  z4
Simplified Queue type -- really just a locked pipe
Nc                     [         R                  " SXS9u  U l        U l        U R                  R                  U l        S =U l        U l        g )NF)r   	rnonblock	wnonblock)r   r    r!   r"   rV   rW   r$   r*   )r0   r   r   r   s       r4   r5   _SimpleQueue.__init__Q  s?    %/__I&
"dl \\&&
$((dkr=   c                 ,    U R                  5       (       + $ r8   rq   r:   s    r4   rr   _SimpleQueue.emptyX  rt   r=   c                     [         R                  " U 5        U R                  U R                  U R                  U R
                  4$ r8   )r   r9   r!   r"   r$   r*   r:   s    r4   r;   _SimpleQueue.__getstate__[  s/    %dllDKKEEr=   c                 :    Uu  U l         U l        U l        U l        g r8   )r!   r"   r$   r*   r?   s     r4   rA   _SimpleQueue.__setstate___  s    AF>t|T[$+r=   c                 6    U R                   R                  5       $ r8   )r!   rT   r:   s    r4   get_payload_SimpleQueue.get_payloadb  s    ||&&((r=   c                 :    U R                   R                  U5        g r8   )r"   rS   r0   values     r4   send_payload_SimpleQueue.send_payloade  s    &r=   c                 J    [         R                  " U R                  5       5      $ r8   )r   rf   r   r:   s    r4   ri   _SimpleQueue.geth  s    ##D$4$4$677r=   c                 N    U R                  [        R                  " U5      5        g r8   )r   r   r   r~   s     r4   rb   _SimpleQueue.putl  s    ...s34r=   c                     U R                   b"   U R                   R                  5         S U l         U R                  b#   U R                  R                  5         S U l        g g ! S U l         f = f! S U l        f = fr8   )r!   r   r"   r:   s    r4   r   _SimpleQueue.closep  sh    <<#$""$#<<#$""$#	 $  $  $s   A! A- !	A*-	A6)rW   r!   r$   r*   r"   )FFN)r   r   r   r   r   r5   rr   r;   rA   r   r   ri   rb   r   r   r   r=   r4   r   r   L  s6    ) FG)'85$r=   r   c                   &    \ rS rSrS rS rS rSrg)r   i~  c                     US   n[        R                  " SS9u  U l        U l        UR                  5       U l        [        R                  S:w  a  UR                  5       U l
        g S U l
        g ! [          a    [        S5      ef = f)Nr   z&missing required keyword argument: ctxFr   r   )r   r   r   r    r!   r"   r#   r$   r(   r)   r*   )r0   r2   r3   r   s       r4   r5   SimpleQueue.__init__  st    	F-C &0__E%B"dlhhj$'LLG$;chhj	  	FDEE	Fs   A/ /Bc                     U R                      U R                  R                  5       sS S S 5        $ ! , (       d  f       g = fr8   )r$   r!   rT   r:   s    r4   r   SimpleQueue.get_payload  s#    [[<<**, [[s   1
?c                     U R                   c  U R                  R                  U5        g U R                      U R                  R                  U5        S S S 5        g ! , (       d  f       g = fr8   )r*   r"   rS   r   s     r4   r   SimpleQueue.send_payload  sA    ;;LL##E*''. s   A
A))r!   r$   r*   r"   N)r   r   r   r   r5   r   r   r   r   r=   r4   r   r   ~  s    F-/r=   r   ) r(   r%   rD   rG   r   r    r   r   compatr   timer   queuer   r	   utilr
   r   r   r   r   r   	reductionr   __all__r   objectr   r   r   r   r   r=   r4   <module>r     sv     	           &
3u un H	0"E 0"f/$ /$d/, /r=   