
    `fe                         d Z ddl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dlmZ 	 ddlmZ n# e$ r dZY nw xY wd	Zd
Zdag Zd Zed             Zd ZddZddZddZddZd Zd Zd Zd ZddZdS ) z:Utilities for debugging memory usage, blocking calls, etc.    N)contextmanager)partial)pprint)signals)
WhateverIO)Process)blockdetection
sample_memmemdumpsample
humanbytesmem_rsspscry))g      pBTB)g      AGB)g      0AMB)g      @KB)g        bc                 T    dd l }t          d|                    |                     )Nr   z!Blocking detection timed-out at: )inspectRuntimeErrorgetframeinfo)signumframer   s      D/var/www/html/env/lib/python3.11/site-packages/celery/utils/debug.py_on_blockingr   "   s6    NNN
IG,@,@,G,GII      c              #   $  K   | sdV  dS t           d         }|t          k    rdn|}t          t           d<   	 t          j        |           V  |r
|t           d<   t          j                     dS # |r
|t           d<   t          j                     w xY w)zqContext that raises an exception if process is blocking.

    Uses ``SIGALRM`` to detect blocking functions.
    NALRM)r   r   	arm_alarmreset_alarm)timeoutold_handlers     r   r	   r	   )   s        "fo)\99dd{&	"#G,,,,, ."-!!!!!  ."-!!!!s   A. .!Bc                  V    t                      } t                              |            | S )z\Sample RSS memory usage.

    Statistics can then be output by calling :func:`memdump`.
    )r   _mem_sampleappend)current_rsss    r   r
   r
   ?   s'    
 ))K{###r   
   c                     t           }t          |          | k    rt          |          nt          ||           }g t           d d <   dd l}|                                 t                      }||fS )Nr   )r&   lenlistr   gccollectr   )samplesSprevr-   after_collects        r   _memdumpr3   I   sg    A!ff''4777VAw-?-?DKNIIIJJLLLIIMr   c                     t          t          |          }t                       |d           dS t          |           \  }}|r |d           |D ]} |d| d            |d| d           dS )	zDump memory statistics.

    Will print a sample of all RSS memory samples added by
    calling :func:`sample_mem`, and in addition print
    used RSS memory after :func:`gc.collect`.
    fileNz- rss: (psutil not installed).z- rss (sample):z-    > ,z- rss (end): .)r   printr   r3   )r/   r6   sayr1   r2   mems         r   r   r   S   s     %d
#
#
#C	tt|,---"7++D- " 	" 	"CC #   !!!!C(((()))))r   c              #      K   t          |           |z  }t          |          D ]%}	 | |         V  n# t          $ r Y  dS w xY w||z  }&dS )zGiven a list `x` a sample of length ``n`` of that list is returned.

    For example, if `n` is 10, and `x` has 100 items, a list of every tenth.
    item is returned.

    ``k`` can be used as offset.
    N)r+   range
IndexError)xnkj_s        r   r   r   f   sy       	A!A1XX  	A$JJJJ 	 	 	EEE		Q s   
2
A A   c                 ^    t          |           }|| k    r|nd                    | |          S )zConvert float to value suitable for humans.

    Arguments:
        f (float): The floating point number.
        p (int): Floating point precision (default is 5).
    z{0:.{p}}p)intformat)frG   is      r   hfloatrL   w   s4     	AAQ11J--a1-555r   c                 D     t           fdt          D                       S )z4Convert bytes to human-readable form (e.g., KB, MB).c              3   ^   K   | ]'\  }}|k    t          |r|z  n           | V  (d S N)rL   ).0divunitss      r   	<genexpr>zhumanbytes.<locals>.<genexpr>   sX        C!s(( S'!c''a((0$00"*((( r   )nextUNITS)rS   s   `r   r   r      s;             r   c                  h    t                      } | !t          t          |           j                  S dS )z.Return RSS memory usage as a humanized string.N)r   r   _process_memory_inforssrF   s    r   r   r      s1    
A}.q115666 }r   c                  l    t           't           t          t          j                              a t           S )zReturn the global :class:`psutil.Process` instance.

    Note:
        Returns :const:`None` if :pypi:`psutil` is not installed.
    )_processr   osgetpid r   r   r   r      s'     G/29;;''Or   c                 t    	 |                                  S # t          $ r |                                 cY S w xY wrO   )memory_infoAttributeErrorget_memory_info)processs    r   rX   rX      sL    )""$$$ ) ) )&&((((()s    77=1   c                 6   ddl }| t                      n| } t          t          |           }d |                                D             }||z  }t          j                                                    D ]\  }}|                    |          }	|	s ||	j	                     ||           t          j        ||             ||            |d            ||           t          |j        |             |d           |                                 S )zpReturn stack-trace of all active threads.

    See Also:
        Taken from https://gist.github.com/737056.
    r   Nr5   c                     i | ]
}|j         |S r^   )ident)rP   ts     r   
<dictcomp>zcry.<locals>.<dictcomp>   s    6661AGQ666r   zLOCAL VARIABLES)stream
)	threadingr   r   r9   	enumeratesys_current_framesitemsgetname	tracebackprint_stackr   f_localsgetvalue)
outsepchrseplenrm   Ptmapseptidr   threads
             r   r   r      s4    +*,,,3CC   A 76	 3 3 5 5666D
6/C)++1133  
U# 		V[
	#e#....	#	
	#u~c****	$<<>>r   )r)   )r)   N)r   )rD   )Nrd   re   ) __doc__r\   ro   rt   
contextlibr   	functoolsr   r   celery.platformsr   celery.utils.textr   psutilr   ImportError__all__rV   r[   r&   r   r	   r
   r3   r   r   rL   r   r   r   rX   r   r^   r   r   <module>r      s   @ @ 				 



     % % % % % %             $ $ $ $ $ $ ( ( ( ( ( (   GGG
	    " " "*     * * * *&   "6 6 6 6  7 7 7	 	 	) ) )     s   5 ??