U
    -e.                     @   s   d ddg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
 zddlZW n ek
rz   ddlZY nX 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  d eZe ZG dd deZG dd deZdS )QueueSimpleQueueJoinableQueue    N)EmptyFull   )
connection)context)debuginfoFinalizeregister_after_fork
is_exitingc                   @   s   e 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ed(d) ZdS )-r   r   c                C   s   |dkrddl m} || _tjdd\| _| _| | _t	
 | _tjdkrTd | _n
| | _||| _d| _|   tjdkrt| tj d S )Nr   r   )SEM_VALUE_MAXFZduplexwin32)Zsynchronizer   _maxsizer   Pipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockBoundedSemaphore_sem_ignore_epipe_after_forkr   r   selfmaxsizectx r&   T/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/multiprocess/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#   r&   r&   r'   __getstate__<   s    
   zQueue.__getstate__c              	   C   s0   |\| _ | _| _| _| _| _| _| _|   d S r)   )	r    r   r   r   r   r   r   r   r!   r#   stater&   r&   r'   __setstate__A   s       zQueue.__setstate__c                 C   sb   t d tt | _t | _d | _d | _	d| _
d| _d | _| 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_bytes_send_bytesr   
recv_bytes_recv_bytespoll_pollr+   r&   r&   r'   r!   F   s    


zQueue._after_forkTNc              	   C   sf   | j rtd| d| j||s(t| j. | jd krB|   | j	| | j
  W 5 Q R X d S NQueue 
 is closed)r9   
