
    <|h.                     d   d dl mZ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 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 dlmZ d dlmZ d dlmZ d dlmZ dgZ eed      Z eed      Z edd      Z  G d de!      Z" G d de#      Z$ ee       G d de#             Z%y)    )print_functionabsolute_importdivisionN)ref)
getcurrent)config)get_original)notify)EventLoopBlocked)MemoryUsageThresholdExceeded)MemoryUsageUnderThreshold)IPeriodicMonitorThread)implementer)GreenletTracer)thread_mod_name)perf_counter)get_this_psutil_processPeriodicMonitoringThread	get_identstart_new_threadtimesleepc                       e Zd ZdZy)MonitorWarningzThe type of warnings we emit.N)__name__
__module____qualname____doc__     N/var/www/html/test/engine/venv/lib/python3.12/site-packages/gevent/_monitor.pyr   r   %   s    'r    r   c                   (    e Zd ZdZd Zd Zd Zd Zy)_MonitorEntryfunctionperiodlast_run_timec                 .    || _         || _        d| _        y Nr   r$   )selfr%   r&   s      r!   __init__z_MonitorEntry.__init__-   s     r    c                 j    | j                   |j                   k(  xr | j                  |j                  k(  S N)r%   r&   )r*   others     r!   __eq__z_MonitorEntry.__eq__2   s'    }}.N4;;%,,3NNr    c                 D    t        | j                  | j                  f      S r-   )hashr%   r&   r*   s    r!   __hash__z_MonitorEntry.__hash__5   s    T]]DKK011r    c                 Z    t        | j                  | j                  | j                  f      S r-   )reprr%   r&   r'   r2   s    r!   __repr__z_MonitorEntry.__repr__8   s"    T]]DKK1C1CDEEr    N)r   r   r   	__slots__r+   r/   r3   r6   r   r    r!   r#   r#   )   s    7I
O2Fr    r#   c                       e Zd ZdZdZdZdZdZdZdZ	d Z
d Zed        Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)r   g       @g{Gzt?   Nr   c                 j   t        || j                        | _        d| _        t	               |j
                  k(  sJ t               | _        t        | j                  t        j                        g| _        t        j                  | _        t        | d      | _        t!        j"                         | _        y )NTr   )wref
_on_hub_gc	_hub_wref
should_runget_thread_identthread_identr   _greenlet_tracerr#   monitor_blockingGEVENT_CONFIGmax_blocking_time_monitoring_functions_calculated_sleep_timer   monitor_thread_identosgetpidpid)r*   hubs     r!   r+   z!PeriodicMonitoringThread.__init__\   s    c4??3  !S%5%5555 . 0&3D4I4I4A4S4S'U &V"&3&E&E# %5T2$>! 99;r    c                 |    t        j                         }|| j                  k7  r|| _        t        | d      | _        y y )Nr   )rH   rI   rJ   r   rG   )r*   rJ   s     r!   _on_forkz!PeriodicMonitoringThread._on_forko   s5     iik$((?DH(8r(BD% r    c                 "    | j                         S r-   )r=   r2   s    r!   rK   zPeriodicMonitoringThread.hubw   s    ~~r    c                     t         j                  }|| j                  d   j                  k7  r5|| j                  d   _        t	        d | j                  D              | _        | j                  S )Nr   c              3   4   K   | ]  }|j                     y wr-   r&   .0xs     r!   	<genexpr>z@PeriodicMonitoringThread.monitoring_functions.<locals>.<genexpr>   s     -[1ahh-[   )rC   rD   rE   r&   minrF   )r*   mbts     r!   monitoring_functionsz-PeriodicMonitoringThread.monitoring_functions|   s`     --$,,Q/66636D&&q)0*--[@Z@Z-[*[D')))r    c                    t        |      st        d      |/| j                  D cg c]  }|j                  |k7  r| c}| _        nu|dk  rt        d      t	        ||      }| j                  D cg c]  }|j                  |k7  r|n| c}| _        || j                  vr| j                  j                  |       t        d | j                  D              | _        y c c}w c c}w )Nzfunction must be callabler   zPeriod must be positive.c              3   4   K   | ]  }|j                     y wr-   rQ   rR   s     r!   rU   zCPeriodicMonitoringThread.add_monitoring_function.<locals>.<genexpr>   s     )Wq!(()WrV   )callable
ValueErrorrE   r%   r#   appendrW   rF   )r*   r%   r&   rT   entrys        r!   add_monitoring_functionz0PeriodicMonitoringThread.add_monitoring_function   s    !899>  55*::) *D& q[788 "(F3E 33* ZZ8+6*D& D666**11%8&))WD<V<V)W&W#**s   C2C$c                 j    | j                   }|dk  r| j                  S t        || j                  f      S r)   )rF   inactive_sleep_timemaxmin_sleep_time)r*   	min_sleeps     r!   calculate_sleep_timez-PeriodicMonitoringThread.calculate_sleep_time   s8    //	> +++It22344r    c                 `    | j                   sy d| _         | j                  j                          y )NF)r>   rA   killr2   s    r!   rh   zPeriodicMonitoringThread.kill   s%    ""$r    c                 $    | j                          y r-   )rh   )r*   _s     r!   r<   z#PeriodicMonitoringThread._on_hub_gc   s    		r    c                 z   t        |       t               _        	 | j                  r| j	                         }|sJ | j                         }t        |       | j                  }|s| j                          | j                  rPt               }|D ]A  }|j                  }|j                  }|j                  }|s*||z   |k  s3||_         ||       C ~| j                  ry y # t        $ r Y y  t        rt        j                  sY y | j                  }|' |j                   | gt        j"                           Y y Y y xY wr-   )r;   r   gevent_monitoring_threadr>   rY   rf   thread_sleeprK   rh   r   r%   r&   r'   
SystemExitsysstderrhandle_errorexc_info)	r*   	functions
sleep_timerK   this_runr_   fr&   last_runs	            r!   __call__z!PeriodicMonitoringThread.__call__   s    15T

-&	<// 557	  y!668
Z( hhIIK??+~H!* #!NN!&#(#6#6!h&78&C2:E/cF# - //0  		< cjjhh? %C$$T;CLLN; #s$   BC 5C >C 	D:*D:3D:c                    | j                   j                  |      }|sy |d   }| j                   j                  ||t        d| j                              }t        t        |t        j                  ||             | j                  |||      S )N   F)greenlet_stackscurrent_thread_ident)rK   )
rA   did_block_hubdid_block_hub_reportdictrG   r
   r   rC   rD   _show_blocking_report)r*   rK   	did_blockactive_greenletreports        r!   rB   z)PeriodicMonitoringThread.monitor_blocking   s     ))77<	#A,&&;;T=V=VWY 	 - ? ?$') 	* ))#vGGr    c                 J    |j                   }|D ]  }t        ||        ||fS )N)file)exception_streamprint)r*   rK   r   r   streamlines         r!   r   z.PeriodicMonitoringThread._show_blocking_report   s5    %% 	%D $V$		%
  ((r    c                 8    | j                   j                          y r-   )rA    ignore_current_greenlet_blockingr2   s    r!   r   z9PeriodicMonitoringThread.ignore_current_greenlet_blocking  s    >>@r    c                 8    | j                   j                          y r-   )rA   !monitor_current_greenlet_blockingr2   s    r!   r   z:PeriodicMonitoringThread.monitor_current_greenlet_blocking
  s    ??Ar    c                 0    t               fd| _        S )Nc                       S r-   r   )procs   r!   <lambda>z7PeriodicMonitoringThread._get_process.<locals>.<lambda>  s    D r    )r   _get_process)r*   r   s    @r!   r   z%PeriodicMonitoringThread._get_process  s    &((r    c                 &    | j                         d uS r-   )r   r2   s    r!   can_monitor_memory_usagez1PeriodicMonitoringThread.can_monitor_memory_usage  s      "$..r    c                     | j                         sdd l}|j                  dt               y | j	                  | j
                  t        t        j                  | j                               y )Nr   z/Unable to monitor memory usage. Install psutil.)
