o
    Df!                     @   sB  d Z ddlZ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 ddlmZ ddlmZ ddlmZmZ ddlmZ d	Zd
ee dZeejddZeejddZeejddZeejddZi Z e! Z"e! Z#eeedZ$e Z%dgZ&eeedZ'i Z(dZ)dZ*dd Z+dd Z,e j-e"j.fddZ/de j-e#j.e%j0fddZ1de j2e#j3e"j3fddZ4ejdpejd Z5eejd!pejd"pdZ6e5rddl7Z7dd#l8m9Z9 dd$l:m;Z; dd%l<m=Z=m>Z> da?da@daAdaBe6ZCg ZDe/ZEe4ZFe; jGd&kre7jHd'd( ZId)d Z/d*d Z4G d+d, d,ZJdS )-zwInternal worker state (global).

This includes the currently active and reserved tasks,
statistics, and revoked tasks.
    N)Counter)picklepickle_protocol)cached_property)__version__)WorkerShutdownWorkerTerminate)
LimitedSet)
SOFTWARE_INFOreserved_requestsactive_requeststotal_countrevokedtask_reservedmaybe_shutdowntask_accepted
task_ready
Persistentz	py-celery)sw_identsw_versw_sysCELERY_WORKER_REVOKES_MAXiP  CELERY_WORKER_SUCCESSFUL_MAXi  CELERY_WORKER_REVOKE_EXPIRESi0*   CELERY_WORKER_SUCCESSFUL_EXPIRES)maxlenexpiresc                   C   sJ   t   t  t  t  t  dgtd d < t  t  d S )Nr   )	requestsclearr   r   successful_requestsr   all_total_countr   revoked_stamps r"   r"   L/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/worker/state.pyreset_stateM   s   r$   c                   C   s8   t durt durtt tdurtdurttdS dS )z Shutdown if flags have been set.NF)should_terminater   should_stopr   r"   r"   r"   r#   r   X   s
   r   c                 C   s   || j |  ||  dS )z2Update global state when a task has been reserved.N)id)requestadd_requestadd_reserved_requestr"   r"   r#   r   `   s   r   c                 C   s>   |st }|| j|  ||  || jdi t d  d7  < dS )z2Update global state when a task has been accepted.   r   N)r    r'   name)r(   _all_total_countr)   add_active_requestadd_to_total_countr"   r"   r#   r   h   s   r   Fc                 C   s0   |rt | j || jd ||  ||  dS )z)Update global state when a task is ready.N)r   addr'   )r(   
successfulremove_requestdiscard_active_requestdiscard_reserved_requestr"   r"   r#   r   v   s
   r   C_BENCHCELERY_BENCHC_BENCH_EVERYCELERY_BENCH_EVERY)	monotonic)current_process)memdump
sample_memMainProcessc                   C   sN   t d ur#td ur%tdtt   tdtttt  t  d S d S d S )Nz- Time spent in benchmark: {!r}z	- Avg: {})bench_first
bench_lastprintformatsumbench_samplelenr;   r"   r"   r"   r#   on_shutdown   s   
rE   c                 C   s*   d}t du rt  a }tdu r|at| S )z-Called when a task is reserved by the worker.N)bench_startr9   r>   
__reserved)r(   nowr"   r"   r#   r      s   
c                 C   sX   t d7 a t t s(t }|t }tdt| tj  | aa	t
| t  t| S )z Called when a task is completed.r+   zG- Time spent processing {} tasks (since first task received): ~{:.4f}s
)	all_countbench_everyr9   rF   r@   rA   sysstdoutflushr?   rC   appendr<   __ready)r(   rH   diffr"   r"   r#   r      s   

c                   @   s   e Zd ZdZeZeZej	Z	ej
Z
dZd$ddZdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zed d! Zed"d# ZdS )%r   zStores worker state between restarts.

    This is the persistent data stored by the worker when
    :option:`celery worker --statedb` is enabled.

    Currently only stores revoked task id's.
    FNc                 C   s   || _ || _|| _|   d S N)statefilenameclockmerge)selfrR   rS   rT   r"   r"   r#   __init__   s   zPersistent.__init__c                 C   s   | j j| j| jddS )NT)protocol	writeback)storageopenrS   rX   rV   r"   r"   r#   r[      s   
zPersistent.openc                 C   s   |  | j d S rQ   )_merge_withdbr\   r"   r"   r#   rU         zPersistent.mergec                 C   s   |  | j | j  d S rQ   )
_sync_withr^   syncr\   r"   r"   r#   ra      s   zPersistent.syncc                 C   s   | j r| j  d| _ d S d S )NF)_is_openr^   closer\   r"   r"   r#   rc      s   

zPersistent.closec                 C   s   |    |   d S rQ   )ra   rc   r\   r"   r"   r#   save   s   zPersistent.savec                 C   s   |  | | | |S rQ   )_merge_revoked_merge_clockrV   dr"   r"   r#   r]      s   

zPersistent._merge_withc                 C   s>   | j   |d| | | j | jr| j ndd |S )N   r   )	__proto__zrevokedrT   )_revoked_taskspurgeupdatecompress_dumpsrT   forwardrg   r"   r"   r#   r`      s   
zPersistent._sync_withc                 C   s(   | j r| j |dpd|d< d S d S )NrT   r   )rT   adjustgetrg   r"   r"   r#   rf      s   zPersistent._merge_clockc                 C   s\   z	|  |d  W n ty&   z
| |d W n	 ty#   Y nw Y nw | j  d S )Nrk   r   )_merge_revoked_v3KeyError_merge_revoked_v2poprl   rm   rg   r"   r"   r#   re      s   zPersistent._merge_revokedc                 C   s$   |r| j t| | d S d S rQ   )rl   rn   r   loads
decompress)rV   rk   r"   r"   r#   rt     s   zPersistent._merge_revoked_v3c                 C   s$   t |ts
| |S | j| d S rQ   )
isinstancer	   _merge_revoked_v1rl   rn   )rV   savedr"   r"   r#   rv     s   

zPersistent._merge_revoked_v2c                 C   s   | j j}|D ]}|| qd S rQ   )rl   r0   )rV   r|   r0   itemr"   r"   r#   r{     s   
zPersistent._merge_revoked_v1c                 C   s   t j|| jdS )N)rX   )r   dumpsrX   )rV   objr"   r"   r#   rp     r_   zPersistent._dumpsc                 C   s   | j jS rQ   )rR   r   r\   r"   r"   r#   rl     s   zPersistent._revoked_tasksc                 C   s   d| _ |  S )NT)rb   r[   r\   r"   r"   r#   r^     s   zPersistent.dbrQ   )__name__
__module____qualname____doc__shelverZ   r   rX   zlibro   ry   rb   rW   r[   rU   ra   rc   rd   r]   r`   rf   re   rt   rv   r{   rp   propertyrl   r   r^   r"   r"   r"   r#   r      s2    
	
r   )Kr   osplatformr   rK   weakrefr   collectionsr   kombu.serializationr   r   kombu.utils.objectsr   celeryr   celery.exceptionsr   r   celery.utils.collectionsr	   __all__systemr
   intenvironrs   REVOKES_MAXSUCCESSFUL_MAXfloatREVOKE_EXPIRESSUCCESSFUL_EXPIRESr   WeakSetr   r   r   r   r    r   r!   r&   r%   r$   r   __setitem__r0   r   rn   r   rw   discardr   r5   r7   atexittimer9   billiard.processr:   celery.utils.debugr;   r<   rI   r>   rF   r?   rJ   rC   rG   rO   _nameregisterrE   r   r"   r"   r"   r#   <module>   s    	
	



