ó
8Þ	Pc           @   s¤  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 d d d d d	 d
 d d d d d d g Z d Z d Z	 d Z
 d Z d Z d Z d Z d a e a d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z e j ƒ  Z e  j ƒ  Z d „  Z d  „  Z i  Z  e  j ƒ  Z! d e" f d! „  ƒ  YZ# d d" „ Z$ d# „  Z% e a& d$ „  Z' e j( e' ƒ d e" f d% „  ƒ  YZ) d e j* f d& „  ƒ  YZ+ d S('   iÿÿÿÿN(   t   current_processt   active_childrent	   sub_debugt   debugt   infot   sub_warningt
   get_loggert   log_to_stderrt   get_temp_dirt   register_after_forkt
   is_exitingt   Finalizet   ForkAwareThreadLockt   ForkAwareLocalt   SUBDEBUGt
   SUBWARNINGi    i   i
   i   i   t   multiprocessings+   [%(levelname)s/%(processName)s] %(message)sc         G   s    t  r t  j t |  | Œ n  d  S(   N(   t   _loggert   logR   (   t   msgt   args(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   B   s    c         G   s    t  r t  j t |  | Œ n  d  S(   N(   R   R   t   DEBUG(   R   R   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   F   s    c         G   s    t  r t  j t |  | Œ n  d  S(   N(   R   R   t   INFO(   R   R   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   J   s    c         G   s    t  r t  j t |  | Œ n  d  S(   N(   R   R   R   (   R   R   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   N   s    c          C   s×   d d l  }  d d l } |  j ƒ  z£ t sÄ |  j t ƒ a d t _ |  j t d ƒ |  j t	 d ƒ t
 | d ƒ r | j t ƒ | j t ƒ qÄ | j j t d i  f ƒ | j j t d i  f ƒ n  Wd |  j ƒ  Xt S(	   s0   
    Returns logger used by multiprocessing
    iÿÿÿÿNi    R   R   t
   unregister(    (    (   t   loggingt   atexitt   _acquireLockR   t	   getLoggert   LOGGER_NAMEt	   propagatet   addLevelNameR   R   t   hasattrR   t   _exit_functiont   registert   _exithandlerst   removet   appendt   _releaseLock(   R   R   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   R   s    
	 c         C   sj   d d l  } t ƒ  } | j t ƒ } | j ƒ  } | j | ƒ | j | ƒ |  r` | j |  ƒ n  t a	 t
 S(   sB   
    Turn on logging and add a handler which prints to stderr
    iÿÿÿÿN(   R   R   t	   Formattert   DEFAULT_LOGGING_FORMATt   StreamHandlert   setFormattert
   addHandlert   setLevelt   Truet   _log_to_stderrR   (   t   levelR   t   loggert	   formattert   handler(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   o   s    	c          C   s   t  ƒ  j d  k rw d d  l }  d d  l } | j d d ƒ } t d | ƒ t d  |  j d | g d d ƒ| t  ƒ  _ n  t  ƒ  j S(   Niÿÿÿÿt   prefixs   pymp-s   created temp directory %sR   t   exitpriorityiœÿÿÿ(	   R    t   _tempdirt   Nonet   shutilt   tempfilet   mkdtempR   R   t   rmtree(   R6   R7   t   tempdir(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   …   s    c          C   sq   t  t j ƒ  ƒ }  |  j ƒ  xN |  D]F \ \ } } } } y | | ƒ Wq# t k
 rh } t d | ƒ q# Xq# Wd  S(   Ns    after forker raised exception %s(   t   listt   _afterfork_registryt   itemst   sortt	   ExceptionR   (   R=   t   indext   identt   funct   objt   e(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   _run_after_forkers–   s    
c         C   s#   |  t  t j ƒ  t |  ƒ | f <d  S(   N(   R<   t   _afterfork_countert   nextt   id(   RC   RB   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR	   Ÿ   s    c           B   sG   e  Z d  Z d d d d „ Z d d „ Z d „  Z d „  Z d „  Z RS(   sA   
    Class which supports object finalization using weakrefs
    c         C   s¡   | d  k s$ t | ƒ t k s$ t ‚ | d  k	 rH t j | |  ƒ |  _ n | d  k	 sZ t ‚ | |  _ | |  _ | pu i  |  _	 | t
 j ƒ  f |  _ |  t |  j <d  S(   N(   R5   t   typet   intt   AssertionErrort   weakreft   reft   _weakreft	   _callbackt   _argst   _kwargst   _finalizer_counterRG   t   _keyt   _finalizer_registry(   t   selfRC   t   callbackR   t   kwargsR3   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   __init__®   s    $		c         C   s   y t  |  j =Wn t k
 r+ t d ƒ n^ Xt d |  j |  j |  j ƒ |  j |  j |  j Ž  } d |  _ |  _ |  _ |  _ |  _ | Sd S(   sQ   
        Run the callback unless it has already been called or cancelled
        s   finalizer no longer registereds/   finalizer calling %s with args %s and kwargs %sN(	   RT   RS   t   KeyErrorR   RO   RP   RQ   R5   RN   (   RU   t   wrt   res(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   __call__½   s    %c         C   sK   y t  |  j =Wn t k
 r! n& Xd |  _ |  _ |  _ |  _ |  _ d S(   s3   
        Cancel finalization of the object
        N(   RT   RS   RY   R5   RN   RO   RP   RQ   (   RU   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   cancelÍ   s
    c         C   s   |  j  t k S(   sS   
        Return whether this finalizer is still waiting to invoke callback
        (   RS   RT   (   RU   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   still_activeÙ   s    c         C   sÛ   y |  j  ƒ  } Wn t t f k
 r/ d  } n X| d  k r@ d Sd t |  j d |  j ƒ } |  j r | d t |  j ƒ 7} n  |  j r¢ | d t |  j ƒ 7} n  |  j	 d d  k	 rÓ | d t |  j	 d ƒ 7} n  | d S(	   Ns   <Finalize object, dead>s   <Finalize object, callback=%st   __name__s   , args=s	   , kwargs=i    s   , exitprority=t   >(
   RN   t   AttributeErrort	   TypeErrorR5   t   getattrRO   RP   t   strRQ   RS   (   RU   RC   t   x(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   __repr__ß   s    
		(    N(	   R_   t
   __module__t   __doc__R5   RX   R\   R]   R^   Rf   (    (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   ª   s   		c            sØ   ˆ  d k r d „  } n ‡  f d †  } g  t j ƒ  D] } | | ƒ r4 | ^ q4 } | j d t ƒ xV | D]N \ } } t d | ƒ y | ƒ  Wqi t k
 r¶ d d l } | j ƒ  qi Xqi Wˆ  d k rÔ t j	 ƒ  n  d S(   sà   
    Run all finalizers whose exit priority is not None and at least minpriority

    Finalizers with highest priority are called first; finalizers with
    the same priority will be called in reverse order of creation.
    c         S   s   |  d d d  k	 S(   Ni    (   R5   (   t   p(    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   <lambda>û   s    c            s&   |  d d d  k	 o% |  d d ˆ  k S(   Ni    (   R5   (   Ri   (   t   minpriority(    s*   /usr/lib/python2.7/multiprocessing/util.pyRj   ý   s    t   reverses
   calling %siÿÿÿÿN(
   R5   RT   R=   R>   R,   R   R?   t	   tracebackt	   print_exct   clear(   Rk   t   fRe   R=   t   keyt	   finalizerRm   (    (   Rk   s*   /usr/lib/python2.7/multiprocessing/util.pyt   _run_finalizersó   s    +c           C   s   t  p t  d k S(   s6   
    Returns true if the process is shutting down
    N(   t   _exitingR5   (    (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR
     s    c          C   sž   t  d ƒ t d ƒ t d ƒ x: t ƒ  D]/ }  |  j r( t  d |  j ƒ |  j j ƒ  q( q( Wx+ t ƒ  D]  }  t  d |  j ƒ |  j ƒ  qe Wt d ƒ t ƒ  d  S(   Ns   process shutting downs2   running all "atexit" finalizers with priority >= 0i    s!   calling terminate() for daemon %ss   calling join() for process %ss)   running the remaining "atexit" finalizers(	   R   R   Rs   R   t	   _daemonict   namet   _popent	   terminatet   join(   Ri   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR      s    


	
c           B   s   e  Z d  „  Z RS(   c         C   sA   t  j ƒ  |  _ |  j j |  _ |  j j |  _ t |  t j ƒ d  S(   N(   t	   threadingt   Lockt   _lockt   acquiret   releaseR	   R   RX   (   RU   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyRX   3  s    (   R_   Rg   RX   (    (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   2  s   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  |  d „  ƒ d  S(   Nc         S   s   |  j  j ƒ  S(   N(   t   __dict__Ro   (   RC   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyRj   ;  s    (   R	   (   RU   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyRX   :  s    c         C   s   t  |  ƒ d f S(   N(    (   RI   (   RU   (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt
   __reduce__<  s    (   R_   Rg   RX   R€   (    (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyR   9  s   	(,   t	   itertoolsRL   R   Rz   t   multiprocessing.processR    R   t   __all__t   NOTSETR   R   R   R   R   R'   R5   R   t   FalseR-   R   R   R   R   R   R   R   t   WeakValueDictionaryR<   t   countRF   RE   R	   RT   RR   t   objectR   Rs   R
   Rt   R    R!   R   t   localR   (    (    (    s*   /usr/lib/python2.7/multiprocessing/util.pyt   <module>#   sL   										I		