o
    e7                     @   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 g dZG d	d
 d
eZG dd deZG dd deZG dd deZd dlmZ ee d dS )    )print_functionabsolute_importdivisionN)settrace)
getcurrent)format_run_info)perf_counter)gmctime)GreenletTracerHubSwitchTracerMaxSwitchTracerc                   @   sL   e Z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
   c                 C   s$   d| _ d | _t| }|| _d| _d S )Nr   F)greenlet_switch_counteractive_greenletr   previous_trace_function_killed)selfZ
prev_trace r   >D:\Projects\ConvertPro\env\Lib\site-packages\gevent/_tracer.py__init__   s
   
zGreenletTracer.__init__c                 C   s$   | j sd| _ t| j d | _d S d S NT)r   r   r   r   r   r   r   kill1   s
   

zGreenletTracer.killc                 C   sF   |  j d7  _ |dv r|d | _nd | _| jd ur!| || d S d S )N   )switchthrow)r   r   r   r   eventargsr   r   r   _trace8   s   
zGreenletTracer._tracec                 C   s   |  ||S N)r   r   r   r   r   __call__D      zGreenletTracer.__call__c                 C   s6   | j }| jdk}d| _|s|d u s||u rdS d|fS )Nr   FT)r   r   )r   hubr   Z
did_switchr   r   r   did_block_hubG   s   
zGreenletTracer.did_block_hubc                 C   s
   d | _ d S r   )r   r   r   r   r    ignore_current_greenlet_blocking^   s   
z/GreenletTracer.ignore_current_greenlet_blockingc                 C   s   t  | _d S r   )r   r   r   r   r   r   !monitor_current_greenlet_blockingb   r!   z0GreenletTracer.monitor_current_greenlet_blockingc                 C   s   ddt  t|f g}|d| f  z	t |j }W n ty+   d|f g}Y nw t|}|dt	|jf  |d
| |d |tdi | |S )	NzP================================================================================z'
%s : Greenlet %s appears to be blockedz    Reported by %sz$Unknown: No thread found for hub %r
z!Blocked Stack (for thread id %s): zInfo:r   )r	   strappendsys_current_framesZthread_identKeyError	tracebackformat_stackhexjoinextendr   )r   r"   r   Zformat_kwargsreportframestackr   r   r   did_block_hub_reporte   s"   

z#GreenletTracer.did_block_hub_reportN)__name__
__module____qualname__r   r   r   r    r#   r$   r%   r4   r   r   r   r   r
      s    r
   c                   @   s   e Zd Zdd Zdd ZdS )
_HubTracerc                 C   s   t |  || _|| _d S r   )r
   r   max_blocking_timer"   r   r"   r9   r   r   r   r   ~   s   

z_HubTracer.__init__c                 C   s   d | _ t|  d S r   )r"   r
   r   r   r   r   r   r      s   z_HubTracer.killN)r5   r6   r7   r   r   r   r   r   r   r8   }   s    r8   c                   @   $   e Zd Zdd Zdd Zdd ZdS )r   c                 C   s   t | || d| _d S Nr   )r8   r   last_entered_hubr:   r   r   r   r      s   
zHubSwitchTracer.__init__c                 C   s*   t | || | j| ju rt | _d S d S r   )r
   r   r   r"   r   r=   r   r   r   r   r      s   zHubSwitchTracer._tracec                 C   s    t  | j | jkrd| jfS d S r   )r   r=   r9   r   r   r"   r   r   r   r#      s   
zHubSwitchTracer.did_block_hubNr5   r6   r7   r   r   r#   r   r   r   r   r      s    r   c                   @   r;   )r   c                 C   s    t | || t | _d| _d S r<   )r8   r   r   last_switchmax_blockingr:   r   r   r   r      s   
zMaxSwitchTracer.__init__c                 C   sL   | j }t| || || jur"|d ur$t }t| j|| j | _d S d S d S r   )r   r
   r   r"   r   maxrA   r@   )r   r   r   Z
old_activeZswitched_atr   r   r   r      s   
zMaxSwitchTracer._tracec                 C   s2   | j dkrt | j | _ | j | jkrd| jfS d S )Nr   T)rA   r   r@   r9   r   r>   r   r   r   r#      s
   

zMaxSwitchTracer.did_block_hubNr?   r   r   r   r   r      s    
r   )import_c_accelzgevent.__tracer)
__future__r   r   r   r)   r,   Zgreenletr   r   Zgevent.utilr   Zgevent._compatr   Zgevent._utilr	   __all__objectr
   r8   r   r   rC   globalsr   r   r   r   <module>   s   
b