o
    wvXjP  ã                   @   s�   d Z ddlmZm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.é    )Úabsolute_importÚunicode_literalsN)Ú	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   úP/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/worker/loops.pyÚ_quick_drain   s   ÿ€þr   ç       @c                 C   s@   |r|j }| ¡ }|r|jr|  || ||f¡ d S d S d S d S )N)Úheartbeat_checkÚget_heartbeat_intervalÚsupports_heartbeatsÚcall_repeatedly)Útimerr   ÚrateÚtickÚ	heartbeatr   r   r   Ú_enable_amqheartbeats   s   
ür"   c	                 C   sz  t j}	|j}
|j}|  ¡ }t|j||d� ||_| j 	|¡ |  	|¡ | 
¡  |  ¡  | js7| j ¡ s7tdƒ‚|jjdkrC| t|¡ ||_| ¡ }zS|j|	kr|| jr|t ¡  |j|jkr`|
ƒ  zt|ƒ W n tys   | ¡ }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Úamqpz&Error cleaning up after event loop: %rN)!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_receivedÚloopr   r   r   r   r	   &   sX   
ÿõ€ÿ€ÿþÿ€ÿr	   c	                 K   sÞ   t j}
|  ¡ }| j}t| jddƒrt| j||d� ||_| 	¡  |  
¡  |j|
kri| jrkt ¡  |j|jkr:| ¡  z|ƒ  |jdd� W n tjyO   Y n tjy^   |j|
kr\‚ Y nw |j|
krm| js,dS dS dS dS )zEFallback blocking event loop for transports that doesn't support AIO.Úis_greenFr#   r   r   N)r   r%   r(   Úperform_pending_operationsr   r/   r"   r   r)   r,   r-   r   r   r6   r7   r8   r&   r   Úsocketr   Úerror)r>   r   r?   r@   rA   rB   r!   rC   rD   Úkwargsr%   rG   rJ   r   r   r   r
   ^   s.   
ÿÿ ÷r
   )r   )r   )Ú__doc__Ú
__future__r   r   r   rK   Úceleryr   Úcelery.exceptionsr   Úcelery.utils.logr   Ú r   Ú__all__Ú__name__r<   r   r"   r	   r
   r   r   r   r   Ú<module>   s     

		
ÿ9ÿ