Ñò
mÈKc        
   @   s5  d  g Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k l Z l Z l	 Z	 d d k
 l Z l Z d Z d Z d Z e i ƒ  Z d „  Z e f  d	 „ Z d  e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   t   PooliÿÿÿÿN(   t   Processt	   cpu_countt   TimeoutError(   t   Finalizet   debugi    i   i   c         C   s
   t  |  Œ  S(   N(   t   map(   t   args(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   mapstar&   s    c      
   C   s  | i  } |  i } t |  d ƒ o |  i i ƒ  | i i ƒ  n | d  j	 o | | Œ  n x¸ y | ƒ  } Wn$ t t f j
 o t	 d ƒ Pn X| d  j o t	 d ƒ Pn | \ } } }	 }
 } y t
 |	 |
 | Ž  f } Wn! t j
 o } t | f } n X| | | | f ƒ q^ d  S(   Nt   _writers)   worker got EOFError or IOError -- exitings   worker got sentinel -- exiting(   t   putt   gett   hasattrR	   t   closet   _readert   Nonet   EOFErrort   IOErrorR   t   Truet	   Exceptiont   False(   t   inqueuet   outqueuet   initializert   initargsR
   R   t   taskt   jobt   it   funcR   t   kwdst   resultt   e(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   worker-   s,    		

c           B   sò   e  Z d  Z e Z d d d d „ Z d „  Z d h  d „ Z d d „ Z d d „ Z	 d d „ Z
 d h  d d „ Z d d d	 „ Z e d
 „  ƒ Z e d „  ƒ Z e d „  ƒ Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   sH   
    Class which supports an async version of the `apply()` builtin
    c         C   sé  |  i  ƒ  t i ƒ  |  _ h  |  _ t |  _ | d  j o- y t ƒ  } Wqe t j
 o d } qe Xn g  |  _	 xy t
 | ƒ D]k } |  i d t d |  i |  i | | f ƒ } |  i	 i | ƒ | i i d d ƒ | _ t | _ | i ƒ  q{ Wt i d t i d |  i |  i |  i |  i	 f ƒ |  _ t |  i _ t |  i _ |  i i ƒ  t i d t i d |  i |  i |  i f ƒ |  _ t |  i _ t |  i _ |  i i ƒ  t |  |  i d |  i |  i |  i |  i	 |  i |  i |  i f d d ƒ|  _  d  S(   Ni   t   targetR   R   t
   PoolWorkert   exitpriorityi   (!   t   _setup_queuest   Queuet
   _taskqueuet   _cachet   RUNt   _stateR   R   t   NotImplementedErrort   _poolt   rangeR   R    t   _inqueuet	   _outqueuet   appendt   namet   replaceR   t   daemont   startt	   threadingt   ThreadR    t   _handle_taskst
   _quick_putt   _task_handlert   _handle_resultst
   _quick_gett   _result_handlerR   t   _terminate_poolt
   _terminate(   t   selft	   processesR   R   R   t   w(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   __init__S   sH    
			 				$		c         C   sP   d d k  l } | ƒ  |  _ | ƒ  |  _ |  i i i |  _ |  i i i |  _	 d  S(   Ni   (   t   SimpleQueue(
   t   queuesRB   R-   R.   R	   t   sendR7   R   t   recvR:   (   R>   RB   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR$      s
    c         C   s0   |  i  t j p t ‚ |  i | | | ƒ i ƒ  S(   s1   
        Equivalent of `apply()` builtin
        (   R)   R(   t   AssertionErrort   apply_asyncR   (   R>   R   R   R   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   applyˆ   s    c         C   s0   |  i  t j p t ‚ |  i | | | ƒ i ƒ  S(   s/   
        Equivalent of `map()` builtin
        (   R)   R(   RF   t	   map_asyncR   (   R>   R   t   iterablet	   chunksize(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR      s    i   c            sã   |  i  t j p t ‚ | d j oF t |  i ƒ ‰  |  i i ‡  ‡ f d †  t | ƒ Dƒ ˆ  i f ƒ ˆ  S| d j p t ‚ t	 i
 ˆ | | ƒ } t |  i ƒ ‰  |  i i ‡  f d †  t | ƒ Dƒ ˆ  i f ƒ d „  ˆ  Dƒ Sd S(   sZ   
        Equivalent of `itertools.imap()` -- can be MUCH slower than `Pool.map()`
        i   c         3   s4   x- |  ]& \ } } ˆ  i  | ˆ | f h  f Vq Wd  S(   N(   t   _job(   t   .0R   t   x(   R   R   (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>   s   	c         3   s4   x- |  ]& \ } } ˆ  i  | t | f h  f Vq Wd  S(   N(   RL   R   (   RM   R   RN   (   R   (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>¤   s   	c         s   s*   x# |  ] } x | D] } | Vq Wq Wd  S(   N(    (   RM   t   chunkt   item(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>¦   s   	 N(   R)   R(   RF   t   IMapIteratorR'   R&   R
   t	   enumeratet   _set_lengthR    t
   _get_tasks(   R>   R   RJ   RK   t   task_batches(    (   R   R   s*   /usr/lib/python2.6/multiprocessing/pool.pyt   imap–   s    c            sã   |  i  t j p t ‚ | d j oF t |  i ƒ ‰  |  i i ‡  ‡ f d †  t | ƒ Dƒ ˆ  i f ƒ ˆ  S| d j p t ‚ t	 i
 ˆ | | ƒ } t |  i ƒ ‰  |  i i ‡  f d †  t | ƒ Dƒ ˆ  i f ƒ d „  ˆ  Dƒ Sd S(   sK   
        Like `imap()` method but ordering of results is arbitrary
        i   c         3   s4   x- |  ]& \ } } ˆ  i  | ˆ | f h  f Vq Wd  S(   N(   RL   (   RM   R   RN   (   R   R   (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>¯   s   	c         3   s4   x- |  ]& \ } } ˆ  i  | t | f h  f Vq Wd  S(   N(   RL   R   (   RM   R   RN   (   R   (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>¶   s   	c         s   s*   x# |  ] } x | D] } | Vq Wq Wd  S(   N(    (   RM   RO   RP   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>¸   s   	 N(   R)   R(   RF   t   IMapUnorderedIteratorR'   R&   R
   RR   RS   R    RT   (   R>   R   RJ   RK   RU   (    (   R   R   s*   /usr/lib/python2.6/multiprocessing/pool.pyt   imap_unordered¨   s    c         C   sX   |  i  t j p t ‚ t |  i | ƒ } |  i i | i d | | | f g d f ƒ | S(   s>   
        Asynchronous equivalent of `apply()` builtin
        N(	   R)   R(   RF   t   ApplyResultR'   R&   R
   RL   R   (   R>   R   R   R   t   callbackR   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRG   º   s    +c            sè   |  i  t j p t ‚ t | d ƒ p t | ƒ } n | d j oA t t | ƒ t |  i ƒ d ƒ \ } } | o | d 7} q… n t	 i
 | | | ƒ } t |  i | t | ƒ | ƒ ‰  |  i i ‡  f d †  t | ƒ Dƒ d f ƒ ˆ  S(   s<   
        Asynchronous equivalent of `map()` builtin
        t   __len__i   i   c         3   s4   x- |  ]& \ } } ˆ  i  | t | f h  f Vq Wd  S(   N(   RL   R   (   RM   R   RN   (   R   (    s*   /usr/lib/python2.6/multiprocessing/pool.pys	   <genexpr>Ò   s   	N(   R)   R(   RF   R   t   listR   t   divmodt   lenR+   R    RT   t	   MapResultR'   R&   R
   RR   (   R>   R   RJ   RK   RZ   t   extraRU   (    (   R   s*   /usr/lib/python2.6/multiprocessing/pool.pyRI   Ã   s    (c   
   	   C   s9  t  i ƒ  } x¼ t |  i d  ƒ D]ž \ } } d } xˆ t | ƒ D]T \ } } | i o t d ƒ Pn y | | ƒ Wq> t j
 o t d ƒ Pq> Xq> W| o t d ƒ | | d ƒ q q Pq Wt d ƒ y@ t d ƒ | i	 d  ƒ t d ƒ x | D] }	 | d  ƒ qö WWn t j
 o t d	 ƒ n Xt d
 ƒ d  S(   Niÿÿÿÿs'   task handler found thread._state != RUNs   could not put task on queues   doing set_length()i   s   task handler got sentinels/   task handler sending sentinel to result handlers(   task handler sending sentinel to workerss/   task handler got IOError when sending sentinelss   task handler exiting(
   R4   t   current_threadt   iterR   R   RR   R)   R   R   R
   (
   t	   taskqueueR
   R   t   poolt   threadt   taskseqt
   set_lengthR   R   t   p(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR6   Ö   s<      







 c      	   C   s  t  i ƒ  } xÀ y | ƒ  } Wn$ t t f j
 o t d ƒ d  SX| i o& | i t j p t ‚ t d ƒ Pn | d  j o t d ƒ Pn | \ } } } y | | i	 | | ƒ Wq t
 j
 o q Xq x« | o£ | i t j o“ y | ƒ  } Wn$ t t f j
 o t d ƒ d  SX| d  j o t d ƒ qÒ n | \ } } } y | | i	 | | ƒ WqÒ t
 j
 o qÒ XqÒ Wt |  d ƒ oa t d ƒ y7 x0 t d ƒ D]" } |  i i ƒ  p Pn | ƒ  q§WWqît t f j
 o qîXn t d t | ƒ | i ƒ d  S(	   Ns.   result handler got EOFError/IOError -- exitings,   result handler found thread._state=TERMINATEs   result handler got sentinels&   result handler ignoring extra sentinelR   s"   ensuring that outqueue is not fulli
   s7   result handler exiting: len(cache)=%s, thread._state=%s(   R4   Ra   R   R   R   R)   t	   TERMINATERF   R   t   _sett   KeyErrorR   R,   R   t   pollR^   (   R   R   t   cacheRe   R   R   R   t   obj(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR9   ý   s\    



 



 	c         c   sE   t  | ƒ } x2 t t i | | ƒ ƒ } | p d  S|  | f Vq d  S(   N(   Rb   t   tuplet	   itertoolst   islice(   R   t   itt   sizeRN   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRT   7  s    c         C   s   t  d ƒ ‚ d  S(   Ns:   pool objects cannot be passed between processes or pickled(   R*   (   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt
   __reduce__@  s    c         C   s;   t  d ƒ |  i t j o t |  _ |  i i d  ƒ n d  S(   Ns   closing pool(   R   R)   R(   t   CLOSER&   R
   R   (   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR   E  s    
	c         C   s!   t  d ƒ t |  _ |  i ƒ  d  S(   Ns   terminating pool(   R   Ri   R)   R=   (   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt	   terminateK  s    
	c         C   sc   t  d ƒ |  i t t f j p t ‚ |  i i ƒ  |  i i ƒ  x |  i D] } | i ƒ  qK Wd  S(   Ns   joining pool(	   R   R)   Ru   Ri   RF   R8   t   joinR;   R+   (   R>   Rh   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRw   P  s    

 c         C   sZ   t  d ƒ |  i i ƒ  x< | i ƒ  o. |  i i ƒ  o |  i i ƒ  t i d ƒ q Wd  S(   Ns7   removing tasks from inqueue until task handler finishedi    (	   R   t   _rlockt   acquiret   is_aliveR   Rl   RE   t   timet   sleep(   R   t   task_handlerRs   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   _help_stuff_finishX  s    
 c   	      C   s:  t  d ƒ t | _ | i d  ƒ t  d ƒ |  i | | t | ƒ ƒ | i ƒ  p t | ƒ d j p t ‚ t | _ | i d  ƒ | o= t	 | d d ƒ o) t  d ƒ x | D] } | i
 ƒ  q¬ Wn t  d ƒ | i d ƒ t  d ƒ | i d ƒ | o= t	 | d d ƒ o) t  d	 ƒ x | D] } | i ƒ  qWn d  S(
   Ns   finalizing pools&   helping task handler/workers to finishi    Rv   s   terminating workerss   joining task handlerg}Ã”%­I²Ts   joining result handlers   joining pool workers(   R   Ri   R)   R
   R   R~   R^   Rz   RF   R   Rv   Rw   (	   t   clsRc   R   R   Rd   R}   t   result_handlerRm   Rh   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR<   a  s,    
	
'	
 


 N(    (    (    (   t   __name__t
   __module__t   __doc__R   R   RA   R$   RH   R   RV   RX   RG   RI   t   staticmethodR6   R9   RT   Rt   R   Rv   Rw   R~   t   classmethodR<   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR    M   s&   .		':						RY   c           B   sD   e  Z d  „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z RS(   c         C   sS   t  i t  i ƒ  ƒ |  _ t i ƒ  |  _ | |  _ t |  _	 | |  _
 |  | |  i <d  S(   N(   R4   t	   Conditiont   Lockt   _condt   job_countert   nextRL   R'   R   t   _readyt	   _callback(   R>   Rm   RZ   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRA   ˆ  s    			c         C   s   |  i  S(   N(   R‹   (   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   ready  s    c         C   s   |  i  p t ‚ |  i S(   N(   R‹   RF   t   _success(   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt
   successful“  s    c         C   sD   |  i  i ƒ  z" |  i p |  i  i | ƒ n Wd  |  i  i ƒ  Xd  S(   N(   Rˆ   Ry   R‹   t   waitt   release(   R>   t   timeout(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR   —  s
    
c         C   s@   |  i  | ƒ |  i p
 t ‚ n |  i o |  i S|  i ‚ d  S(   N(   R   R‹   R   RŽ   t   _value(   R>   R’   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR   Ÿ  s    


c         C   sƒ   | \ |  _  |  _ |  i o |  i  o |  i |  i ƒ n |  i i ƒ  z t |  _ |  i i ƒ  Wd  |  i i ƒ  X|  i	 |  i
 =d  S(   N(   RŽ   R“   RŒ   Rˆ   Ry   R   R‹   t   notifyR‘   R'   RL   (   R>   R   Rn   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRj   ¨  s    	N(	   R   R‚   RA   R   R   R   R   R   Rj   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRY   †  s   				R_   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   sw   t  i |  | | ƒ t |  _ d  g | |  _ | |  _ | d j o d |  _ t |  _ n | | t	 | | ƒ |  _ d  S(   Ni    (
   RY   RA   R   RŽ   R   R“   t
   _chunksizet   _number_leftR‹   t   bool(   R>   Rm   RK   t   lengthRZ   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRA   º  s    			c         C   s  | \ } } | o¬ | |  i  | |  i | d |  i +|  i d 8_ |  i d j og |  i o |  i |  i  ƒ n |  i |  i =|  i i ƒ  z t |  _	 |  i i
 ƒ  Wd  |  i i ƒ  XqnX t |  _ | |  _  |  i |  i =|  i i ƒ  z t |  _	 |  i i
 ƒ  Wd  |  i i ƒ  Xd  S(   Ni   i    (   R“   R•   R–   RŒ   R'   RL   Rˆ   Ry   R   R‹   R”   R‘   R   RŽ   (   R>   R   t   success_resultt   successR   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRj   Å  s*    "
				(   R   R‚   RA   Rj   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR_   ¸  s   	RQ   c           B   s>   e  Z d  „  Z d „  Z d d „ Z e Z d „  Z d „  Z RS(   c         C   sk   t  i t  i ƒ  ƒ |  _ t i ƒ  |  _ | |  _ t i	 ƒ  |  _
 d |  _ d  |  _ h  |  _ |  | |  i <d  S(   Ni    (   R4   R†   R‡   Rˆ   R‰   RŠ   RL   R'   t   collectionst   dequet   _itemst   _indexR   t   _lengtht	   _unsorted(   R>   Rm   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRA   æ  s    				c         C   s   |  S(   N(    (   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   __iter__ð  s    c         C   sæ   |  i  i ƒ  z¦ y |  i i ƒ  } WnŒ t j
 o€ |  i |  i j o
 t ‚ n |  i  i | ƒ y |  i i ƒ  } Wq² t j
 o* |  i |  i j o
 t ‚ n t	 ‚ q² Xn XWd  |  i  i
 ƒ  X| \ } } | o | S| ‚ d  S(   N(   Rˆ   Ry   R   t   popleftt
   IndexErrorRž   RŸ   t   StopIterationR   R   R‘   (   R>   R’   RP   Rš   t   value(    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRŠ   ó  s&    

c         C   sæ   |  i  i ƒ  zÄ |  i | j o |  i i | ƒ |  i d 7_ xL |  i |  i j o8 |  i i |  i ƒ } |  i i | ƒ |  i d 7_ qB W|  i  i ƒ  n | |  i | <|  i |  i j o |  i	 |  i
 =n Wd  |  i  i ƒ  Xd  S(   Ni   (   Rˆ   Ry   Rž   R   R/   R    t   popR”   RŸ   R'   RL   R‘   (   R>   R   Rn   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRj     s     c         C   s`   |  i  i ƒ  z> | |  _ |  i |  i j o |  i  i ƒ  |  i |  i =n Wd  |  i  i ƒ  Xd  S(   N(   Rˆ   Ry   RŸ   Rž   R”   R'   RL   R‘   (   R>   R˜   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRS     s    	N(	   R   R‚   RA   R¡   R   RŠ   t   __next__Rj   RS   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRQ   ä  s   	
		RW   c           B   s   e  Z d  „  Z RS(   c         C   sv   |  i  i ƒ  zT |  i i | ƒ |  i d 7_ |  i  i ƒ  |  i |  i j o |  i |  i =n Wd  |  i  i	 ƒ  Xd  S(   Ni   (
   Rˆ   Ry   R   R/   Rž   R”   RŸ   R'   RL   R‘   (   R>   R   Rn   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRj   /  s    (   R   R‚   Rj   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRW   -  s   t
   ThreadPoolc           B   sB   e  Z d  d k l Z d d d d „ Z d „  Z e d „  ƒ Z RS(   i   (   R   c         C   s   t  i |  | | | ƒ d  S(   N(   R    RA   (   R>   R?   R   R   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyRA   B  s    c         C   s@   t  i  ƒ  |  _ t  i  ƒ  |  _ |  i i |  _ |  i i |  _ d  S(   N(   R%   R-   R.   R
   R7   R   R:   (   R>   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR$   E  s    c         C   sW   |  i  i ƒ  z5 |  i i ƒ  |  i i d  g | ƒ |  i  i ƒ  Wd  |  i  i ƒ  Xd  S(   N(   t	   not_emptyRy   t   queuet   cleart   extendR   t
   notify_allR‘   (   R   R}   Rs   (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR~   K  s    N(    (	   R   R‚   t   dummyR   R   RA   R$   R„   R~   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyR¨   >  s   	(   t   __all__R4   R%   Rp   R›   R{   t   multiprocessingR   R   R   t   multiprocessing.utilR   R   R(   Ru   Ri   t   countR‰   R   R   R    t   objectR    RY   R_   RQ   RW   R¨   (    (    (    s*   /usr/lib/python2.6/multiprocessing/pool.pyt   <module>	   s(   		 ÿ :2,I