a
    .=icI                     @   s@   d dl Zd dlmZ ddlmZ dd ZG dd dejjZdS )    N   )SimpleQueuec                  O   s&   dd l }tjj| i | |  d S )Nr   )gcmultiprocessingpoolZworkerZcollect)argskwargsr    r	   k/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/torch/multiprocessing/pool.pyclean_worker   s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )PoolzPool implementation which uses our version of SimpleQueue.
    This lets us pass tensors in shared memory across processes instead of
    serializing the underlying data.c                 C   s,   t  | _t  | _| jjj| _| jjj| _d S )N)	r   _inqueue	_outqueueZ_writersendZ
_quick_put_readerrecvZ
_quick_get)selfr	   r	   r
   _setup_queues   s    zPool._setup_queuesc                 C   s   t | jt| j D ]t}| j| j| j| j| jf}t	| drF|| j
f7 }| jt|d}| j| |jdd|_d|_|  td qdS )zBring the number of pool processes up to the specified number,
        for use after reaping workers which have exited.
        _wrap_exception)targetr   ProcessZ
PoolWorkerTzadded workerN)rangeZ
_processeslen_poolr   r   Z_initializerZ	_initargsZ_maxtasksperchildhasattrr   r   r   appendnamereplacedaemonstartutildebug)r   ir   wr	   r	   r
   _repopulate_pool   s    
zPool._repopulate_poolN)__name__
__module____qualname____doc__r   r$   r	   r	   r	   r
   r      s   r   )	Zmultiprocessing.poolr   Zmultiprocessing.utilr    queuer   r   r   r   r	   r	   r	   r
   <module>   s   	