o
    DfQ                     @   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   L/home/ubuntu/webapp/venv/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rt  |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    

	
;