
    i//                        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%dS )    )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dS )MonitorWarningzThe type of warnings we emit.N)__name__
__module____qualname____doc__     :/usr/local/lib/python3.11/dist-packages/gevent/_monitor.pyr   r   %   s        ''''r    r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )_MonitorEntryfunctionperiodlast_run_timec                 0    || _         || _        d| _        d S Nr   r$   )selfr%   r&   s      r!   __init__z_MonitorEntry.__init__-   s     r    c                 B    | j         |j         k    o| j        |j        k    S N)r%   r&   )r*   others     r!   __eq__z_MonitorEntry.__eq__2   s    }.N4;%,3NNr    c                 8    t          | j        | j        f          S r-   )hashr%   r&   r*   s    r!   __hash__z_MonitorEntry.__hash__5   s    T]DK0111r    c                 D    t          | j        | j        | j        f          S r-   )reprr%   r&   r'   r2   s    r!   __repr__z_MonitorEntry.__repr__8   s    T]DK1CDEEEr    N)r   r   r   	__slots__r+   r/   r3   r6   r   r    r!   r#   r#   )   s]        7I  
O O O2 2 2F F F F 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dS )r   g       @g{Gzt?   Nr   c                 f   t          || j                  | _        d| _        t	                      |j        k    sJ t                      | _        t          | j	        t          j                  g| _        t          j        | _        t          | d          | _        t!          j                    | _        d S )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3  !!S%55555 . 0 0&3D4I4A4S'U 'U &V"&3&E# %5T2$>$>! 9;;r    c                 ~    t          j                    }|| j        k    r|| _        t          | d          | _        d S d S )Nr   )rH   rI   rJ   r   rG   )r*   rJ   s     r!   _on_forkz!PeriodicMonitoringThread._on_forko   s@     ikk$(??DH(8r(B(BD%%% ?r    c                 *    |                                  S r-   )r=   r2   s    r!   rK   zPeriodicMonitoringThread.hubw   s    ~~r    c                     t           j        }|| j        d         j        k    r5|| j        d         _        t	          d | j        D                       | _        | j        S )Nr   c              3   $   K   | ]}|j         V  d S r-   r&   .0xs     r!   	<genexpr>z@PeriodicMonitoringThread.monitoring_functions.<locals>.<genexpr>   s$      -[-[1ah-[-[-[-[-[-[r    )rC   rD   rE   r&   minrF   )r*   mbts     r!   monitoring_functionsz-PeriodicMonitoringThread.monitoring_functions|   s]     -$,Q/66636D&q)0*--[-[@Z-[-[-[*[*[D'))r    c                    t                    st          d          |fd| j        D             | _        na|dk    rt          d          t          |          fd| j        D             | _        | j        vr| j                                       t          d | j        D                       | _        d S )Nzfunction must be callablec                 *    g | ]}|j         k    |S r   r%   )rS   rT   r%   s     r!   
<listcomp>zDPeriodicMonitoringThread.add_monitoring_function.<locals>.<listcomp>   s0     * * *:)) )))r    r   zPeriod must be positive.c                 .    g | ]}|j         k    r|nS r   r[   )rS   rT   entryr%   s     r!   r\   zDPeriodicMonitoringThread.add_monitoring_function.<locals>.<listcomp>   s9     * * * Z8++* * *r    c              3   $   K   | ]}|j         V  d S r-   rQ   rR   s     r!   rU   zCPeriodicMonitoringThread.add_monitoring_function.<locals>.<genexpr>   s$      )W)Wq!()W)W)W)W)W)Wr    )callable
ValueErrorrE   r#   appendrV   rF   )r*   r%   r&   r^   s    ` @r!   add_monitoring_functionz0PeriodicMonitoringThread.add_monitoring_function   s   !! 	:8999>* * * *5* * *D&& q[[7888 "(F33E* * * * *3* * *D& D666*11%888&))W)WD<V)W)W)W&W&W###r    c                 V    | 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   s4    /	>> ++It23444r    c                 X    | j         sd S d| _         | j                                         d S )NF)r>   rA   killr2   s    r!   rk   zPeriodicMonitoringThread.kill   s3     	F""$$$$$r    c                 .    |                                   d S r-   )rk   )r*   _s     r!   r<   z#PeriodicMonitoringThread._on_hub_gc   s    		r    c                 \   t          |           t                      _        	 | j        r|                                 }|sJ |                                 }t          |           | j        }|s|                                  | j        rEt                      }|D ]4}|j
        }|j        }|j        }|r||z   |k    r||_         ||           5~| j        d S d S # t          $ r Y d S  t          rt          j        sY d S | j        }|" |j        | gt          j                    R   Y d S Y d S xY wr-   )r;   r   gevent_monitoring_threadr>   rX   ri   thread_sleeprK   rk   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7	    !6688
Z((( h  IIKKK? #+~~H!* # #!N!&#(#6! #h&78&C&C2:E/AcFFF- /     0  	 	 	DD	<  <cj <h? %C$T;CLNN;;;;;;; #??s   B3C 
D+&D+=(D+c                 0   | j                             |          }|sd S |d         }| j                             ||t          d| j                            }t          t          |t          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<<	 	F#A,&;;T=VWWWY Y 	 - ?$') ) ) 	* 	* 	* ))#vGGGr    c                 \    t           j        r|j        }|D ]}t          ||           ||fS )N)file)rC   print_blocking_reportsexception_streamprint)r*   rK   r   r   streamlines         r!   r   z.PeriodicMonitoringThread._show_blocking_report   sG    / 	))F ) ) d(((((((r    c                 8    | j                                          d S r-   )rA    ignore_current_greenlet_blockingr2   s    r!   r   z9PeriodicMonitoringThread.ignore_current_greenlet_blocking  s    >>@@@@@r    c                 8    | j                                          d S r-   )rA   !monitor_current_greenlet_blockingr2   s    r!   r   z:PeriodicMonitoringThread.monitor_current_greenlet_blocking  s    ??AAAAAr    c                 8    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!    &(((LLLr    c                 .    |                                  d uS r-   )r   r2   s    r!   can_monitor_memory_usagez1PeriodicMonitoringThread.can_monitor_memory_usage  s      ""$..r    c                     |                                  s!dd l}|                    dt                     d S |                     | j        t          t          j        | j	                             d S )Nr   z/Unable to monitor memory usage. Install psutil.)
r   warningswarnr   rc   monitor_memory_usagerf   rC   memory_monitor_periodmin_memory_monitor_period)r*   r   s     r!   install_monitor_memory_usagez5PeriodicMonitoringThread.install_monitor_memory_usage  s     ,,.. 	OOOMMK(* * *F$$T%>%()L)-)G&I &I	J 	J 	J 	J 	Jr    c                    t           j        }|sdS |                                                                 }t	          |dd          p|j        }d }||k    r3|| j        k    r t          |||          }t          |           || _        n4| 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 	2""$$5577 FE1--;	{""40004{F4 4u$-D!! $ 1{FD4IK Ku$%D!r    c                     d| j         j        dt          t          |                     dt          | j                  dt                      d|                                 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__A  sa     N###4MMMM)****LLLLNN 	r    )r   r   r   re   rg   r   rE   rF   r   rA   r+   rM   propertyrK   rX   rc   ri   rk   r<   r{   rB   r   r   r   r   r   r   r   r6   r   r    r!   r   r   <   sx         N !" ! "
    &C C C     X * * *X X X.5 5 5% % %  ,< ,< ,<\H H H<) ) )A A AB B B  
/ / /J J J  <    r    )&
__future__r   r   r   rH   rr   weakrefr   r;   greenletr   geventr   rC   gevent.monkeyr	   gevent.eventsr
   r   r   r   r   r   gevent._tracerr   gevent._compatr   r   r   __all__r?   r   rp   RuntimeWarningr   objectr#   r   r   r    r!   <module>r      s'   @ @ @ @ @ @ @ @ @ @ 				 



             * * * * * * & & & & & &             * * * * * * 6 6 6 6 6 6 3 3 3 3 3 3 0 0 0 0 0 0 % % % % % % ) ) ) ) ) ) * * * * * * ' ' ' ' ' ' 2 2 2 2 2 2
   <== <1CDD |FG,,( ( ( ( (^ ( ( (F F F F FF F F F& #$$J J J J Jv J J %$J J Jr    