B
    4\                 @   s   d dl mZmZmZ d dlmZ d dlZd dl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 eeZd	Zyed
ddZW n ek
r   ed
dZY nX eeej dd Ze	jdddZe	jdddZdd Zdd ZdS )    )print_functiondivisionabsolute_import)ThreadPoolExecutorN)gen   )protocol)finalizePY3)get_ipget_ipv6nbytesi      zDask-Offload)max_workersZthread_name_prefix)r   c             O   s   t j| f||S )N)_offload_executorZsubmit)fnargskwargs r   5lib/python3.7/site-packages/distributed/comm/utils.pyoffload   s    r   messagec             #   s6    fdd}t r"t|V }n| }t|dS )zI
    Serialize a message into a list of Distributed protocol frames.
    c           
      sV   yt tj dS  tk
rP }  ztd t|   W d d } ~ X Y nX d S )N)serializerson_errorcontextzUnserializable Message: %s)listr   dumps	ExceptionloggerinfoZ	exception)e)r   msgr   r   r   r   
_to_frames&   s    

zto_frames.<locals>._to_framesN)r
   r   r   Return)r!   r   r   r   r"   resr   )r   r!   r   r   r   	to_frames!   s
    r%   Tc             #   sL   t tt fdd} r8tkr8t|V }n| }t|dS )z<
    Unserialize a list of Distributed protocol frames.
    c                 sL   yt j dS  tk
rF   dkr.d} n} td|   Y nX d S )N)deserializedeserializersi  z[too large to display]z$truncated data stream (%d bytes): %s)r   loadsEOFErrorr   error)Zdatastr)r&   r'   framessizer   r   _from_frames@   s    z!from_frames.<locals>._from_framesN)summapr   FRAME_OFFLOAD_THRESHOLDr   r   r#   )r+   r&   r'   r-   r$   r   )r&   r'   r+   r,   r   from_frames9   s    r1   c                s`   t | j   s td| f  fdd}|tj}|dkrH|tj}|dkrXtd| S )z?
    Get the bound address of a started Tornado TCPServer.
    zTCP Server %r not started yet?c                s    x D ]}|j | kr|S qW d S )N)Zfamily)Zfamsock)socketsr   r   _look_for_family_   s    

z0get_tcp_server_address.<locals>._look_for_familyNz'No Internet socket found on TCPServer??)r   Z_socketsvaluesRuntimeErrorsocketZAF_INETZAF_INET6Zgetsockname)Z
tcp_serverr4   r2   r   )r3   r   get_tcp_server_addressW   s    

r8   c             C   s$   | dkrt  S | dkrt S | S dS )zm
    Ensure the given host string (or IP) denotes a concrete host, not a
    wildcard listening address.
    )z0.0.0.0 z::N)r   r   )Zhostr   r   r   ensure_concrete_hostp   s
    r:   )Nr   N)TN) Z
__future__r   r   r   Zconcurrent.futuresr   Zloggingr7   Ztornador   r9   r   Zcompatibilityr	   r
   Zutilsr   r   r   Z	getLogger__name__r   r0   r   	TypeErrorZshutdownr   	coroutiner%   r1   r8   r:   r   r   r   r   <module>   s*   