ValueErrorr   acquirer   r2   r6   _start_threadr5   appendnotifyr#   objblocktimeoutr&   r&   r'   putS   s    
z	Queue.putc              	   C   s   | j rtd| d|rH|d krH| j |  }W 5 Q R X | j  n|r`ttdtj | }| j||srt	zJ|r|ttdtj  }| 
|st	n| 
 st	|  }| j  W 5 | j  X t|S )NrB   rC   	monotonic)r9   rD   r   r>   r   releasegetattrtimerE   r   r@   _ForkingPicklerloads)r#   rK   rL   resdeadliner&   r&   r'   get_   s*    
z	Queue.getc                 C   s   | j | jj  S r)   )r   r   _semlock
_get_valuer+   r&   r&   r'   qsizey   s    zQueue.qsizec                 C   s
   |    S r)   r@   r+   r&   r&   r'   empty}   s    zQueue.emptyc                 C   s   | j j S r)   )r   rW   _is_zeror+   r&   r&   r'   full   s    z
Queue.fullc                 C   s
   |  dS NF)rV   r+   r&   r&   r'   
get_nowait   s    zQueue.get_nowaitc                 C   s   |  |dS r^   )rM   r#   rJ   r&   r&   r'   
put_nowait   s    zQueue.put_nowaitc                 C   s2   d| _ z| j  W 5 | j}|r,d | _|  X d S )NT)r9   r:   r   close)r#   rb   r&   r&   r'   rb      s    zQueue.closec                 C   s.   t d | jstd| | jr*|   d S )NzQueue.join_thread()zQueue {0!r} not closed)r
   r9   AssertionErrorformatr7   r+   r&   r&   r'   join_thread   s    zQueue.join_threadc                 C   s6   t d d| _z| j  W n tk
r0   Y nX d S )NzQueue.cancel_join_thread()T)r
   r8   r7   cancelAttributeErrorr+   r&   r&   r'   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| j| jfdd| _d| j_t d | j  t d | j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)targetargsnameTzdoing self._thread.start()z... done self._thread.start())Zexitpriority
   )r
   r5   clearr0   Threadr   _feedr2   r<   r   r   rb   r    _on_queue_feeder_errorr   r6   daemonstartr8   r   _finalize_joinweakrefrefr7   _finalize_closer:   r+   r&   r&   r'   rF      s<    
   
  
zQueue._start_threadc                 C   s4   t d |  }|d k	r(|  t d nt d d S )Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r
   join)Ztwrthreadr&   r&   r'   rt      s    
zQueue._finalize_joinc              	   C   s.   t d | | t |  W 5 Q R X d S )Nztelling queue thread to quit)r
   rG   	_sentinelrH   )buffernotemptyr&   r&   r'   rw      s    
zQueue._finalize_closec              
   C   sX  t d |j}|j}	|j}
| j}t}tjdkr<|j}|j}nd }z|  z| sT|
  W 5 |	  X zb| }||krt d |  W W d S t	|}|d kr|| qb|  z|| W 5 |  X qbW n t
k
r   Y nX W q@ tk
rP } zV|rt|ddtjkrW Y 6d S t r.td| W Y d S |  ||| W 5 d }~X Y q@X q@d S )Nz$starting thread to feed data to piper   z%feeder thread got sentinel -- exitingerrnor   zerror in queue thread: %s)r
   rE   rO   waitpopleftrz   r   r   rR   dumps
IndexError	ExceptionrP   r}   EPIPEr   r   )r{   r|   r;   Z	writelockrb   Zignore_epipeonerrorZ	queue_semZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserJ   er&   r&   r'   rp      sN    







zQueue._feedc                 C   s   ddl }|  dS )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   rJ   r   r&   r&   r'   rq     s    zQueue._on_queue_feeder_error)r   )TN)TN)__name__
__module____qualname__r(   r,   r/   r!   rM   rV   rY   r[   r]   r_   ra   rb   re   rh   rF   staticmethodrt   rw   rp   rq   r&   r&   r&   r'   r   %   s.   



 
	

=c                   @   s@   e 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   r   c                C   s*   t j| ||d |d| _| | _d S )N)r%   r   )r   r(   	Semaphore_unfinished_tasksr1   _condr"   r&   r&   r'   r(   &  s    zJoinableQueue.__init__c                 C   s   t | | j| jf S r)   )r   r,   r   r   r+   r&   r&   r'   r,   +  s    zJoinableQueue.__getstate__c                 C   s,   t | |d d  |dd  \| _| _d S )N)r   r/   r   r   r-   r&   r&   r'   r/   .  s    zJoinableQueue.__setstate__TNc              
   C   s   | j rtd| d| j||s(t| jJ | j8 | jd krJ|   | j	
| | j  | j  W 5 Q R X W 5 Q R X d S rA   )r9   rD   r   rE   r   r2   r   r6   rF   r5   rG   r   rO   rH   rI   r&   r&   r'   rM   2  s    

zJoinableQueue.putc              	   C   s@   | j 0 | jdstd| jj r2| j   W 5 Q R X d S )NFz!task_done() called too many times)r   r   rE   rD   rW   r\   
notify_allr+   r&   r&   r'   	task_done?  s
    zJoinableQueue.task_donec              	   C   s,   | j  | jj s| j   W 5 Q R X d S r)   )r   r   rW   r\   r~   r+   r&   r&   r'   rx   F  s    zJoinableQueue.join)r   )TN)	r   r   r   r(   r,   r/   rM   r   rx   r&   r&   r&   r'   r   $  s   

c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )r   c                C   sH   t jdd\| _| _| | _| jj| _tj	dkr:d | _
n
| | _
d S )NFr   r   )r   r   r   r   r   r   r?   r@   r   r   r   )r#   r%   r&   r&   r'   r(   Q  s    


zSimpleQueue.__init__c                 C   s
   |    S r)   rZ   r+   r&   r&   r'   r[   Z  s    zSimpleQueue.emptyc                 C   s   t |  | j| j| j| jfS r)   )r	   r*   r   r   r   r   r+   r&   r&   r'   r,   ]  s    
zSimpleQueue.__getstate__c                 C   s"   |\| _ | _| _| _| j j| _d S r)   )r   r   r   r   r?   r@   r-   r&   r&   r'   r/   a  s    zSimpleQueue.__setstate__c              	   C   s&   | j  | j }W 5 Q R X t|S r)   )r   r   r=   rR   rS   )r#   rT   r&   r&   r'   rV   e  s    zSimpleQueue.getc              	   C   sD   t |}| jd kr"| j| n| j | j| W 5 Q R X d S r)   )rR   r   r   r   r;   r`   r&   r&   r'   rM   k  s
    

zSimpleQueue.putN)	r   r   r   r(   r[   r,   r/   rV   rM   r&   r&   r&   r'   r   O  s   	)__all__r   r   r0   r3   rQ   ru   r}   queuer   r   Z_multiprocess_multiprocessingImportError r   r	   Z	reductionZForkingPicklerrR   utilr
   r   r   r   r   objectr   rz   r   r   r&   r&   r&   r'   <module>
   s*   
 v
+