ó
ßüÚ\c           @` s&  d  d l  m Z m Z m 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 m Z d  d l Z d  d l m Z m Z m Z m Z d  d l m Z d  d l m Z d  d l m Z d  d	 l m Z m Z d  d
 l  m! Z! m" Z" m# Z# m$ Z$ m% Z% e! d g  ƒ d „  ƒ Z& e! d g  ƒ d „  ƒ Z' e! d e ƒ d „  ƒ Z( e! d g  d d d e) ƒ d „  ƒ Z* d „  Z+ e! d g  ƒ d „  ƒ Z, e# e! d e d d5 g d i e- d 6ƒ d „  ƒ ƒ Z. d e f d „  ƒ  YZ/ e! d e) d e ƒ d „  ƒ Z0 e! d e) d e d i e/ d 6ƒ d „  ƒ Z1 e# e! d e- d g  ƒ d  „  ƒ ƒ Z2 e! d e) d e ƒ d! „  ƒ Z3 e j4 j5 e j6 j7 d" ƒ d# d$ ƒe! d e- d g  ƒ d% „  ƒ ƒ Z8 e j4 j5 e j6 j7 d& ƒ d# d' ƒe! d e) d g  ƒ d( „  ƒ ƒ Z9 e" ƒ  d) „  ƒ Z: e! d e) d e d d6 g ƒ d+ „  ƒ Z; e! d d7 g d e) d e d i d, d- 6d d d. e- ƒ d/ „  ƒ Z< e! d g  d e) ƒ d0 „  ƒ Z= e! d g  d e) ƒ d1 „  ƒ Z> e# e" ƒ  d2 „  ƒ ƒ Z? e! d g  d e) ƒ d3 „  ƒ Z@ e! d g  d e) ƒ d4 „  ƒ ZA d S(8   i    (   t   print_functiont   divisiont   absolute_importN(   t   valmapt   first(   t   gen(   t   Nannyt   rpct	   Schedulert   Worker(   t   CommClosedError(   t   time(   t   dumps(   t   ignoringt   tmpfile(   t   gen_clustert   gen_testt   slowt   inct   captured_loggert   ncoresc         c` s³  t  |  j |  j d d d |  j ƒV} t | j ƒ n} | j ƒ  sI t ‚ |  j | j	 d k se t ‚ |  j
 | j	 j d d k sˆ t ‚ | j ƒ  V| j ƒ  s¦ t ‚ | j	 |  j k s¾ t ‚ | j	 |  j
 k sÖ t ‚ | j ƒ  V| j ƒ  sô t ‚ | j	 |  j k st ‚ | j	 |  j
 k s$t ‚ | j ƒ  V| j ƒ  sAt ‚ |  j | j	 d k s]t ‚ |  j
 | j	 j d d k s€t ‚ | j ƒ  V| j ƒ  sžt ‚ Wd  QX| j ƒ  Vd  S(   NR   i   t   loopt   nannyi   (   R   t   ipt   portR   R   t   addresst   is_alivet   AssertionErrorR   t   worker_addresst   workerst   servicest   killt   instantiatet	   terminatet   close(   t   st   nt   nn(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt
   test_nanny   s(    %##c         c` sˆ   t  |  j d d d |  j ƒV} | j ƒ  s1 t ‚ g  t d ƒ D] } | j ƒ  ^ q> Vg  t d ƒ D] } | j ƒ  ^ qb V| j ƒ  Vd  S(   NR   i   R   i   (   R   R   R   R   R   t   rangeR   R"   (   R#   R$   t   i(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_many_kills6   s
    $$R	   c         C` s|   | j  t | ƒ k s t ‚ | j  t | ƒ k s6 t ‚ t | j ƒ t | ƒ k sW t ‚ t | j ƒ t | ƒ k sx t ‚ d  S(   N(   R   t   strR   t   reprR   (   R#   t   at   b(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_str?   s    !t   timeouti   t   clientc   	   	   c` s(  t  | j | j d d d | j ƒV} | j } t j j | ƒ sF t ‚ | j	 } t
 | j	 ƒ } | j d t t i d d 6d d 6ƒ ƒ V| j } | d  k	 s¡ t ‚ t t ƒ % |  j t j d d	 | j	 g ƒVWd  QXt ƒ  } x: | j | k rt j d
 ƒ Vt ƒ  | d k  sà t ‚ qà Wt ƒ  } x7 | j ƒ  s\t j d
 ƒ Vt ƒ  | d k  s&t ‚ q&Wt ƒ  } xL | j	 | j k sŠ| j d  k r´t j d
 ƒ Vt ƒ  | d k  sit ‚ qiW| j } | j ƒ  Vt j j | ƒ sât ‚ t j j | ƒ sût ‚ | | j k st ‚ | j ƒ  | j ƒ  d  S(   NR   i   R   t   datai   t   xt   yi    R   g{®Gáz„?i   (   R   R   R   R   t
   worker_dirt   ost   patht   existsR   R   R   t   update_dataR   R   t   pidt   NoneR   R
   t   _runt   _exitR   R   t   sleepR   R   R"   t	   close_rpct   stop(	   t   cR#   R$   t	   first_dirt   original_addresst   wwR9   t   startt
   second_dir(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_process_failureG   s:    %		(	&			$	
c          C` s   t  t d d ƒ ƒ }  d  S(   Ns	   127.0.0.1iR"  (   R*   R   (   t   _(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_no_portq   s    c         c` s¡   t  j d ƒ t |  j |  j d d d |  j ƒV} t | j ƒ O } | j d t	 d „  ƒ ƒ V} | d d k sv t
 ‚ | d	 d
 k sŒ t
 ‚ Wd  QX| j ƒ  Vd  S(   Nt   psutilR   i   R   t   functionc           S` s   d S(   Ni   (    (    (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   <lambda>{   t    t   statust   OKt   resulti   (   t   pytestt   importorskipR   R   R   R   R   R   t   runR   R   R"   (   R#   R$   R%   t   response(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_runu   s    %s	   127.0.0.1i   t   worker_kwargst	   reconnectc         c` sU   |  j  ƒ  Vt ƒ  } x: | j d k rP t j d ƒ Vt ƒ  | d k  s t ‚ q Wd  S(   Nt   closedgš™™™™™©?i	   (   R"   R   RM   R   R=   R   (   R#   t   wRD   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_close_on_disconnect‚   s
    	t	   Somethingc           B` s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRZ      s   c         c` sQ   |  j  d  d „ ƒ V} d t | j ƒ  ƒ d k s8 t ‚ | j t k sM t ‚ d  S(   Nc         S` s   t  |  j ƒ S(   N(   R*   t	   __class__(   t   dask_worker(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   –   RL   R	   i    (   R;   R:   t   listt   valuesR   R	   (   R@   R#   t   w1t   w2t   out(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_worker_class”   s    "t   worker_classc         c` sQ   |  j  d  d „ ƒ V} d t | j ƒ  ƒ d k s8 t ‚ | j t k sM t ‚ d  S(   Nc         S` s   t  |  j ƒ S(   N(   R*   R]   (   R^   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK      RL   RZ   i    (   R;   R:   R_   R`   R   R	   RZ   (   R@   R#   Ra   Rb   Rc   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_alt_worker_class›   s    "c         c` sH   |  j  ƒ  Vt |  j d d ƒV} t j d ƒ V| j d k sD t ‚ d  S(   Nt   death_timeouti   i   RW   (   R"   R   R   R   R=   RM   R   (   R#   RX   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_death_timeout¢   s    c         #` s>   t  j ‡  ‡ ‡ f d †  ƒ } | d „  ƒ V| d „  ƒ Vd  S(   Nc         3` s„   ˆ j  |  d d d t d ˆ  j ƒ} ˆ j  |  d d d t d ˆ j ƒ} | j | j k s` t ‚ | V} | V} | | k s€ t ‚ d  S(   Ni    i   i   t   pureR   I   €    I   €    (   t   submitt   FalseR   t   keyR   (   t   funcR2   R3   (   R,   R-   R@   (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt
   check_func®   s    $$c         S` s   t  j |  | ƒ S(   N(   t   randomt   randint(   R,   R-   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   ·   RL   c         S` s   t  j j |  | ƒ S(   N(   t   npRo   Rp   (   R,   R-   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   ¸   RL   (   R   t	   coroutine(   R@   R#   R,   R-   Rn   (    (   R,   R-   R@   s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_random_seed¬   s    	t   wint   reasons    num_fds not supported on windowsc         c` sò   t  j d ƒ } | j ƒ  } t |  j ƒ V} | j ƒ  V~ t j ƒ  | j ƒ  } x= t	 d ƒ D]/ } t |  j ƒ V} t
 j d ƒ V| j ƒ  Vq\ Wt ƒ  } xS | j ƒ  | k rí t d | | j ƒ  ƒ t
 j d ƒ Vt ƒ  | d k  s› t ‚ q› Wd  S(   NRI   i   gš™™™™™¹?s   fds:i
   (   RP   RQ   t   ProcessR   R   R"   t   gct   collectt   num_fdsR'   R   R=   R   t   printR   (   R#   RI   t   procRX   t   beforeR(   RD   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_num_fds»   s     
	t   linuxs    Need 127.0.0.2 to mean localhostc         c` sz   xs d d g D]e } t  | j ƒ } | j | ƒ Vd „  } |  j | ƒ V} | t | j ƒ  ƒ k sg t ‚ | j ƒ  Vq Wd  S(   Ns   tcp://0.0.0.0s   tcp://127.0.0.2c         S` s
   |  j  j S(   N(   t   listenert   listen_address(   R^   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRm   à   s    (   R   R   t   _startRR   R   R`   R   R"   (   R@   R#   t   hostR$   Rm   RO   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt#   test_worker_uses_same_host_as_nanny×   s    	c          c` sx   t  ƒ  i }  t d |  ƒ } | j d ƒ t d |  ƒ V} t | j ƒ | j h k sY t ‚ | j ƒ  V| j	 ƒ  Wd  QXd  S(   Nt   scheduler_fileiH  (
   R   R   RD   R   t   setR   R   R   R"   R?   (   t   fnR#   RX   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_scheduler_fileè   s    !i   c         c` s¸   |  j  d ƒ V} t t j d ƒ d t j ƒ } | j d d ƒ V} Wd  QX| j ƒ  } d | j ƒ  k sn t ‚ t	 ƒ  } x: | j
 d k r³ t j d ƒ Vt	 ƒ  | d k  sz t ‚ qz Wd  S(	   Ni{   s   distributed.nannyt   levelR/   gš™™™™™¹?s	   timed outt	   cancelledi   (   t   scatterR   t   loggingt	   getLoggert   ERRORt   restartt   getvaluet   lowerR   R   RM   R   R=   (   R@   R#   R,   R2   t   loggerRS   Rc   RD   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_timeoutó   s    	g    „×—At   memory_limitt   check_new_threadsc   	      #` sá   d d l  m ‰  ‡  f d †  } | j j } t t j d ƒ ƒ › } |  j | ƒ } t  ƒ  } x= | j j | k rš t j d ƒ Vt  ƒ  | d k  s^ t	 ‚ q^ W| j
 ƒ  } d | j ƒ  k s¿ t	 ‚ d | j ƒ  k s× t	 ‚ Wd  QXd  S(	   Ni    (   R=   c          ` s2   g  }  x% t  r- |  j d d ƒ ˆ  d ƒ q	 Wd  S(   Nt   0i@KL g{®Gáz„?(   t   Truet   append(   t   L(   R=   (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   leak  s    	s   distributed.nannygš™™™™™¹?i
   RŽ   t   memory(   R   R=   t   processR9   R   R‹   RŒ   Rj   R   R   R   R   (	   R@   R#   R,   R™   R{   R‘   t   futureRD   Rc   (    (   R=   s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_nanny_terminate  s    		c         c` sÛ   t  | j d | j d d ƒV} |  j d „  ƒ V} | i t | j 6k sN t ‚ |  j d „  ƒ V} d | k ss t ‚ d | j k sˆ t ‚ |  j t	 d ƒ } | Vd k s­ t ‚ t
 j d	 ƒ V|  j t	 d ƒ V| j ƒ  Vd  S(
   NR   R“   i    c         S` s   t  |  j ƒ S(   N(   t   typeR1   (   R^   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   $  RL   c         S` s   t  |  j ƒ S(   N(   R_   t   periodic_callbacks(   R^   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   &  RL   Rš   i   i   g{®Gáz”?(   R   R   R   RR   t   dictR   R   RŸ   Rj   R   R   R=   R"   (   R@   R#   R   t   typt   pcsRœ   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt'   test_avoid_memory_monitor_if_zero_limit!  s    c         c` s    t  j j i | j d 6ƒ s t d | j ƒ V} | j j | j k sK t ‚ t ƒ  } x4 | j	 sŠ t
 j d ƒ Vt ƒ  | d k  sW t ‚ qW WWd  QX| j ƒ  Vd  S(   Ns   scheduler-addressR   gš™™™™™¹?i
   (   t   daskt   configR…   R   R   R   t	   schedulerR   R   R   R   R=   R"   (   R@   R#   R   RD   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_scheduler_address_config3  s    	#c          c` s…   t  d ƒ + }  t d ƒ } | j ƒ  t j d ƒ VWd  QX|  j ƒ  }  d |  j ƒ  k sc t |  ƒ ‚ d |  j ƒ  k s t |  ƒ ‚ d  S(   Nt   distributeds   127.0.0.1:44737i   t   errorRŽ   (   R   R   R   R   R=   R   R   R   (   t   logRX   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_wait_for_schedulerA  s    
c      
   c` sµ   t  | j d | j d d d i d d 6ƒ} t  | j d | j d d d i d d 6ƒ} | | g V|  j d „  ƒ V} | i d | j 6d | j 6k sš t ‚ | j ƒ  | j ƒ  g Vd  S(	   NR   R“   i    t   envt   123t   FOOt   456c           S` s   t  j d S(   NR®   (   R5   t   environ(    (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   S  RL   (   R   R   R   RR   R   R   R"   (   R@   R#   R,   R-   t   results(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_environment_variableN  s    ++&c         c` sQ   t  | j d t ƒV} |  j d „  ƒ V} | | j t k sB t ‚ | j ƒ  Vd  S(   NR1   c         S` s   t  |  j ƒ S(   N(   Rž   R1   (   R^   (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyRK   [  RL   (   R   R   R    RR   R   R   R"   (   R@   R#   RX   t   r(    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   test_data_typesX  s    (   s	   127.0.0.1i   (   s	   127.0.0.1i   (   s	   127.0.0.1i   (B   t
   __future__R    R   R   Rw   R‹   R5   Ro   t   syst   numpyRq   RP   t   toolzR   R   t   tornadoR   R¤   R¨   R   R   R   R	   t   distributed.coreR
   t   distributed.metricsR   t   distributed.protocol.pickleR   t   distributed.utilsR   R   t   distributed.utils_testR   R   R   R   R   R&   R)   R.   R–   RF   RH   RT   Rk   RY   RZ   Rd   Rf   Rh   Rs   t   markt   skipift   platformt
   startswithR}   Rƒ   R‡   R’   R   R£   R§   R«   R²   R´   (    (    (    s;   lib/python2.7/site-packages/distributed/tests/test_nanny.pyt   <module>   sh   "(	$*	++!		!	!'	
