o
    Df1                     @   s   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 ddlmZ ddl	m
Z
 d dlmZ d dlmZmZ ddlmZmZmZmZmZmZ dd	lmZ g d
ZG dd dZe ZG dd deZG dd dZG dd deZdS )    N   )
connection)context)	get_errno)	monotonic)EmptyFull)debugerrorinfoFinalizeregister_after_fork
is_exiting)ForkingPickler)QueueSimpleQueueJoinableQueuec                   @   s   e Zd ZdZd)ddZdd Zdd Zd	d
 Zd*ddZd*ddZ	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zed#d$ Zed%d& Zed'd( ZdS )+r   z4
    Queue type using a pipe, buffer and thread
    r   c                 O   s   z|d }W n t y   tdw |dkrddlm} || _tjdd\| _| _|	 | _
t | _tjdkr<d | _n|	 | _||| _d| _|   tjdkr[t| tj d S d S )	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    r0   H/home/ubuntu/webapp/venv/lib/python3.10/site-packages/billiard/queues.py__init__#   s(   




zQueue.__init__c                 C   s.   t |  | j| j| j| j| j| j| j| j	fS N)
r   assert_spawningr)   r   r   r   r    r&   r(   r#   r,   r0   r0   r1   __getstate__<   s   
zQueue.__getstate__c              	   C   s0   |\| _ | _| _| _| _| _| _| _|   d S r3   )	r)   r   r   r   r    r&   r(   r#   r*   r,   stater0   r0   r1   __setstate__A   s   zQueue.__setstate__c                 C   sv   t d tt | _t | _d | _d | _	d| _
d| _d | _| jj| _| jj| _| jj| _| jj| _| jj| _d S )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_pollr5   r0   r0   r1   r*   F   s   




