o
    ›¨ÊhQ  ã                   @   s€   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 dZeeƒZdd
d„Zddd„Z	ddd„Z	ddd„ZdS )z*The consumers highly-optimized inner loop.é    N)Ú	bootsteps)ÚWorkerLostError)Ú
get_loggeré   )Ústate)ÚasynloopÚsynloopçš™™™™™¹?c              
   C   sh   z	| j |d� W d S  ty3 } zt|dd ƒ}|d ur!|tjkr(‚ W Y d }~d S W Y d }~d S d }~ww )N©ÚtimeoutÚerrno)Údrain_eventsÚ	ExceptionÚgetattrr   ÚEAGAIN)Ú
connectionr   ÚexcÚ	exc_errno© r   úE/var/www/html/env/lib/python3.10/site-packages/celery/worker/loops.pyÚ_quick_drain   s   ÿ€þr   ç       @c                    sJ   d g‰ˆ sˆS ˆ   ¡ }|rˆ jsˆS ‡ ‡fdd„}|  || ||f¡ ˆS )Nc              
      s@   zˆ   | ¡ W d S  ty } z|ˆd< W Y d }~d S d }~ww )Nr   )Úheartbeat_checkr   )ÚrateÚe©r   Úheartbeat_errorr   r   Útick&   s   €ýz#_enable_amqheartbeats.<locals>.tick)Úget_heartbeat_intervalÚsupports_heartbeatsÚcall_repeatedly)Útimerr   r   Ú	heartbeatr   r   r   r   Ú_enable_amqheartbeats   s   
r#   c	                 C   sŽ  t j}	|j}
|j}|  ¡ }t|j||d�}||_| j 	|¡ |  	|¡ | 
¡  |  ¡  | js7| j ¡ s7tdƒ‚|jjdkrC| t|¡ ||_| ¡ }z]|j|	kr†| jr†t ¡  |d dura|d ‚|j|jkrj|
ƒ  zt|ƒ W n ty}   | ¡ }Y nw |j|	kr†| jsSW z| ¡  W dS  ty§ } zt  d|¡ W Y d}~dS d}~ww z| ¡  W w  tyÆ } zt  d|¡ W Y d}~w d}~ww )zNon-blocking event loop.©r   z Could not start worker processesÚamqpr   Nz&Error cleaning up after event loop: %r)!r   ÚRUNÚupdateÚconnection_errorsÚcreate_task_handlerr#   r!   Ú
on_messageÚ
controllerÚregister_with_event_loopÚconsumeÚon_readyÚrestart_countÚpoolÚdid_start_okr   Ú	transportÚdriver_typeÚ	call_soonr   Úpropagate_errorsÚcreate_loopr   r   Úmaybe_shutdownÚprevÚvalueÚnextÚStopIterationÚresetr   ÚloggerÚ	exception)Úobjr   ÚconsumerÚ	blueprintÚhubÚqosr"   ÚclockÚhbrater&   Ú
update_qosÚerrorsÚon_task_receivedr   Úloopr   r   r   r   r   2   s\   
ÿó€ÿ€ÿþÿ€ÿr   c	                 K   sö   t j}
|  ¡ }| j}dg}t| jddƒrt| j||d�}||_| 	¡  |  
¡  |j|
kru| jrwt ¡  |d dur=|d ‚|j|jkrG| ¡  z|ƒ  |jdd� W n tjy\   Y n tyj   |j|
krh‚ Y nw |j|
kry| js/dS dS dS dS )zEFallback blocking event loop for transports that doesn't support AIO.NÚis_greenFr$   r   r   r
   )r   r&   r)   Úperform_pending_operationsr   r0   r#   r!   r*   r-   r.   r   r   r7   r8   r9   r'   r   Úsocketr   ÚOSError)r?   r   r@   rA   rB   rC   r"   rD   rE   Úkwargsr&   rH   rK   r   r   r   r   r   l   s4   
ÿÿ õr   )r	   )r   )Ú__doc__r   rL   Úceleryr   Úcelery.exceptionsr   Úcelery.utils.logr   Ú r   Ú__all__Ú__name__r=   r   r#   r   r   r   r   r   r   Ú<module>   s    

	
ÿ;ÿ