U
    ªº|eš  ã                   @   s’   d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z
mZmZ d dlmZ ddlmZ ddd	gZG d
d„ de
ƒZ	G dd„ deƒZdS )é    N)Úutil)ÚFullÚQueueÚSimpleQueueÚ	_sentinel)Úassert_spawningé   )Údumpsr   r   r   c                       sJ   e Zd Zd‡ fdd„	Zdd„ Zdd„ Zd	d
„ Zedd„ ƒZdd„ Z	‡  Z
S )r   r   Nc                    s   t ƒ j||d� || _d S )N)ÚmaxsizeÚctx©ÚsuperÚ__init__Ú	_reducers)Úselfr
   Úreducersr   ©Ú	__class__© úa/var/www/website-v5/atlas_env/lib/python3.8/site-packages/joblib/externals/loky/backend/queues.pyr      s    zQueue.__init__c              	   C   s0   t | ƒ | j| j| j| j| j| j| j| j| j	f	S ©N)
r   Ú_ignore_epipeÚ_maxsizeÚ_readerÚ_writerr   Ú_rlockÚ_wlockÚ_semÚ_opid©r   r   r   r   Ú__getstate__$   s    ÷zQueue.__getstate__c              
   C   sH   |\	| _ | _| _| _| _| _| _| _| _t	j
dkr<|  ¡  n|  ¡  d S )N)é   é	   )r   r   r   r   r   r   r   r   r   ÚsysÚversion_infoÚ_resetÚ_after_fork©r   Ústater   r   r   Ú__setstate__2   s    ö

zQueue.__setstate__c                 C   sÐ   t  d¡ | j ¡  tjtj| j| j| j	| j
| jj| j| j| j| jf	dd�| _d| j_t  d¡ | j ¡  t  d¡ | jt ¡ k}| js®|s®t j| jtjt | j¡gdd�| _t j| tj| j| jgd	d�| _d S )
NzQueue._start_thread()ÚQueueFeederThread)ÚtargetÚargsÚnameTzdoing self._thread.start()z... done self._thread.start()éûÿÿÿ)Úexitpriorityé
   )r   ÚdebugÚ_bufferÚclearÚ	threadingÚThreadr   Ú_feedÚ	_notemptyÚ_send_bytesr   r   Úcloser   r   Ú_on_queue_feeder_errorr   Ú_threadÚdaemonÚstartr   ÚosÚgetpidÚ_joincancelledÚFinalizeÚ_finalize_joinÚweakrefÚrefÚ_jointhreadÚ_finalize_closeÚ_close)r   Zcreated_by_this_processr   r   r   Ú_start_threadD   sD    

÷ó



ü
üzQueue._start_threadc	              
   C   sj  t  d¡ |j}	|j}
|j}| j}t}tjdkr>|j}|j}nd }z¢|	ƒ  z| sV|ƒ  W 5 |
ƒ  X zj|ƒ }||krŠt  d¡ |ƒ  W W d S t	||d�}|d kr¨||ƒ n|ƒ  z||ƒ W 5 |ƒ  X ~~qdW n t
k
rà   Y nX W qB tk
�rb } z^|�rt|ddƒtjk�rW Y ¢>d S t  ¡ �r@t  d|› �¡ W Y ¢d S | ¡  |||ƒ W 5 d }~X Y qBX qBd S )Nz$starting thread to feed data to pipeÚwin32z%feeder thread got sentinel -- exiting©r   Úerrnor   zerror in queue thread: )r   r1   ÚacquireÚreleaseÚwaitÚpopleftr   r#   Úplatformr	   Ú
IndexErrorÚBaseExceptionÚgetattrrK   ÚEPIPEÚ
is_exitingÚinfo)ÚbufferÚnotemptyÚ
send_bytesÚ	writelockr9   r   Úignore_epipeÚonerrorÚ	queue_semÚnacquireÚnreleaseÚnwaitÚbpopleftÚsentinelÚwacquireÚwreleaseÚobjZobj_Úer   r   r   r6   v   sP    









zQueue._feedc                 C   s   ddl }| ¡  dS )z˜
        Private API hook called when feeding data in the background thread
        raises an exception.  For overriding by concurrent.futures.
        r   N)Ú	tracebackÚ	print_exc)r   rf   re   rg   r   r   r   r:   º   s    zQueue._on_queue_feeder_error)r   NN)Ú__name__Ú
__module__Ú__qualname__r   r    r)   rH   Ústaticmethodr6   r:   Ú__classcell__r   r   r   r   r      s   2
Cc                       s>   e Zd Zd‡ fdd„	Zdd„ Zdd„ Zdd	„ Zd
d„ Z‡  ZS )r   Nc                    s   t ƒ j|d� || _d S )N)r   r   )r   r   r   r   r   r   r   Å   s    zSimpleQueue.__init__c                 C   s   | j  ¡  | j ¡  d S r   )r   r9   r   r   r   r   r   r9   Ë   s    
zSimpleQueue.closec                 C   s    t | ƒ | j| j| j| j| jfS r   )r   r   r   r   r   r   r   r   r   r   r    Ð   s    ûzSimpleQueue.__getstate__c                 C   s   |\| _ | _| _| _| _d S r   )r   r   r   r   r   r'   r   r   r   r)   Ú   s    úûzSimpleQueue.__setstate__c              	   C   sH   t || jd�}| jd kr&| j |¡ n| j� | j |¡ W 5 Q R X d S )NrJ   )r	   r   r   r   rY   )r   re   r   r   r   Úputä   s
    
zSimpleQueue.put)NN)	ri   rj   rk   r   r9   r    r)   rn   rm   r   r   r   r   r   Ä   s
   

)r>   r#   rK   rC   r4   Úmultiprocessingr   Úmultiprocessing.queuesr   r   Zmp_Queuer   Zmp_SimpleQueuer   Zmultiprocessing.contextr   Ú	reductionr	   Ú__all__r   r   r   r   Ú<module>
   s   
 '