Ë
    ˜V.je  ã                   óð   — 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 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y# e$ r dZY Œ@w xY w)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                 óD   — dd l }t        d|j                  |«      › �«      ‚)Nr   z!Blocking detection timed-out at: )ÚinspectÚRuntimeErrorÚgetframeinfo)ÚsignumÚframer   s      úTC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/utils/debug.pyÚ_on_blockingr   "   s(   € ÛÜ
Ø
+¨G×,@Ñ,@ÀÓ,GÐ+HÐIóð ó    c              #   ó  K  — | sd–— yt         d   }|t        k(  rdn|}t        t         d<   	 t        j                  | «      –— |r	|t         d<   t        j                  «        y# |r	|t         d<   t        j                  «        w xY w­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	   )   sw   è ø€ ñ Üä˜f‘oˆØ)¬\Ò9‘d¸{ˆä&Œ�‰ð	"Ü×#Ñ# GÓ,Ò,áØ"-”˜‘Ü×ÑÕ!øñ Ø"-”˜‘Ü×ÑÕ!üs   ‚+B	®A% Á B	Á%!BÂB	c                  óD   — t        «       } t        j                  | «       | 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}|j                  «        t        «       }||fS )Nr   )r&   ÚlenÚlistr   ÚgcÚcollectr   )ÚsamplesÚSÚprevr,   Úafter_collects        r   Ú_memdumpr2   I   sK   € Ü€AÜ˜!“f Ò'Œ4�Œ7¬V°A°wÓ-?€DØ„K‘€NÛØ‡J�J„LÜ“I€MØ�ÐÐr   c                 óº   — t        t        |¬«      }t        «       €	 |d«       yt        | «      \  }}|r |d«       |D ]  } |d|› d�«       Œ  |d|› d�«       y)	z¼Dump 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   r2   )r.   r5   Úsayr0   r1   Úmems         r   r   r   S   sj   € ô ”%˜dÔ
#€CÜ	ƒt€|ÙÐ,Ô-ØÜ" 7Ó+Ñ€Dˆ-ÙÙÐÔÛˆCÙ�'˜#˜˜aÐ Õ!ð áˆ-˜� aÐ(Õ)r   c              #   ó‚   K  — t        | «      |z  }t        |«      D ]  }	 | |   –— ||z  }Œ y# t        $ r Y  yw xY w­w)zÎGiven 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   sO   è ø€ ô 	ˆA‹�!‰€AÜ�1ŽXˆð	Ø�A‘$ŠJð 	
ˆQ‰‰ñ øô ò 	Úð	üs   ‚? /§?¯	<¸?»<¼?c                 óL   — t        | «      }|| k(  r|S dj                  | |¬«      S )z¨Convert 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)ÚfrE   Úis      r   ÚhfloatrJ   w   s.   € ô 	ˆA‹€AØ�Q’ˆ1Ð5˜J×-Ñ-¨a°1Ð-Ó5Ð5r   c                 ó4   ‡ — t        ˆ fd„t        D «       «      S )z4Convert bytes to human-readable form (e.g., KB, MB).c              3   óZ   •K  — | ]"  \  }}‰|k\  rt        |r‰|z  n‰«      › |› �–— Œ$ y ­w©N)rJ   )Ú.0ÚdivÚunitÚss      €r   Ú	<genexpr>zhumanbytes.<locals>.<genexpr>„   s:   øè ø€ ð á‰IˆC� ! s¢(ô ™S�!�c’' aÓ(Ð
)¨$¨Ô0Ùùs   ƒ(+)ÚnextÚUNITS)rQ   s   `r   r   r   ‚   s   ø€ äó åóó ð r   c                  óX   — t        «       } | �t        t        | «      j                  «      S y)z.Return RSS memory usage as a humanized string.N)r   r   Ú_process_memory_infoÚrssrD   s    r   r   r   Š   s*   € ä
‹€AØ€}ÜÔ.¨qÓ1×5Ñ5Ó6Ð6ð r   c                  ó`   — t         €#t        �t        t        j                  «       «      a t         S )z…Return 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Ð/Üœ2Ÿ9™9›;Ó'ˆÜ€Or   c                 ób   — 	 | j                  «       S # t        $ r | j                  «       cY S w xY wrM   )Úmemory_infoÚAttributeErrorÚget_memory_info)Úprocesss    r   rV   rV   �   s4   € ð)Ø×"Ñ"Ó$Ð$øÜò )Ø×&Ñ&Ó(Ò(ð)ús   ‚ ’.­.c                 ó  — ddl }| €
t        «       n| } t        t        | ¬«      }|j	                  «       D �ci c]  }|j
                  |“Œ }}||z  }t        j                  «       j                  «       D ]‚  \  }}	|j                  |«      }
|
sŒ ||
j                  › «        ||«       t        j                  |	| ¬«        ||«        |d«        ||«       t        |	j                  | ¬«        |d«       Œ„ | j                  «       S c c}w )zpReturn stack-trace of all active threads.

    See Also:
        Taken from https://gist.github.com/737056.
    r   Nr4   zLOCAL VARIABLES)ÚstreamÚ
)Ú	threadingr   r   r8   Ú	enumerateÚidentÚsysÚ_current_framesÚitemsÚgetÚnameÚ	tracebackÚprint_stackr   Úf_localsÚgetvalue)ÚoutÚsepchrÚseplenre   ÚPÚtÚtmapÚsepÚtidr   Úthreads              r   r   r   ¤   sé   € ó à˜+Œ*Œ,¨3€CÜ”˜CÔ €Að !*× 3Ñ 3Ô 5Ó6Ñ 5˜1ˆA�G‰G�Q‰JÐ 5€DÐ6à
�6‰/€CÜ×)Ñ)Ó+×1Ñ1Ö3‰
ˆˆUØ—‘˜#“ˆÙàÙ	ˆV�[‰[ˆMÔÙ	ˆ#ŒÜ×Ñ˜e¨#Õ.Ù	ˆ#ŒÙ	Ð
ÔÙ	ˆ#ŒÜˆu�~‰~ cÕ*Ù	ˆ$�ð 4ð �<‰<‹>Ðùò! 7s   ¶D)é
   )rz   N)r   )é   )NÚ=é1   ) Ú__doc__rZ   rh   rm   Ú
contextlibr   Ú	functoolsr   r   Úcelery.platformsr   Úcelery.utils.textr   Úpsutilr   ÚImportErrorÚ__all__rT   rY   r&   r   r	   r
   r2   r   r   rJ   r   r   r   rV   r   r\   r   r   Ú<module>r†      s¤   ðÙ @Û 	Û 
Û Ý %Ý Ý å $Ý (ðÝð€ð
	€ð €Ø€òð ñ"ó ð"ò*óó*ó&ó"6òò7ò	ò)ôøðm ò Ø‚Gðús   ®A+ Á+A5Á4A5