ó
è¾bc           @   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 m Z m Z m Z d d	 l m Z m Z m Z m Z m Z d d
 l m Z d  e f d „  ƒ  YZ e ƒ  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   t   Queuet   SimpleQueuet   JoinableQueueiÿÿÿÿN(   t   Emptyt   Fulli   (   t   Pipe(   t   Lockt   BoundedSemaphoret	   Semaphoret	   Condition(   t   debugt   infot   Finalizet   register_after_forkt
   is_exiting(   t   assert_spawningc           B   sË   e  Z d  d „ Z d „  Z d „  Z d „  Z e d d „ Z e d d „ Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   i    c         C   sÀ   | d k r t  j j } n  | |  _ t d t ƒ \ |  _ |  _ t ƒ  |  _	 t
 j ƒ  |  _ t j d k ru d  |  _ n t ƒ  |  _ t | ƒ |  _ |  j ƒ  t j d k r¼ t |  t j ƒ n  d  S(   Ni    t   duplext   win32(   t   _multiprocessingt   SemLockt   SEM_VALUE_MAXt   _maxsizeR   t   Falset   _readert   _writerR   t   _rlockt   ost   getpidt   _opidt   syst   platformt   Nonet   _wlockR   t   _semt   _after_forkR   R    (   t   selft   maxsize(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   __init__:   s    	
c         C   s8   t  |  ƒ |  j |  j |  j |  j |  j |  j |  j f S(   N(   R   R   R   R   R   R    R!   R   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   __getstate__L   s    
c         C   s>   | \ |  _  |  _ |  _ |  _ |  _ |  _ |  _ |  j ƒ  d  S(   N(   R   R   R   R   R    R!   R   R"   (   R#   t   state(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   __setstate__Q   s    0c         C   s   t  d ƒ t j t j ƒ  ƒ |  _ t j ƒ  |  _ d  |  _	 d  |  _
 t |  _ t |  _ d  |  _ |  j j |  _ |  j j |  _ |  j j |  _ d  S(   Ns   Queue._after_fork()(   R
   t	   threadingR	   R   t	   _notemptyt   collectionst   dequet   _bufferR   t   _threadt   _jointhreadR   t   _joincancelledt   _closedt   _closeR   t   sendt   _sendR   t   recvt   _recvt   pollt   _poll(   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR"   V   s    
					c         C   s   |  j  s t ‚ |  j j | | ƒ s. t ‚ n  |  j j ƒ  z= |  j d  k rZ |  j ƒ  n  |  j	 j
 | ƒ |  j j ƒ  Wd  |  j j ƒ  Xd  S(   N(   R1   t   AssertionErrorR!   t   acquireR   R*   R.   R   t   _start_threadR-   t   appendt   notifyt   release(   R#   t   objt   blockt   timeout(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   putc   s    	c         C   s  | rT | d  k rT |  j j ƒ  z! |  j ƒ  } |  j j ƒ  | SWd  |  j j ƒ  Xn¯ | rm t j ƒ  | } n  |  j j | | ƒ s‹ t ‚ n  zg | r¿ | t j ƒ  } |  j | ƒ sÔ t ‚ qÔ n |  j ƒ  sÔ t ‚ n  |  j ƒ  } |  j j ƒ  | SWd  |  j j ƒ  Xd  S(   N(	   R   R   R:   R6   R!   R>   t   timeR   R8   (   R#   R@   RA   t   rest   deadline(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   getq   s,    		c         C   s   |  j  |  j j j ƒ  S(   N(   R   R!   t   _semlockt
   _get_value(   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   qsize   s    c         C   s   |  j  ƒ  S(   N(   R8   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   empty‘   s    c         C   s   |  j  j j ƒ  S(   N(   R!   RG   t   _is_zero(   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   full”   s    c         C   s   |  j  t ƒ S(   N(   RF   R   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt
   get_nowait—   s    c         C   s   |  j  | t ƒ S(   N(   RB   R   (   R#   R?   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt
   put_nowaitš   s    c         C   sD   t  |  _ z |  j j ƒ  Wd  |  j } | r? d  |  _ | ƒ  n  Xd  S(   N(   t   TrueR1   R   t   closeR2   R   (   R#   RP   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRP      s    			c         C   s3   t  d ƒ |  j s t ‚ |  j r/ |  j ƒ  n  d  S(   Ns   Queue.join_thread()(   R
   R1   R9   R/   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   join_thread§   s    
	c         C   s<   t  d ƒ t |  _ y |  j j ƒ  Wn t k
 r7 n Xd  S(   Ns   Queue.cancel_join_thread()(   R
   RO   R0   R/   t   cancelt   AttributeError(   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   cancel_join_thread­   s    
	c      	   C   só   t  d ƒ |  j j ƒ  t j d t j d |  j |  j |  j |  j	 |  j
 j f d d ƒ |  _ t |  j _ t  d ƒ |  j j ƒ  t  d ƒ |  j sÅ t |  j t j t j |  j ƒ g d d	 ƒ|  _ n  t |  t j |  j |  j g d d
 ƒ|  _ d  S(   Ns   Queue._start_thread()t   targett   argst   namet   QueueFeederThreads   doing self._thread.start()s   ... done self._thread.start()t   exitpriorityiûÿÿÿi
   (   R
   R-   t   clearR)   t   ThreadR    t   _feedR*   R4   R    R   RP   R.   RO   t   daemont   startR0   R   t   _finalize_joint   weakreft   refR/   t   _finalize_closeR2   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR;   µ   s(    
		

		c         C   sD   t  d ƒ |  ƒ  } | d  k	 r6 | j ƒ  t  d ƒ n
 t  d ƒ d  S(   Ns   joining queue threads   ... queue thread joineds   ... queue thread already dead(   R
   R   t   join(   t   twrt   thread(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR_   Õ   s    
	
c         C   sA   t  d ƒ | j ƒ  z |  j t ƒ | j ƒ  Wd  | j ƒ  Xd  S(   Ns   telling queue thread to quit(   R
   R:   R<   t	   _sentinelR=   R>   (   t   buffert   notempty(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRb   ß   s    

c         C   s[  t  d ƒ | j } | j } | j } |  j } t }	 t j d k rX | j }
 | j } n d  }
 xö y¬ | ƒ  z |  s~ | ƒ  n  Wd  | ƒ  Xyn xg | ƒ  } | |	 k rº t  d ƒ | ƒ  d  S|
 d  k rÓ | | ƒ q |
 ƒ  z | | ƒ Wd  | ƒ  Xq WWn t	 k
 rn XWqa t
 k
 rR} t ƒ  r9t d | ƒ d  Sd d  l } | j ƒ  qa Xqa Wd  S(   Ns$   starting thread to feed data to pipeR   s%   feeder thread got sentinel -- exitings   error in queue thread: %siÿÿÿÿ(   R
   R:   R>   t   waitt   popleftRf   R   R   R   t
   IndexErrort	   ExceptionR   R   t	   tracebackt	   print_exc(   Rg   Rh   R3   t	   writelockRP   t   nacquiret   nreleaset   nwaitt   bpopleftt   sentinelt   wacquiret   wreleaseR?   t   eRm   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR\   é   sL    
						
	N(   t   __name__t
   __module__R%   R&   R(   R"   RO   R   RB   RF   RI   RJ   RL   RM   RN   RP   RQ   RT   R;   t   staticmethodR_   Rb   R\   (    (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR    8   s$   									
			 

c           B   sG   e  Z d  d „ Z d „  Z d „  Z e d d „ Z d „  Z d „  Z	 RS(   i    c         C   s/   t  j |  | ƒ t d ƒ |  _ t ƒ  |  _ d  S(   Ni    (   R    R%   R   t   _unfinished_tasksR	   t   _cond(   R#   R$   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR%   )  s    c         C   s   t  j |  ƒ |  j |  j f S(   N(   R    R&   R|   R{   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR&   .  s    c         C   s.   t  j |  | d  ƒ | d \ |  _ |  _ d  S(   Niþÿÿÿ(   R    R(   R|   R{   (   R#   R'   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR(   1  s    c         C   s´   |  j  s t ‚ |  j j | | ƒ s. t ‚ n  |  j j ƒ  |  j j ƒ  zJ |  j d  k rg |  j	 ƒ  n  |  j
 j | ƒ |  j j ƒ  |  j j ƒ  Wd  |  j j ƒ  |  j j ƒ  Xd  S(   N(   R1   R9   R!   R:   R   R*   R|   R.   R   R;   R-   R<   R{   R>   R=   (   R#   R?   R@   RA   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRB   5  s    	c         C   si   |  j  j ƒ  zG |  j j t ƒ s1 t d ƒ ‚ n  |  j j j ƒ  rS |  j  j ƒ  n  Wd  |  j  j ƒ  Xd  S(   Ns!   task_done() called too many times(	   R|   R:   R{   R   t
   ValueErrorRG   RK   t
   notify_allR>   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt	   task_doneF  s    c         C   sH   |  j  j ƒ  z& |  j j j ƒ  s2 |  j  j ƒ  n  Wd  |  j  j ƒ  Xd  S(   N(   R|   R:   R{   RG   RK   Ri   R>   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRc   P  s
    N(
   Rx   Ry   R%   R&   R(   RO   R   RB   R   Rc   (    (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR   '  s   			
c           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s\   t  d t ƒ \ |  _ |  _ t ƒ  |  _ t j d k rB d  |  _	 n t ƒ  |  _	 |  j
 ƒ  d  S(   NR   R   (   R   R   R   R   R   R   R   R   R   R    t   _make_methods(   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR%   ^  s    c         C   s   |  j  j ƒ  S(   N(   R   R7   (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRJ   g  s    c         C   s&   t  |  ƒ |  j |  j |  j |  j f S(   N(   R   R   R   R   R    (   R#   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR&   j  s    
c         C   s,   | \ |  _  |  _ |  _ |  _ |  j ƒ  d  S(   N(   R   R   R   R    R€   (   R#   R'   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR(   n  s    c            s«   |  j  j ‰ |  j j |  j j ‰  ‰ ‡  ‡ ‡ f d †  } | |  _ |  j d  k rd |  j j	 |  _
 nC |  j j	 ‰ |  j j |  j j ‰ ‰ ‡ ‡ ‡ f d †  } | |  _
 d  S(   Nc              s!   ˆ  ƒ  z ˆ ƒ  SWd  ˆ ƒ  Xd  S(   N(    (    (   t   racquireR5   t   rrelease(    s,   /usr/lib/python2.7/multiprocessing/queues.pyRF   u  s    c            s$   ˆ ƒ  z ˆ  |  ƒ SWd  ˆ ƒ  Xd  S(   N(    (   R?   (   R3   Ru   Rv   (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRB   ƒ  s    (   R   R5   R   R:   R>   RF   R    R   R   R3   RB   (   R#   RF   RB   (    (   R   R5   R‚   R3   Ru   Rv   s,   /usr/lib/python2.7/multiprocessing/queues.pyR€   r  s    	(   Rx   Ry   R%   RJ   R&   R(   R€   (    (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR   \  s
   					(   t   __all__R   R   R)   R+   RC   t   atexitR`   R    R   R   R   t    R   t   synchronizeR   R   R   R	   t   utilR
   R   R   R   R   t   forkingR   t   objectRf   R   R   (    (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   <module>#   s"   "(å	
5