ó
8Þ	Pc           @   s8  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 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   Full(   t   Pipe(   t   Lockt   BoundedSemaphoret	   Semaphoret	   Condition(   t   debugt   infot   Finalizet   register_after_fork(   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(   R0   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  zO |  j | rª | t j ƒ  p­ d ƒ s¼ t ‚ n  |  j ƒ  } |  j j ƒ  | SWd  |  j j ƒ  Xd  S(   Ng        (	   R   R   R9   R5   R    R=   t   timeR   R7   (   R"   R?   R@   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(   R7   (   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   empty   s    c         C   s   |  j  j j ƒ  S(   N(   R    RF   t   _is_zero(   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   full   s    c         C   s   |  j  t ƒ S(   N(   RE   R   (   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt
   get_nowait“   s    c         C   s   |  j  | t ƒ S(   N(   RA   R   (   R"   R>   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt
   put_nowait–   s    c         C   s0   t  |  _ |  j j ƒ  |  j r, |  j ƒ  n  d  S(   N(   t   TrueR0   R   t   closeR1   (   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRO   ™   s    		c         C   s3   t  d ƒ |  j s t ‚ |  j r/ |  j ƒ  n  d  S(   Ns   Queue.join_thread()(   R
   R0   R8   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
   RN   R/   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 t j ƒ  k } |  j râ | râ 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)   R3   R   R   RO   R-   RN   t   daemont   startR   R   R   R/   R   t   _finalize_joint   weakreft   refR.   t   _finalize_closeR1   (   R"   t   created_by_this_process(    (    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
   R9   R;   t	   _sentinelR<   R=   (   t   buffert   notempty(    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRa   Ý   s    

c         C   s€  t  d ƒ d d l m } | j } | j } | j } |  j }	 t }
 t j	 d k rh | j } | j } n d  } y± xª | ƒ  z |  sŽ | ƒ  n  Wd  | ƒ  Xym xf |	 ƒ  } | |
 k rÊ t  d ƒ | ƒ  d  S| d  k rã | | ƒ q  | ƒ  z | | ƒ Wd  | ƒ  Xq  Wqt t k
 rqt Xqt WnZ t k
 r{} y3 | ƒ  rMt d | ƒ n d d  l } | j ƒ  Wq|t k
 rwq|Xn Xd  S(   Ns$   starting thread to feed data to pipei   (   t
   is_exitingR   s%   feeder thread got sentinel -- exitings   error in queue thread: %siÿÿÿÿ(   R
   t   utilRi   R9   R=   t   waitt   popleftRf   R   R   R   t
   IndexErrort	   ExceptionR   t	   tracebackt	   print_exc(   Rg   Rh   R2   t	   writelockRO   Ri   t   nacquiret   nreleaset   nwaitt   bpopleftt   sentinelt   wacquiret   wreleaseR>   t   eRo   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR[   ç   sR    
						
	N(   t   __name__t
   __module__R$   R%   R'   R!   RN   R   RA   RE   RH   RI   RK   RL   RM   RO   RP   RS   R:   t   staticmethodR^   Ra   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%   0  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'   3  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(   R0   R8   R    R9   R   R)   R~   R-   R   R:   R,   R;   R}   R=   R<   (   R"   R>   R?   R@   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRA   7  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~   R9   R}   R   t
   ValueErrorRF   RJ   t
   notify_allR=   (   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt	   task_doneH  s    c         C   sH   |  j  j ƒ  z& |  j j j ƒ  s2 |  j  j ƒ  n  Wd  |  j  j ƒ  Xd  S(   N(   R~   R9   R}   RF   RJ   Rk   R=   (   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRc   R  s
    N(
   Rz   R{   R$   R%   R'   RN   R   RA   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   R6   (   R"   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRI   i  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%   l  s    
c         C   s,   | \ |  _  |  _ |  _ |  _ |  j ƒ  d  S(   N(   R   R   R   R   R‚   (   R"   R&   (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR'   p  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   racquireR4   t   rrelease(    s,   /usr/lib/python2.7/multiprocessing/queues.pyRE   w  s    c            s$   ˆ  ƒ  z ˆ |  ƒ SWd  ˆ ƒ  Xd  S(   N(    (   R>   (   Rw   Rx   R2   (    s,   /usr/lib/python2.7/multiprocessing/queues.pyRA   …  s    (   R   R4   R   R9   R=   RE   R   R   R   R2   RA   (   R"   RE   RA   (    (   Rw   Rƒ   R2   Rx   R4   R„   s,   /usr/lib/python2.7/multiprocessing/queues.pyR‚   t  s    	(   Rz   R{   R$   RI   R%   R'   R‚   (    (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyR   ^  s
   					(   t   __all__R   R   R(   R*   RB   t   atexitR_   R    R   R   R   t   multiprocessingR   t   multiprocessing.synchronizeR   R   R   R	   t   multiprocessing.utilR
   R   R   R   t   multiprocessing.forkingR   t   objectRf   R   R   (    (    (    s,   /usr/lib/python2.7/multiprocessing/queues.pyt   <module>#   s"   ""ç	
5