ó
ßüÚ\c           @   s  d  d l  Z  d  d l m Z d  d l m Z m Z m Z m Z m Z d  d l	 m
 Z
 d  d l m Z d  d l Z d  d l m Z e
 d e d d ƒ d	 „  ƒ Z e
 d e d
 g  ƒ d „  ƒ Z e
 d e ƒ d „  ƒ Z e
 d e ƒ d „  ƒ Z e  j d k rd  d l Tn  d S(   iÿÿÿÿN(   t   sleep(   t   Pubt   Subt   waitt
   get_workert   TimeoutError(   t   gen_cluster(   t   time(   t   gent   clientt   timeoutc   
   
   c   sœ   t  d d d „ } d d l } | j j d ƒ } |  j | d d d t d	 | d
 d ƒ} |  j | d d d
 d ƒ} t ƒ  } |  j | | g ƒ Vt ƒ  }	 d S(   sŸ   
    This tests how quickly we can move messages back and forth

    This is mostly a test of latency.

    Interestingly this runs 10x slower on Python 2
    iè  i   c         S   s|   t  |  ƒ } t | ƒ } x | j s1 t d ƒ q W| rH | j | ƒ n  x- t | ƒ D] } t | ƒ } | j | ƒ qU W| S(   Ng{®Gáz„?(   R   R   t   subscribersR    t   putt   ranget   next(   t   at   bt   startt   nt   msgt   subt   pubt   i(    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt   pingpong   s    iÿÿÿÿNR   R   R   R   R   id   (   t   Falset   numpyt   randomt   submitt   TrueR   t   gather(
   t   ct   sR   R   R   t   npt   xt   yR   t   stop(    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt
   test_speed   s    
'	t   ncoresc         c   sÕ   t  j t ƒ  t ƒ  Wd  QXt d ƒ } t d ƒ } | j d } |  j d } t ƒ  } xJ t | j	 d ƒ |  j
 h k s¤ t j d ƒ Vt ƒ  | d k  s[ t ‚ q[ W| j d ƒ | j ƒ  V} | d k sÑ t ‚ d  S(   NR   t   pubsubg{®Gáz„?i   i{   (   t   pytestt   raisest	   ExceptionR   R   R   t
   extensionsR   t   sett   client_subscriberst   idR   R    t   AssertionErrorR   t	   __anext__(   R   R   R   R   t   spst   cpsR   t   result(    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt   test_client4   s    	"c         c   s»  t  d d |  d d  ƒ} d „  } |  j | t d ƒ ƒ } t | ƒ Vg  } x. t d ƒ D]  } | j ƒ  V}	 | j |	 ƒ qW Wt | ƒ t t d ƒ ƒ k sŸ t ‚ | j	 d }
 | j	 d } | j	 d } t
 ƒ  } xx |
 j d s|
 j d s| j d s| j d st |
 j d ƒ d k rIt j d ƒ Vt
 ƒ  | d	 k  sÒ t ‚ qÒ W~ t
 ƒ  } x^ |
 j sŒt | j j ƒ  ƒ sŒt | j j ƒ  ƒ r¶t j d ƒ Vt
 ƒ  | d	 k  sYt ‚ qYWd  S(
   NR   R	   t   workerc         S   s   t  d ƒ } | j |  ƒ d  S(   NR   (   R   R   (   R!   R   (    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt   fM   s    i
   R&   i   g{®Gáz„?i   (   R   t   Nonet   mapR   R   t   gett   appendR+   R.   R*   R   t
   publishersR   t   lenR,   R   R    t   anyt   publish_to_schedulert   values(   R   R   R   R   R   R5   t   futurest   LR   R2   R0   t   apst   bpsR   (    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt   test_client_workerI   s:    	$			c         c   sk   t  d d |  d d  ƒ} t ƒ  } t j t ƒ  | j d d ƒ VWd  QXt ƒ  } | | d k  sg t ‚ d  S(   NR   R	   R4   R
   gš™™™™™¹?i   (   R   R6   R   R'   R(   R   R8   R.   (   R   R   R   R   R   R   R#   (    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt   test_timeoutsv   s    		i   i   (   t   *(   i   i   (   t   sysR   R    t   distributedR   R   R   R   R   t   distributed.utils_testR   t   distributed.metricsR'   t   tornadoR   R   R6   R$   R3   RC   RD   t   version_infot!   distributed.tests.py3_test_pubsub(    (    (    s<   lib/python2.7/site-packages/distributed/tests/test_pubsub.pyt   <module>   s   ((-