r   warningswarnr   r`   monitor_memory_usagerc   rC   memory_monitor_periodmin_memory_monitor_period)r*   r   s     r!   install_monitor_memory_usagez5PeriodicMonitoringThread.install_monitor_memory_usage  sY     ,,.MMK(*$$T%>%>%()L)L)-)G)G&I	Jr    c                 x   t         j                  }|sy| j                         j                         }t	        |dd      xs |j
                  }d }||kD  r0|| j                  kD  rt        |||      }t        |       || _        |S | j                  r#t        |||| j                        }t        |       d| _        |S )Nussr   )
rC   max_memory_usager   memory_full_infogetattrrss_memory_exceededr   r
   r   )r*   _hubmax_allowedrusage	mem_usageevents         r!   r   z-PeriodicMonitoringThread.monitor_memory_usage"  s    #44""$557 FE1-;	{"40004{F4u$-D!  $$1{FD4I4IKu$%D!r    c                     d| j                   j                  dt        t        |             dt        | j                        dt               d| j                         dS )N<z at z in thread z
 greenlet z for >)	__class__r   hexidrG   r   r=   r2   s    r!   r6   z!PeriodicMonitoringThread.__repr__@  sA    NN##4M))*LNN 	r    )r   r   r   rb   rd   r   rE   rF   r   rA   r+   rM   propertyrK   rY   r`   rf   rh   r<   rx   rB   r   r   r   r   r   r   r   r6   r   r    r!   r   r   <   s      N !" ! "
  &C    *X.5%,<\H<)AB
/J<r    )&
__future__r   r   r   rH   ro   weakrefr   r;   greenletr   geventr   rC   gevent.monkeyr	   gevent.eventsr
   r   r   r   r   r   gevent._tracerr   gevent._compatr   r   r   __all__r?   r   rm   RuntimeWarningr   objectr#   r   r   r    r!   <module>r      s    @ @ 	 
   * &   * 6 3 0 % ) * ' 2
   = 1CD FG,(^ (FF F& #$Iv I %Ir    