block monitor
This commit is contained in:
		
							parent
							
								
									2f0ac33c02
								
							
						
					
					
						commit
						782a934af9
					
				@ -1,3 +1,4 @@
 | 
			
		||||
import asyncio
 | 
			
		||||
import os
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
@ -48,3 +49,28 @@ class FrameTrace(Instrumentation):
 | 
			
		||||
            print(frame.f_code.co_filename, frame.f_lineno)
 | 
			
		||||
            frame = frame.f_back
 | 
			
		||||
        return await method(*args, **kwargs)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ABlockMonitor:
 | 
			
		||||
    __task: asyncio.Future
 | 
			
		||||
    __max: float
 | 
			
		||||
 | 
			
		||||
    def __init__(self, threshold=0.0) -> None:
 | 
			
		||||
        self.__max = threshold
 | 
			
		||||
 | 
			
		||||
    async def _monitor(self):
 | 
			
		||||
        while True:
 | 
			
		||||
            delta = 10
 | 
			
		||||
            t = time.time()
 | 
			
		||||
            await asyncio.sleep(delta)
 | 
			
		||||
            spent = time.time() - t
 | 
			
		||||
            delay = spent - delta
 | 
			
		||||
            if delay > self.__max:
 | 
			
		||||
                self.__max = delay
 | 
			
		||||
                print(f'block monitor reached new peak delay {delay:.3f}')
 | 
			
		||||
 | 
			
		||||
    async def __aenter__(self):
 | 
			
		||||
        self.__task = asyncio.get_running_loop().create_task(self._monitor())
 | 
			
		||||
 | 
			
		||||
    async def __aexit__(self, exc_type, exc_val, exc_tb):
 | 
			
		||||
        self.__task.cancel()
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user