???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \*                 @   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
 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  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dS )+r   r   c            C   s   |dkrddl m} || _tjdd\| _| _|j | _t	j
 | _tjdkrTd | _n
|j | _|j|| _d| _| j  tjdkrt| tj d S )Nr   r   )SEM_VALUE_MAXF)duplexwin32)Zsynchronizer   _maxsizer   Pipe_reader_writerLock_rlockosgetpid_opidsysplatform_wlockZBoundedSemaphore_sem_ignore_epipe_after_forkr   r   )selfmaxsizectx r$   ./usr/lib64/python3.6/multiprocessing/queues.py__init__$   s    




zQueue.__init__c             C   s.   t j|  | 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__9   s    
zQueue.__getstate__c          	   C   s0   |\| _ | _| _| _| _| _| _| _| j  d S )N)	r   r   r   r   r   r   r   r   r    )r!   stater$   r$   r%   __setstate__>   s    $zQueue.__setstate__c             C   sb   t d tjtj | _tj | _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_poll)r!   r$   r$   r%   r    C   s    


zQueue._after_forkTNc          	   C   s\   | j  st| jj||st| j. | jd kr8| j  | jj	| | jj
  W d Q R X d S )N)r4   AssertionErrorr   acquirer   r-   r1   _start_threadr0   appendnotify)r!   objblocktimeoutr$   r$   r%   putP   s    
z	Queue.putc          
   C   s   |r2|d kr2| j  | j }W d Q R X | jj  nr|rBtj | }| j j||sTtzB|rv|tj  }| j|stn| j st| j }| jj  W d | j j  X t	j
|S )N)r   r9   r   releasetimeZ	monotonicr=   r   r;   _ForkingPicklerloads)r!   rB   rC   resZdeadliner$   r$   r%   get[   s&    
z	Queue.getc             C   s   | j | jjj  S )N)r   r   _semlockZ
_get_value)r!   r$   r$   r%   qsizes   s    zQueue.qsizec             C   s
   | j   S )N)r;   )r!   r$   r$   r%   emptyw   s    zQueue.emptyc             C   s   | j jj S )N)r   rK   _is_zero)r!   r$   r$   r%   fullz   s    z
Queue.fullc             C   s
   | j dS )NF)rJ   )r!   r$   r$   r%   
get_nowait}   s    zQueue.get_nowaitc             C   s   | j |dS )NF)rD   )r!   rA   r$   r$   r%   
put_nowait   s    zQueue.put_nowaitc             C   s2   d| _ z| jj  W d | j}|r,d | _|  X d S )NT)r4   r   closer5   )r!   rR   r$   r$   r%   rR      s    zQueue.closec             C   s$   t d | jst| jr | j  d S )NzQueue.join_thread())r
   r4   r<   r2   )r!   r$   r$   r%   join_thread   s    
zQueue.join_threadc             C   s6   t d d| _y| jj  W n tk
r0   Y nX d S )NzQueue.cancel_join_thread()T)r
   r3   r2   ZcancelAttributeError)r!   r$   r$   r%   cancel_join_thread   s    zQueue.cancel_join_threadc             C   s   t d | jj  tjtj| j| j| j| j	| j
j| jfdd| _d| j_t d | jj  t d | jst| jtjtj| 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
   r0   clearr+   ZThreadr   _feedr-   r7   r   r   rR   r   r1   Zdaemonstartr3   r   _finalize_joinweakrefrefr2   _finalize_closer5   )r!   r$   r$   r%   r>      s(    




zQueue._start_threadc             C   s4   t d |  }|d k	r(|j  t d nt d d S )Nzjoining queue threadz... queue thread joinedz... queue thread already dead)r
   join)ZtwrZthreadr$   r$   r%   r_      s    
zQueue._finalize_joinc          	   C   s.   t d | | jt |j  W d Q R X d S )Nztelling queue thread to quit)r
   r?   	_sentinelr@   )buffernotemptyr$   r$   r%   rb      s    
