
    lc	                     0   d Z ddlZddlZddlZ ej        e          ZdZ	 ddlZ	dZn# e
$ r  ej        d           Y nw xY wdZ	 ddlZdZn# e
$ r  ej        d           Y nw xY w G d de          Z G d	 d
e          Zej        dd            ZdS )z^Common functionality for concurrent processing.

The main entry point is :func:`create_pool`.
    NFTz:concurrent.futures could not be imported and won't be usedz7multiprocessing could not be imported and won't be usedc                       e Zd ZdZd Zd ZdS )	DummyPoolz?A class that mimics multiprocessing.pool.Pool for our purposes.c                 "    t          ||          S N)map)selffunctionitemss      6lib/python3.11/site-packages/smart_open/concurrency.pyimap_unorderedzDummyPool.imap_unordered+   s    8U###    c                     d S r    r   s    r   	terminatezDummyPool.terminate.   s    r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   )   s8        II$ $ $    r   r   c                   $    e Zd ZdZd Zd Zd ZdS )ConcurrentFuturesPoolz_A class that mimics multiprocessing.pool.Pool but uses concurrent futures instead of processes.c                 N    t           j                            |          | _        d S r   )
concurrentfuturesThreadPoolExecutorexecutor)r   max_workerss     r   __init__zConcurrentFuturesPool.__init__4   s    "*==kJJr   c              #       K    fd|D             }t           j                            |          D ]}|                                V  d S )Nc                 F    g | ]}j                             |          S r   )r   submit).0itemr	   r   s     r   
<listcomp>z8ConcurrentFuturesPool.imap_unordered.<locals>.<listcomp>8   s+    JJJD4=''$77JJJr   )r   r   as_completedresult)r   r	   r
   r   futures   ``   r   r   z$ConcurrentFuturesPool.imap_unordered7   se      JJJJJEJJJ (55g>> 	" 	"F--//!!!!	" 	"r   c                 <    | j                             d           d S )NT)wait)r   shutdownr   s    r   r   zConcurrentFuturesPool.terminate<   s!    D)))))r   N)r   r   r   r   r   r   r   r   r   r   r   r   2   sJ        iiK K K" " "
* * * * *r   r      c              #   ~  K   t           r>| r<t                              d|            t          j                            |           }n]t          r.| r,t                              d|            t          |           }n(t                              d           t                      }|V  |	                                 d S )Nz-creating multiprocessing pool with %i workers)	processesz0creating concurrent futures pool with %i workers)r   zcreating dummy pool)
_MULTIPROCESSINGloggerinfomultiprocessingpoolPool_CONCURRENT_FUTURESr   r   r   )r-   r2   s     r   create_poolr5   @   s       I CYOOO#((9(==	  F	RRR$;;;)***{{
JJJNNr   )r+   )r   
contextlibloggingwarnings	getLoggerr   r/   r4   concurrent.futuresr   ImportErrorwarnr.   multiprocessing.poolr1   objectr   r   contextmanagerr5   r   r   r   <module>r@      sy   
      		8	$	$
  P P P PHMNOOOOOP  M M M MHMKLLLLLM       * * * * *F * * *      s!   ) A AA A&%A&