o
    tPf,                     @   s,  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 de!Z"G dd de#Z$eeG d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                   @   s   e Zd ZdZdS )MonitorWarningzThe type of warnings we emit.N)__name__
__module____qualname____doc__ r   r   P/var/www/html/humari/django-venv/lib/python3.10/site-packages/gevent/_monitor.pyr   %   s    r   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_MonitorEntryfunctionperiodlast_run_timec                 C   s   || _ || _d| _d S Nr   r    selfr!   r"   r   r   r   __init__-   s   
z_MonitorEntry.__init__c                 C   s   | j |j ko| j|jkS N)r!   r"   )r&   otherr   r   r   __eq__2   s   z_MonitorEntry.__eq__c                 C   s   t | j| jfS r(   )hashr!   r"   r&   r   r   r   __hash__5   s   z_MonitorEntry.__hash__c                 C   s   t | j| j| jfS r(   )reprr!   r"   r#   r,   r   r   r   __repr__8   s   z_MonitorEntry.__repr__N)r   r   r   	__slots__r'   r*   r-   r/   r   r   r   r   r   )   s    r   c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dd Z
dd	 Ze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d&d' ZdS )(r   g       @g{Gzt?   Nr   c                 C   s`   t || j| _d| _t |jksJ t | _t| j	t
jg| _t
j| _t| d| _t | _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&   hubr   r   r   r'   \   s   z!PeriodicMonitoringThread.__init__c                 C   s,   t  }|| jkr|| _t| d| _d S d S )Nr   )r?   r@   rA   r   r>   )r&   rA   r   r   r   _on_forko   s
   
z!PeriodicMonitoringThread._on_forkc                 C   s   |   S r(   )r4   r,   r   r   r   rB   w   s   zPeriodicMonitoringThread.hubc                 C   s>   t j}|| jd jkr|| jd _tdd | jD | _| jS )Nr   c                 s       | ]}|j V  qd S r(   r"   .0xr   r   r   	<genexpr>       z@PeriodicMonitoringThread.monitoring_functions.<locals>.<genexpr>)r:   r;   r<   r"   minr=   )r&   mbtr   r   r   monitoring_functions|   s
   z-PeriodicMonitoringThread.monitoring_functionsc                    s   t std|d u rfdd| jD | _n$|dkr tdt|  fdd| jD | _ | jvr<| j  tdd | jD | _d S )	Nzfunction must be callablec                    s   g | ]	}|j  kr|qS r   r!   rF   rN   r   r   
<listcomp>   s
    
zDPeriodicMonitoringThread.add_monitoring_function.<locals>.<listcomp>r   zPeriod must be positive.c                    s   g | ]}|j kr|n qS r   rN   rF   entryr!   r   r   rO      s    c                 s   rD   r(   rE   rF   r   r   r   rI      rJ   zCPeriodicMonitoringThread.add_monitoring_function.<locals>.<genexpr>)callable
ValueErrorr<   r   appendrK   r=   r%   r   rP   r   add_monitoring_function   s   



z0PeriodicMonitoringThread.add_monitoring_functionc                 C   s"   | j }|dkr
| jS t|| jfS r$   )r=   inactive_sleep_timemaxmin_sleep_time)r&   	min_sleepr   r   r   calculate_sleep_time   s   z-PeriodicMonitoringThread.calculate_sleep_timec                 C   s   | j sd S d| _ | j  d S )NF)r5   r8   killr,   r   r   r   r[      s   zPeriodicMonitoringThread.killc                 C   s   |    d S r(   )r[   )r&   _r   r   r   r3         z#PeriodicMonitoringThread._on_hub_gcc           	      C   s   t | t _zI| jrM|  }|sJ |  }t| | j}|s#|   | jrFt	 }|D ]}|j
}|j}|j}|rE|| |krE||_|| q+~| js
W d S W d S  tyY   Y d S    tratjsdY d S | j}|d ury|j| gt R   Y d S Y d S r(   )r2   r   gevent_monitoring_threadr5   rM   rZ   thread_sleeprB   r[   r   r!   r"   r#   
SystemExitsysstderrhandle_errorexc_info)	r&   	functions
sleep_timerB   this_runrQ   fr"   last_runr   r   r   __call__   s>   
z!PeriodicMonitoringThread.__call__c                 C   sl   | j |}|s
d S |d }| j ||td| jd}|j}|D ]}t||d q tt|t	j
| ||fS )N   F)greenlet_stackscurrent_thread_ident)file)r8   did_block_hubdid_block_hub_reportdictr>   exception_streamprintr	   r
   r:   r;   )r&   rB   	did_blockactive_greenletreportstreamliner   r   r   r9      s   z)PeriodicMonitoringThread.monitor_blockingc                 C      | j   d S r(   )r8    ignore_current_greenlet_blockingr,   r   r   r   rz         z9PeriodicMonitoringThread.ignore_current_greenlet_blockingc                 C   ry   r(   )r8   !monitor_current_greenlet_blockingr,   r   r   r   r|      r{   z:PeriodicMonitoringThread.monitor_current_greenlet_blockingc                    s   t    fdd| _ S )Nc                      s    S r(   r   r   procr   r   <lambda>  s    z7PeriodicMonitoringThread._get_process.<locals>.<lambda>)r   _get_processr,   r   r}   r   r     s   z%PeriodicMonitoringThread._get_processc                 C   s   |   d uS r(   )r   r,   r   r   r   can_monitor_memory_usage  r]   z1PeriodicMonitoringThread.can_monitor_memory_usagec                 C   s<   |   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   rU   monitor_memory_usagerW   r:   memory_monitor_periodmin_memory_monitor_period)r&   r   r   r   r   install_monitor_memory_usage	  s   z5PeriodicMonitoringThread.install_monitor_memory_usagec                 C   s   t j}|sdS |   }t|ddp|j}d }||kr0|| jkr+t|||}t| || _|S | jr?t	|||| j}t| d| _|S )Nussr   )
r:   max_memory_usager   memory_full_infogetattrrss_memory_exceededr   r	   r   )r&   _hubmax_allowedrusage	mem_usageeventr   r   r   r     s*   
	
z-PeriodicMonitoringThread.monitor_memory_usagec                 C   s*   d| j jtt| t| jt |  f S )Nz*<%s at %s in thread %s greenlet %r for %r>)	__class__r   hexidr>   r   r4   r,   r   r   r   r/   4  s   
z!PeriodicMonitoringThread.__repr__)r   r   r   rV   rX   r   r<   r=   r   r8   r'   rC   propertyrB   rM   rU   rZ   r[   r3   rj   r9   rz   r|   r   r   r   r   r/   r   r   r   r   r   <   s4    

		.)&
__future__r   r   r   r?   ra   weakrefr   r2   greenletr   geventr   r:   gevent.monkeyr   gevent.eventsr	   r
   r   r   r   r   gevent._tracerr   gevent._compatr   r   r   __all__r6   r   r_   RuntimeWarningr   objectr   r   r   r   r   r   <module>   s4   