zQueue._after_forkTNc                 C   sp   | j rJ | j||st| j | jd u r|   | j| | j	  W d    d S 1 s1w   Y  d S r3   )
rC   r(   acquirer   r<   r@   _start_threadr?   appendnotifyr,   objblocktimeoutr0   r0   r1   putU   s   

"z	Queue.putc                 C   s   |r#|d u r#| j  |  }W d    n1 sw   Y  | j  n@|r*t | }| j ||s3tz)|rG|t  }|dk sD| |sFtn|  sMt|  }| j  W | j   n| j   w t	|S )Nr   )
r    rK   r(   releaser   rN   r   rM   r   loads)r,   rT   rU   resdeadliner0   r0   r1   get`   s*   



z	Queue.getc                 C   s   | j | jj  S r3   )r   r(   _semlock
_get_valuer5   r0   r0   r1   qsizey   s   zQueue.qsizec                 C   
   |    S r3   rM   r5   r0   r0   r1   empty~      
zQueue.emptyc                 C   s   | j j S r3   )r(   r\   _is_zeror5   r0   r0   r1   full      z
Queue.fullc                 C   s
   |  dS NF)r[   r5   r0   r0   r1   
get_nowait   rb   zQueue.get_nowaitc                 C   s   |  |dS rf   )rV   r,   rS   r0   r0   r1   
put_nowait   re   zQueue.put_nowaitc                 C   sL   d| _ z| j  W | j}|rd | _|  d S d S | j}|r%d | _|  w w )NT)rC   r   closerD   )r,   rj   r0   r0   r1   rj      s   
zQueue.closec                 C   s(   t d | js	J | jr|   d S d S )NzQueue.join_thread())r	   rC   rA   r5   r0   r0   r1   join_thread   s
   
zQueue.join_threadc                 C   s4   t d d| _z| j  W d S  ty   Y d S w )NzQueue.cancel_join_thread()T)r	   rB   rA   cancelAttributeErrorr5   r0   r0   r1   cancel_join_thread   s   zQueue.cancel_join_threadc                 C   s   t d | j  tjtj| j| j| j| j	| j
j| jfdd| _d| j_t d | j  t d | jt k}| jsM|sMt| jtjt| jgdd| _t| tj| j| jgd	d| _d S )
NzQueue._start_thread()QueueFeederThread)targetr.   nameTzdoing self._thread.start()z... done self._thread.start())exitpriority
   )r	   r?   clearr:   Threadr   _feedr<   rF   r&   r   rj   r)   r@   daemonstartr#   r!   r"   rB   r   _finalize_joinweakrefrefrA   _finalize_closerD   )r,   created_by_this_processr0   r0   r1   rO      s2   



zQueue._start_threadc                 C   s6   t d |  }|d ur|  t d d S t d d S )Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r	   join)twrthreadr0   r0   r1   rz      s   zQueue._finalize_joinc                 C   sD   t d | | t |  W d    d S 1 sw   Y  d S )Nztelling queue thread to quit)r	   rP   	_sentinelrQ   )buffernotemptyr0   r0   r1   r}      s
   

"zQueue._finalize_closec                 C   s  t d |j}|j}|j}| j}	t}
tjdkr|j}|j}nd }zQ	 |  z
| s+|  W |  n|  w z3	 |	 }||
u rHt d |  W W d S t	|}|d u rV|| n|  z	|| W |  n|  w q6 t
yp   Y nw q" ty } zD|rt|tjkrW Y d }~d S zt rtd|dd ntd|ddsdd l}|  W n	 ty   Y nw W Y d }~d S W Y d }~d S d }~ww )	Nz$starting thread to feed data to piper   r   z%feeder thread got sentinel -- exitingzerror in queue thread: %rT)exc_infor   )r	   rN   rW   waitpopleftr   r$   r%   r   dumps
IndexError	Exceptionr   errnoEPIPEr   r   r
   	traceback	print_exc)r   r   rI   	writelockrj   ignore_epipenacquirenreleasenwaitbpopleftsentinelwacquirewreleaserS   excr   r0   r0   r1   rw      sn   



zQueue._feedr   TN)__name__
__module____qualname____doc__r2   r6   r9   r*   rV   r[   r^   ra   rd   rg   ri   rj   rk   rn   rO   staticmethodrz   r}   rw   r0   r0   r0   r1   r      s.    



&
	
r   c                   @   sD   e Zd ZdZdddZdd Zdd ZdddZdd Zdd Z	d
S )r   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.
    r   c                 O   sN   z|d }W n t y   tdw tj| ||d |d| _| | _d S )Nr   z(missing 1 required keyword argument: ctx)r   r   )r   r   r   r2   	Semaphore_unfinished_tasksr;   _condr+   r0   r0   r1   r2   "  s   zJoinableQueue.__init__c                 C   s   t | | j| jf S r3   )r   r6   r   r   r5   r0   r0   r1   r6   +  s   zJoinableQueue.__getstate__c                 C   s,   t | |d d  |dd  \| _| _d S )N)r   r9   r   r   r7   r0   r0   r1   r9   .  s   zJoinableQueue.__setstate__TNc              	   C   s   | j rJ | j||st| j= | j! | jd u r|   | j	| | j
  | j  W d    n1 s9w   Y  W d    d S W d    d S 1 sQw   Y  d S r3   )rC   r(   rN   r   r<   r   r@   rO   r?   rP   r   rW   rQ   rR   r0   r0   r1   rV   2  s   


"zJoinableQueue.putc                 C   sf   | j & | jdstd| jj r!| j   W d    d S W d    d S 1 s,w   Y  d S )NFz!task_done() called too many times)r   r   rN   
ValueErrorr\   rc   
notify_allr5   r0   r0   r1   	task_done?  s   "zJoinableQueue.task_donec                 C   sR   | j  | jj s| j   W d    d S W d    d S 1 s"w   Y  d S r3   )r   r   r\   rc   r   r5   r0   r0   r1   r   F  s   "zJoinableQueue.joinr   r   )
r   r   r   r   r2   r6   r9   rV   r   r   r0   r0   r0   r1   r     s    
	
r   c                   @   sZ   e Zd ZdZdddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd ZdS )_SimpleQueuez<
    Simplified Queue type -- really just a locked pipe
    FNc                 C   s2   t jd||d\| _| _| jj| _d  | _| _d S )NF)r   	rnonblock	wnonblock)r   r   r   r   rL   rM   r    r&   )r,   r   r   r   r0   r0   r1   r2   Q  s
   
z_SimpleQueue.__init__c                 C   r_   r3   r`   r5   r0   r0   r1   ra   X  rb   z_SimpleQueue.emptyc                 C   s   t |  | j| j| j| jfS r3   )r   r4   r   r   r    r&   r5   r0   r0   r1   r6   [  s   
z_SimpleQueue.__getstate__c                 C   s   |\| _ | _| _| _d S r3   )r   r   r    r&   r7   r0   r0   r1   r9   _  s   z_SimpleQueue.__setstate__c                 C   s
   | j  S r3   )r   rJ   r5   r0   r0   r1   get_payloadb  rb   z_SimpleQueue.get_payloadc                 C   s   | j | d S r3   )r   rI   r,   valuer0   r0   r1   send_payloade  s   z_SimpleQueue.send_payloadc                 C   s   t |  S r3   )r   rX   r   r5   r0   r0   r1   r[   h  s   z_SimpleQueue.getc                 C   s   |  t| d S r3   )r   r   r   rh   r0   r0   r1   rV   l  s   z_SimpleQueue.putc                 C   sV   | j d urz
| j   W d | _ nd | _ w | jd ur)z| j  W d | _d S d | _w d S r3   )r   rj   r   r5   r0   r0   r1   rj   p  s   

z_SimpleQueue.close)FFN)r   r   r   r   r2   ra   r6   r9   r   r   r[   rV   rj   r0   r0   r0   r1   r   L  s    
r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 O   sd   z|d }W n t y   tdw tjdd\| _| _| | _tj	dkr-| | _
d S d | _
d S )Nr   z&missing required keyword argument: ctxFr   r   )r   r   r   r   r   r   r   r    r$   r%   r&   )r,   r.   r/   r   r0   r0   r1   r2     s   
"zSimpleQueue.__init__c                 C   s4   | j  | j W  d    S 1 sw   Y  d S r3   )r    r   rJ   r5   r0   r0   r1   r     s   $zSimpleQueue.get_payloadc                 C   sR   | j d u r| j| d S | j  | j| W d    d S 1 s"w   Y  d S r3   )r&   r   rI   r   r0   r0   r1   r     s
   
"zSimpleQueue.send_payloadN)r   r   r   r2   r   r   r0   r0   r0   r1   r   ~  s    	r   ) r$   r!   r:   r=   r{   r    r   r   compatr   timer   queuer   r   utilr	   r
   r   r   r   r   	reductionr   __all__r   objectr   r   r   r   r0   r0   r0   r1   <module>   s(   	  x32