zQueue._finalize_closec             C   sP  t d |j}|j}|j}| j}	t}
tjdkr<|j}|j}nd }xy|  z| sX|  W d |  X ybx\|	 }||
krt d |  d S tj	|}|d kr|| qh|  z|| W d |  X qhW W n t
k
r   Y nX W qD tk
rF } zJ|rt|ddtjkrd S t r&td| d S dd l}|j  W Y d d }~X qDX qDW d S )Nz$starting thread to feed data to piper   z%feeder thread got sentinel -- exitingerrnor   zerror in queue thread: %s)r
   r=   rE   waitpopleftrd   r   r   rG   dumps
IndexError	Exceptiongetattrrg   ZEPIPEr   r   	traceback	print_exc)re   rf   r6   Z	writelockrR   Zignore_epipeZnacquireZnreleaseZnwaitZbpopleftsentinelZwacquireZwreleaserA   ern   r$   r$   r%   r]      sR    





zQueue._feed)r   )TN)TN)__name__
__module____qualname__r&   r(   r*   r    rD   rJ   rL   rM   rO   rP   rQ   rR   rS   rU   r>   staticmethodr_   rb   r]   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 |jd| _|j | _d S )N)r#   r   )r   r&   Z	Semaphore_unfinished_tasksr,   _cond)r!   r"   r#   r$   r$   r%   r&     s    zJoinableQueue.__init__c             C   s   t j| | j| jf S )N)r   r(   rw   rv   )r!   r$   r$   r%   r(     s    zJoinableQueue.__getstate__c             C   s,   t j| |d d  |dd  \| _| _d S )N   ry   )r   r*   rw   rv   )r!   r)   r$   r$   r%   r*     s    zJoinableQueue.__setstate__TNc             C   sx   | j  st| jj||st| jJ | j8 | jd kr@| j  | j	j
| | jj  | jj  W d Q R X W d Q R X d S )N)r4   r<   r   r=   r   r-   rw   r1   r>   r0   r?   rv   rE   r@   )r!   rA   rB   rC   r$   r$   r%   rD     s    

zJoinableQueue.putc          	   C   s@   | j 0 | jjdstd| jjj r2| j j  W d Q R X d S )NFz!task_done() called too many times)rw   rv   r=   
ValueErrorrK   rN   Z
notify_all)r!   r$   r$   r%   	task_done'  s
    zJoinableQueue.task_donec          	   C   s,   | j  | jjj s| j j  W d Q R X d S )N)rw   rv   rK   rN   rh   )r!   r$   r$   r%   rc   .  s    zJoinableQueue.join)r   )TN)	rr   rs   rt   r&   r(   r*   rD   r{   rc   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j| _tj	dkr:d | _
n
|j | _
d S )NF)r   r   )r   r   r   r   r   r   r:   r;   r   r   r   )r!   r#   r$   r$   r%   r&   9  s    


zSimpleQueue.__init__c             C   s
   | j   S )N)r;   )r!   r$   r$   r%   rM   B  s    zSimpleQueue.emptyc             C   s   t j|  | j| j| j| jfS )N)r	   r'   r   r   r   r   )r!   r$   r$   r%   r(   E  s    
zSimpleQueue.__getstate__c             C   s"   |\| _ | _| _| _| j j| _d S )N)r   r   r   r   r:   r;   )r!   r)   r$   r$   r%   r*   I  s    zSimpleQueue.__setstate__c          	   C   s&   | j  | jj }W d Q R X tj|S )N)r   r   r8   rG   rH   )r!   rI   r$   r$   r%   rJ   M  s    zSimpleQueue.getc          	   C   sD   t j|}| jd kr"| jj| n| j | jj| W d Q R X d S )N)rG   rj   r   r   r6   )r!   rA   r$   r$   r%   rD   S  s
    

zSimpleQueue.putN)	rr   rs   rt   r&   rM   r(   r*   rJ   rD   r$   r$   r$   r%   r   7  s   	)__all__r   r   r+   r.   rF   r`   rg   Zqueuer   r   Z_multiprocessing r   r	   Z	reductionZForkingPicklerrG   utilr
   r   r   r   r   objectr   rd   r   r   r$   r$   r$   r%   <module>
   s$   
 b
*