a
    xd1                     @   s   d dl m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	 ddlm
Z
 ddlmZ ddlmZ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eZe ZG dd deZG dd deZG dd deZ dS )    )absolute_importN   )
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Y n0 |dkr<ddlm} || _tjdd\| _| _|	 | _
t | _tjdkr|d | _n
|	 | _||| _d| _|   tjdkrt| tj d S )	Nctxz-missing 1 required keyword-only argument: ctxr   r   )SEM_VALUE_MAXFduplexwin32)KeyError	TypeErrorZ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   G/var/www/html/Ranjet/env/lib/python3.9/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   recvZ_recv
send_bytes
recv_bytes_recv_bytespoll_pollr5   r0   r0   r1   r*   F   s    




zQueue._after_forkTNc                 C   sn   | j r
J | j||st| j8 | jd u r6|   | j| | j	  W d    n1 s`0    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   |rF|d u rF| j  |  }W d    n1 s00    Y  | j  n|rTt | }| j ||sftzR|r|t  }|dk s| |stn|  st|  }| j  W | j   n| j   0 t	|S )Nr   )
r    rJ   r(   releaser   rM   r   rL   r   loads)r,   rS   rT   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
   |    S r3   rL   r5   r0   r0   r1   empty~   s    zQueue.emptyc                 C   s   | j j S r3   )r(   r[   _is_zeror5   r0   r0   r1   full   s    z
Queue.fullc                 C   s
   |  dS NF)rZ   r5   r0   r0   r1   
get_nowait   s    zQueue.get_nowaitc                 C   s   |  |dS rb   )rU   r,   rR   r0   r0   r1   
put_nowait   s    zQueue.put_nowaitc                 C   sH   d| _ z$| j  W | j}|rDd | _|  n| j}|rBd | _|  0 d S )NT)rC   r   closerD   )r,   rf   r0   r0   r1   rf      s    zQueue.closec                 C   s$   t d | jsJ | jr |   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 n ty.   Y n0 d S )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s|st| jtjt| jgdd| _t| tj| j| jgd	d| _d S )
NzQueue._start_thread()ZQueueFeederThread)targetr.   nameTzdoing self._thread.start()z... done self._thread.start())Zexitpriority
   )r
   r?   clearr:   Threadr   _feedr<   rF   r&   r   rf   r)   r@   daemonstartr#   r!   r"   rB   r   _finalize_joinweakrefrefrA   _finalize_closerD   )r,   Zcreated_by_this_processr0   r0   r1   rN      s2    



zQueue._start_threadc                 C   s4   t d |  }|d ur(|  t d nt d d S )Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r
   join)Ztwrthreadr0   r0   r1   rt      s    
zQueue._finalize_joinc                 C   sB   t d |" | t |  W d    n1 s40    Y  d S )Nztelling queue thread to quit)r
   rO   	_sentinelrP   )buffernotemptyr0   r0   r1   rw      s    
zQueue._finalize_closec                 C   s  t d |j}|j}|j}| j}	t}
tjdkr<|j}|j}nd }z|  z| sT|  W |  n|  0 zh|	 }||
u rt d |  W W d S t	|}|d u r|| qh|  z|| W |  qh|  0 qhW qB t
y   Y qB0 qBW n ty } z|rt|tjkrW Y d }~d S z<t r6td|dd n td|ddsVdd l}|  W n tyl   Y n0 W Y d }~n
d }~0 0 d S )Nz$starting thread to feed data to piper   z%feeder thread got sentinel -- exitingzerror in queue thread: %rT)exc_infor   )r
   rM   rV   waitpopleftrz   r$   r%   r   dumps
IndexError	Exceptionr   errnoEPIPEr   r   r   	traceback	print_exc)r{   r|   rH   Z	writelockrf   Zignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserR   excr   r0   r0   r1   rq      sX    



zQueue._feed)r   )TN)TN)__name__
__module____qualname____doc__r2   r6   r9   r*   rU   rZ   r]   r_   ra   rc   re   rf   rg   rj   rN   staticmethodrt   rw   rq   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   sR   z|d }W n t y&   tdY n0 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h | jB | jd u r>|   | j	| | j
  | j  W d    n1 sr0    Y  W d    n1 s0    Y  d S r3   )rC   r(   rM   r	   r<   r   r@   rN   r?   rO   r   rV   rP   rQ   r0   r0   r1   rU   2  s    


zJoinableQueue.putc                 C   sT   | j : | jdstd| jj r2| j   W d    n1 sF0    Y  d S )NFz!task_done() called too many times)r   r   rM   
ValueErrorr[   r`   
notify_allr5   r0   r0   r1   	task_done?  s
    zJoinableQueue.task_donec                 C   s@   | j & | jj s| j   W d    n1 s20    Y  d S r3   )r   r   r[   r`   r~   r5   r0   r0   r1   rx   F  s    zJoinableQueue.join)r   )TN)
r   r   r   r   r2   r6   r9   rU   r   rx   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   rK   rL   r    r&   )r,   r   r   r   r0   r0   r1   r2   Q  s
    
z_SimpleQueue.__init__c                 C   s
   |    S r3   r^   r5   r0   r0   r1   r_   X  s    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   rI   r5   r0   r0   r1   get_payloadb  s    z_SimpleQueue.get_payloadc                 C   s   | j | d S r3   )r   rH   r,   valuer0   r0   r1   send_payloade  s    z_SimpleQueue.send_payloadc                 C   s   t |  S r3   )r   rW   r   r5   r0   r0   r1   rZ   h  s    z_SimpleQueue.getc                 C   s   |  t| d S r3   )r   r   r   rd   r0   r0   r1   rU   l  s    z_SimpleQueue.putc                 C   sT   | j d ur(z| j   W d | _ nd | _ 0 | jd urPz| j  W d | _nd | _0 d S r3   )r   rf   r   r5   r0   r0   r1   rf   p  s    

z_SimpleQueue.close)FFN)r   r   r   r   r2   r_   r6   r9   r   r   rZ   rU   rf   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   sb   z|d }W n t y&   tdY n0 tjdd\| _| _| | _tj	dkrX| n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&0    Y  d S r3   )r    r   rI   r5   r0   r0   r1   r     s    zSimpleQueue.get_payloadc                 C   sN   | j d u r| j| n2| j  | j| W d    n1 s@0    Y  d S r3   )r&   r   rH   r   r0   r0   r1   r     s    
zSimpleQueue.send_payloadN)r   r   r   r2   r   r   r0   r0   r0   r1   r   ~  s   	r   )!
__future__r   r$   r!   r:   r=   ru   r    r   r   compatr   Zfiver   r   r	   utilr
   r   r   r   r   r   Z	reductionr   __all__objectr   rz   r   r   r   r0   r0   r0   r1   <module>	   s&     x32