U
    "FZh                     @   sF   d Z ddlmZ ddlZeeZdd ZG dd deZ	dd	 Z
dS )
zFA thread pool that logs exceptions raised by tasks executed within it.    )futuresNc                    s    fdd}|S )z:Wraps an arbitrary callable behavior in exception-logging.c                     s4   z | |W S  t k
r.   td   Y nX d S )Nz6Unexpected exception from %s executed in logging pool!)	Exception_LOGGER	exception)argskwargsbehavior m/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/grpc/framework/foundation/logging_pool.py	_wrapping   s    z_wrap.<locals>._wrappingr
   )r	   r   r
   r   r   _wrap   s    
r   c                   @   sB   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdddZ	dS )_LoggingPoolzGAn exception-logging futures.ThreadPoolExecutor-compatible thread pool.c                 C   s
   || _ d S N)_backing_pool)selfZbacking_poolr
   r
   r   __init__)   s    z_LoggingPool.__init__c                 C   s   | S r   r
   )r   r
   r
   r   	__enter__,   s    z_LoggingPool.__enter__c                 C   s   | j jdd d S )NTwaitr   shutdown)r   exc_typeexc_valexc_tbr
   r
   r   __exit__/   s    z_LoggingPool.__exit__c                 O   s   | j jt|f||S r   )r   submitr   )r   fnr   r   r
   r
   r   r   2   s    z_LoggingPool.submitc                 O   s$   | j jt|f|d|dd iS )Ntimeout)r   mapr   get)r   func	iterablesr   r
   r
   r   r   5   s    
z_LoggingPool.mapTc                 C   s   | j j|d d S )Nr   r   )r   r   r
   r
   r   r   :   s    z_LoggingPool.shutdownN)T)
__name__
__module____qualname____doc__r   r   r   r   r   r   r
   r
   r
   r   r   &   s   r   c                 C   s   t t| S )a1  Creates a thread pool that logs exceptions raised by the tasks within it.

    Args:
      max_workers: The maximum number of worker threads to allow the pool.

    Returns:
      A futures.ThreadPoolExecutor-compatible thread pool that logs exceptions
        raised by the tasks executed within it.
    )r   r   ZThreadPoolExecutor)max_workersr
   r
   r   pool>   s    
r(   )r&   Z
concurrentr   logging	getLoggerr#   r   r   objectr   r(   r
   r
   r
   r   <module>   s   
