ó
è¾bc           @   s2  d  d d g Z  d d l Z d d l Z d d l Z d d l Z y e j j e j ƒ  ƒ Z Wn e	 k
 rt d Z n Xd „  Z d „  Z d „  Z d  e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ e ƒ  a [ i  Z xG e j j ƒ  D]6 \ Z Z e d  d k rô d e k rô e e e <qô qô Wd S(   t   Processt   current_processt   active_childreniÿÿÿÿNc           C   s   t  S(   s@   
    Return process object representing the current process
    (   t   _current_process(    (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR   ;   s    c           C   s   t  ƒ  t t j ƒ S(   sN   
    Return list of process objects corresponding to live child processes
    (   t   _cleanupt   listR   t	   _children(    (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR   A   s    c          C   sF   x? t  t j ƒ D]. }  |  j j ƒ  d  k	 r t j j |  ƒ q q Wd  S(   N(   R   R   R   t   _popent   pollt   Nonet   discard(   t   p(    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR   L   s    c           B   sõ   e  Z d  Z d Z d d d d i  d „ Z d „  Z d „  Z d „  Z d d „ Z	 d „  Z
 e d „  ƒ Z e j d „  ƒ Z e d	 „  ƒ Z e j d
 „  ƒ Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e Z d „  Z d „  Z RS(   s€   
    Process objects represent activity that is run in a separate process

    The class is analagous to `threading.Thread`
    c         C   s×   | d  k s t d ƒ ‚ t j j ƒ  } t j | f |  _ t j |  _ t j |  _ t j |  _ t	 j
 ƒ  |  _ d  |  _ | |  _ t | ƒ |  _ t | ƒ |  _ | pÍ t |  ƒ j d d j d „  |  j Dƒ ƒ |  _ d  S(   Ns#   group argument must be None for nowt   -t   :c         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   str(   t   .0t   i(    (    s-   /usr/lib/python2.7/multiprocessing/process.pys	   <genexpr>k   s    (   R	   t   AssertionErrorR   t   _countert   nextt	   _identityt   _authkeyt	   _daemonict   _tempdirt   ost   getpidt   _parent_pidR   t   _targett   tuplet   _argst   dictt   _kwargst   typet   __name__t   joint   _name(   t   selft   groupt   targett   namet   argst   kwargst   count(    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   __init__^   s    		c         C   s&   |  j  r" |  j  |  j |  j Ž  n  d S(   sQ   
        Method to be run in sub-process; can be overridden in sub-class
        N(   R   R   R   (   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   runm   s    	c         C   s¹   |  j  d k s t d ƒ ‚ |  j t j ƒ  k s< t d ƒ ‚ t j sR t d ƒ ‚ t ƒ  |  j	 d k	 rt |  j	 } n d d l
 m } | |  ƒ |  _  |  ` |  ` |  ` t j j |  ƒ d S(   s%   
        Start child process
        s   cannot start a process twices:   can only start a process object created by current processs3   daemonic processes are not allowed to have childreni   (   t   PopenN(   R   R	   R   R   R   R   R   R   R   t   _Popent   forkingR-   R   R   R   R   t   add(   R$   R-   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   startt   s    		c         C   s   |  j  j ƒ  d S(   sT   
        Terminate process; sends SIGTERM signal or uses TerminateProcess()
        N(   R   t	   terminate(   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR2   ˆ   s    c         C   sq   |  j  t j ƒ  k s! t d ƒ ‚ |  j d k	 s< t d ƒ ‚ |  j j | ƒ } | d k	 rm t j j	 |  ƒ n  d S(   s5   
        Wait until child process terminates
        s   can only join a child processs   can only join a started processN(
   R   R   R   R   R   R	   t   waitR   R   R
   (   R$   t   timeoutt   res(    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR"   Ž   s
    !c         C   s{   |  t  k r t S|  j t j ƒ  k s1 t d ƒ ‚ |  j d k rD t S|  j j	 ƒ  } | d k rc t St  j
 j |  ƒ t Sd S(   s1   
        Return whether process is alive
        s   can only test a child processN(   R   t   TrueR   R   R   R   R   R	   t   FalseR   R   R
   (   R$   t
   returncode(    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   is_alive˜   s    !c         C   s   |  j  S(   N(   R#   (   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR'   ª   s    c         C   s(   t  | t ƒ s t d ƒ ‚ | |  _ d  S(   Ns   name must be a string(   t
   isinstancet
   basestringR   R#   (   R$   R'   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR'   ®   s    c         C   s   |  j  S(   s4   
        Return whether process is a daemon
        (   R   (   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   daemon³   s    c         C   s(   |  j  d k s t d ƒ ‚ | |  _ d S(   s1   
        Set whether process is a daemon
        s   process has already startedN(   R   R	   R   R   (   R$   t   daemonic(    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR<   º   s    c         C   s   |  j  S(   N(   R   (   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   authkeyÂ   s    c         C   s   t  | ƒ |  _ d S(   s2   
        Set authorization key of process
        N(   t   AuthenticationStringR   (   R$   R>   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR>   Æ   s    c         C   s#   |  j  d k r |  j  S|  j  j ƒ  S(   sM   
        Return exit code of process or `None` if it has yet to stop
        N(   R   R	   R   (   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   exitcodeÍ   s    c         C   s-   |  t  k r t j ƒ  S|  j o( |  j j Sd S(   sU   
        Return identifier (PID) of process or `None` if it has yet to start
        N(   R   R   R   R   t   pid(   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   identÖ   s    
c         C   sç   |  t  k r d } n] |  j t j ƒ  k r3 d } n? |  j d  k rK d } n' |  j j ƒ  d  k	 rl |  j } n d } t | ƒ t	 t
 f k r¸ | d k rŸ d } q¸ d t j | | ƒ } n  d t |  ƒ j |  j | |  j rß d pâ d	 f S(
   Nt   startedt   unknownt   initiali    t   stoppeds   stopped[%s]s   <%s(%s, %s%s)>s    daemont    (   R   R   R   R   R   R	   R   R@   R    t   intt   longt   _exitcode_to_namet   getR!   R#   R   (   R$   t   status(    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   __repr__â   s    				c         C   s¤  d d l  m } y« t ƒ  |  _ t j d ƒ |  _ y# t j j	 ƒ  t
 t j ƒ t _ Wn t t f k
 rm n X|  a | j j ƒ  | j ƒ  | j d ƒ z |  j ƒ  d } Wd  | j ƒ  XWnÑ t k
 rH} | j sß d } qt | j d t t f ƒ rt | j d ƒ } qt j j t | j d ƒ d ƒ t j j ƒ  d } nG d } d d  l } t j j d |  j  ƒ t j j ƒ  | j! ƒ  n X| j d | ƒ | S(	   Ni   (   t   utils    child process calling self.run()i    s   
iÿÿÿÿs   Process %s:
s    process exiting with exitcode %d("   RG   RN   t   setR   t	   itertoolsR*   R   t   syst   stdint   closet   openR   t   devnullt   OSErrort
   ValueErrorR   t   _finalizer_registryt   cleart   _run_after_forkerst   infoR,   t   _exit_functiont
   SystemExitR(   R:   RH   RI   t   stderrt   writeR   t   flusht	   tracebackR'   t	   print_exc(   R$   RN   R@   t   eRa   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt
   _bootstrapú   sB    


		!	N(    (   R!   t
   __module__t   __doc__R	   R.   R+   R,   R1   R2   R"   R9   t   propertyR'   t   setterR<   R>   R@   RB   RA   RM   Rd   (    (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR    V   s&   			
		
	R?   c           B   s   e  Z d  „  Z RS(   c         C   s>   d d l  m } | j ƒ  s+ t d ƒ ‚ n  t t |  ƒ f f S(   Ni   (   R-   sJ   Pickling an AuthenticationString object is disallowed for security reasons(   R/   R-   t   thread_is_spawningt	   TypeErrorR?   t   bytes(   R$   R-   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt
   __reduce__'  s
    (   R!   Re   Rl   (    (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR?   &  s   t   _MainProcessc           B   s   e  Z d  „  Z RS(   c         C   sp   d |  _  t |  _ d |  _ d  |  _ d  |  _ t j d ƒ |  _	 t
 ƒ  |  _ t t j d ƒ ƒ |  _ d  |  _ d  S(   Nt   MainProcessi   i    (    (   R   R7   R   R#   R	   R   R   RP   R*   R   RO   R   R?   R   t   urandomR   R   (   R$   (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyR+   6  s    					(   R!   Re   R+   (    (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyRm   4  s   i   t   SIGt   _(   t   __all__R   RQ   t   signalRP   t   patht   abspatht   getcwdt   ORIGINAL_DIRRV   R	   R   R   R   t   objectR    Rk   R?   Rm   R   RJ   t   __dict__t   itemsR'   t   signum(    (    (    s-   /usr/lib/python2.7/multiprocessing/process.pyt   <module>#   s(   
			
Ð	