
8	Pc           @   s  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 g Z d	   Z d  d
 l m	 Z	 d e	 f d     YZ
 d   Z e
 j e e
 j  e  d   Z e
 j e e j  e  e
 j e e j  e  y d  d l m Z Wn e k
 rn# Xd   Z d   Z e
 j e e  e j d k rwd  d l Z e  j Z e  j Z e  j Z d e  f d     YZ! n}d  d l" Z" d  d l# Z# d  d l$ Z$ d  d l Z d  d l% m& Z& m' Z' m( Z( d d l m) Z) d  d l m* Z* m+ Z+ d d  Z- d Z. e j d k oe/ e d e0  Z1 e j2 j3   j4 d  Z5 e& j6 Z e& j7 Z e5 rge  j8 j9 e j: d  a; n	 e j2 a; d   Z< d e0 d  Z d e  f d     YZ! d   Z= d    Z> d!   Z? d"   Z@ d#   ZA d$   ZB e
 j e' eB  e
 j e( eB  g  ZC d%   ZD d S(&   iN(   t   utilt   processt   Popent   assert_spawningt   exitt	   duplicatet   closet   ForkingPicklerc         C   s,   t  j   s( t d t |   j   n  d  S(   NsF   %s objects should only be shared between processes through inheritance(   R   t   thread_is_spawningt   RuntimeErrort   typet   __name__(   t   self(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR   /   s    (   t   Picklerc           B   s&   e  Z e j j   Z e d     Z RS(   c            s      f d   } | |  j  | <d  S(   Nc            s#     |  } |  j  d | |  d  S(   Nt   obj(   t   save_reduce(   R   R   t   rv(   t   reduce(    s-   /usr/lib/python2.7/multiprocessing/forking.pyt
   dispatcher@   s    (   t   dispatch(   t   clsR
   R   R   (    (   R   s-   /usr/lib/python2.7/multiprocessing/forking.pyt   register>   s    (   R   t
   __module__R   R   t   copyt   classmethodR   (    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR   ;   s   c         C   sE   |  j  d  k r( t |  j |  j j f f St |  j  |  j j f f Sd  S(   N(   t   im_selft   Nonet   getattrt   im_classt   im_funct	   func_name(   t   m(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   _reduce_methodE   s    c         C   s   t  |  j |  j f f S(   N(   R   t   __objclass__R   (   R   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   _reduce_method_descriptorL   s    (   t   partialc         C   s"   t  |  j |  j |  j p i  f f S(   N(   t   _rebuild_partialt   funct   argst   keywords(   t   p(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   _reduce_partial[   s    c         C   s   t  |  | |  S(   N(   R#   (   R%   R&   R'   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR$   ]   s    t   win32c           B   sD   e  Z d    Z e j d  Z d d  Z d   Z e	 d    Z
 RS(   c         C   s   t  j j   t  j j   d  |  _ t j   |  _ |  j d k r d t  j	 k ri d d  l
 } | j   n  | j   } t  j j   t  j j   t j |  n  d  S(   Ni    t   randomi(   t   syst   stdoutt   flusht   stderrR   t
   returncodet   ost   forkt   pidt   modulesR+   t   seedt
   _bootstrapt   _exit(   R   t   process_objR+   t   code(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   __init__s   s    	c         C   s   |  j  d  k r y t j |  j |  \ } } Wn t j k
 rE d  SX| |  j k r t j |  rz t j |  |  _  q t j |  s t	  t j
 |  |  _  q n  |  j  S(   N(   R0   R   R1   t   waitpidR3   t   errort   WIFSIGNALEDt   WTERMSIGt	   WIFEXITEDt   AssertionErrort   WEXITSTATUS(   R   t   flagR3   t   sts(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   poll   s    c         C   s   | d  k r |  j d  St j   | } d } xb |  j   } | d  k	 rN Pn  | t j   } | d k rn Pn  t | d | d  } t j |  q2 | S(   Ni    gMb@?i   g?(   R   RD   t   timet   mint   sleep(   R   t   timeoutt   deadlinet   delayt   rest	   remaining(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   wait   s    c         C   sd   |  j  d  k r` y t j |  j t j  Wq` t k
 r\ } |  j d d  d  k r]   q] q` Xn  d  S(   NRH   g?(	   R0   R   R1   t   killR3   t   signalt   SIGTERMt   OSErrorRM   (   R   t   e(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt	   terminate   s    c           C   s   t  S(   N(   t   False(    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR      s    N(   R   R   R:   R1   t   WNOHANGRD   R   RM   RS   t   staticmethodR   (    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR   q   s
   		(   R*   t
   Connectiont   PipeConnectioni   (   t   Finalize(   t   loadt   HIGHEST_PROTOCOLc         C   s   t  | |  j |   d  S(   N(   R   t   dump(   R   t   filet   protocol(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR\      s    i   t   frozens   pythonservice.exes
   python.exec         C   s
   |  a  d  S(   N(   t   _python_exe(   t   exe(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   set_executable   s    c         C   sF   | d  k r t j   } n  t j t j   |  | d | t j  j   S(   Ni    (   R   t   _subprocesst   GetCurrentProcesst   DuplicateHandlet   DUPLICATE_SAME_ACCESSt   Detach(   t   handlet   target_processt   inheritable(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR      s
    c           B   s_   e  Z d  Z e j   Z d   Z e d    Z e d    Z	 d d  Z d   Z d   Z RS(   sH   
        Start a subprocess to run the code of a process object
        c      
   C   s7  t  j   \ } } t t j |  d t } t  j |  t   | g } d j d   | D  } t	 j
 t | d  d  d d d  d  d  	 \ } } } }	 | j   t |  | |  _ d  |  _ | |  _ t | j  }
 t  j | d  } t |  t j _ z$ t |
 | t  t | | t  Wd  t j ` | j   Xd  S(   NRj   t    c         s   s   |  ] } d  | Vq d S(   s   "%s"N(    (   t   .0t   x(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pys	   <genexpr>   s    i   i    t   wb(   R1   t   pipeR   t   msvcrtt   get_osfhandlet   TrueR   t   get_command_linet   joinRc   t   CreateProcessR`   R   t   CloseR3   R0   t   _handlet   get_preparation_datat   _namet   fdopent   intR   t   _tlst   process_handleR\   R[   (   R   R8   t   rfdt   wfdt   rhandlet   cmdt   hpt   htR3   t   tidt	   prep_datat   to_child(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR:      s(    -

				c           C   s   t  t j d d   d  k	 S(   NR}   (   R   R   R|   R   (    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR     s    c         C   s   t  |  t j j  S(   N(   R   R   R|   R}   (   Rh   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   duplicate_for_child  s    c         C   s   |  j  d  k r | d  k r' t j } n t d t | d d   } t j t |  j  |  } | t j k r t j	 |  j  } | t
 k r t j } n  | |  _  q n  |  j  S(   Ni    i  g      ?(   R0   R   Rc   t   INFINITEt   maxR{   t   WaitForSingleObjectRw   t   WAIT_OBJECT_0t   GetExitCodeProcesst	   TERMINATERO   RP   (   R   RH   t   msecsRK   R9   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyRM     s    c         C   s   |  j  d d  S(   NRH   i    (   RM   (   R   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyRD   ,  s    c         C   se   |  j  d  k ra y t j t |  j  t  Wqa t k
 r] |  j d d  d  k r^   q^ qa Xn  d  S(   NRH   g?(	   R0   R   Rc   t   TerminateProcessR{   Rw   R   t   WindowsErrorRM   (   R   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyRS   /  s    N(   R   R   t   __doc__t   threadt   _localR|   R:   RV   R   R   R   RM   RD   RS   (    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR      s   	!	c         C   sF   t  |   d k r> |  d d k r> t  |   d k s: t  t St Sd S(   sE   
        Return whether commandline indicates we are forking
        i   i   s   --multiprocessing-forki   N(   t   lenR@   Rr   RT   (   t   argv(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt
   is_forking;  s    "c           C   s'   t  t j  r# t   t j   n  d S(   sM   
        Run code for process object if this in not the main process
        N(   R   R,   R   t   mainR   (    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   freeze_supportF  s    c          C   sl   t  j   j d k r3 t t j  r3 t d   n  t t d t  rR t j	 d g Sd }  t
 d |  d g Sd S(   sR   
        Returns prefix of command line used for spawning a child process
        s  
            Attempt to start a new process before the current process
            has finished its bootstrapping phase.

            This probably means that you are on Windows and you have
            forgotten to use the proper idiom in the main module:

                if __name__ == '__main__':
                    freeze_support()
                    ...

            The "freeze_support()" line can be omitted if the program
            is not going to be frozen to produce a Windows executable.R_   s   --multiprocessing-forks0   from multiprocessing.forking import main; main()s   -cN(    (   R   t   current_processt	   _identityR   R,   R   R	   R   RT   t
   executableR`   (   t   prog(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyRs   O  s    $c          C   s   t  t j  s t  t t j d  }  t j |  t j  } t j	 | d  } t
 t j   _ t |  } t |  t |  } t t j   _ | j   | j   } t |  d S(   s>   
        Run code specifed by data received over pipe
        it   rbN(   R   R,   R   R@   R{   Rp   t   open_osfhandleR1   t   O_RDONLYRz   Rr   R   R   t   _inheritingRZ   t   prepareRT   R   R6   R   (   Rh   t   fdt   from_parentt   preparation_dataR   t   exitcode(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR   i  s    

c         C   s.  d d l  m } m } t d |  d t j d t j d | d t j d t j	   j
  } | d k	 rt | j   | d	 <n  t r*t r*t t j d
 d d  } | r t j d d k r t j d } n  | d k	 r*t j j |  rt j d k	 rt j j t j |  } n  t j j |  | d <q*n  | S(   sU   
        Return info about parent needed by child to unpickle process object
        i   (   t   _loggert   _log_to_stderrt   namet   sys_patht   sys_argvt   log_to_stderrt   orig_dirt   authkeyt	   log_levelt   __main__t   __file__i    t    s   -ct	   main_pathN(   R   s   -c(   R    R   R   t   dictR,   t   pathR   R   t   ORIGINAL_DIRR   R   R   t   getEffectiveLevelt   WINEXEt
   WINSERVICER   R4   R1   t   isabsRt   t   normpath(   R   R   R   t   dR   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyRx     s(    			c         C   sV   t  j   s( t d t |   j   n  t |   t  j |  j    |  j |  j f f S(   NsL   By default %s objects can only be shared between processes
using inheritance(	   R   R   R	   R
   R   R   t   filenot   readablet   writable(   t   conn(    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   reduce_connection  s    c   
      C   s  t  j t j d  d |  k r6 |  d t j   _ n  d |  k rX |  d t j   _ n  d |  k r{ |  d r{ t j	   n  d |  k r t j
   j |  d  n  d |  k r |  d t _ n  d |  k r |  d t _ n  d |  k r t j |  d  n  d	 |  k r|  d	 t _ n  d
 |  k r|  d
 } t j j t j j |   d } | d k rzt j j t j j |   } n  | d k rd d l } | d k rd } nT t j j |  j d  rt j j t j j |   g } n t j j |  g } | t j k st |  | j | |  \ } } } z | j d | | |  } Wd | r`| j   n  X| t j d <d | _ xM | j j   D]9 }	 y |	 j d k rd |	 _ n  Wqt k
 rqXqWqn  d S(   sE   
    Try to get current process ready to unpickle process object
    R   R   R   R   R   R   R   t   dirR   R   i    R:   t   ipythoniNs   __init__.pyt   __parents_main__(    t   old_main_modulest   appendR,   R4   R   R   R   t   _authkeyR    R   t
   get_loggert   setLevelR   R   R1   t   chdirR   t   splitextt   basenamet   dirnamet   impR   t
   startswithR@   t   find_modulet   load_moduleR   R   t   __dict__t   valuesR   t	   Exception(
   t   dataR   t	   main_nameR   t   dirsR]   t	   path_namet   etct   main_moduleR   (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyR     sX    
"!	$	(E   R1   R,   RO   t   multiprocessingR    R   t   __all__R   t   pickleR   R   R    R   R
   t   saveR"   t   listR   R{   t   __add__t	   functoolsR#   t   ImportErrorR)   R$   t   platformRE   R7   R   t   dupR   R   t   objectR   R   Rp   Rc   t   _multiprocessingR*   RW   RX   RY   RZ   R[   R   R\   R   R   RT   R   R   t   lowert   endswithR   t   ExitProcesst   CloseHandleR   Rt   t   exec_prefixR`   Rb   R   R   Rs   R   Rx   R   R   R   (    (    (    s-   /usr/lib/python2.7/multiprocessing/forking.pyt   <module>#   sl   	
							B!				N						"		