You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							30 lines
						
					
					
						
							737 B
						
					
					
				
			
		
		
	
	
							30 lines
						
					
					
						
							737 B
						
					
					
				import time
 | 
						|
import functools
 | 
						|
 | 
						|
from openpilot.common.swaglog import cloudlog
 | 
						|
 | 
						|
 | 
						|
def retry(attempts=3, delay=1.0, ignore_failure=False):
 | 
						|
  def decorator(func):
 | 
						|
    @functools.wraps(func)
 | 
						|
    def wrapper(*args, **kwargs):
 | 
						|
      for _ in range(attempts):
 | 
						|
        try:
 | 
						|
          return func(*args, **kwargs)
 | 
						|
        except Exception:
 | 
						|
          cloudlog.exception(f"{func.__name__} failed, trying again")
 | 
						|
          time.sleep(delay)
 | 
						|
 | 
						|
      if ignore_failure:
 | 
						|
        cloudlog.error(f"{func.__name__} failed after retry")
 | 
						|
      else:
 | 
						|
        raise Exception(f"{func.__name__} failed after retry")
 | 
						|
    return wrapper
 | 
						|
  return decorator
 | 
						|
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
  @retry(attempts=10)
 | 
						|
  def abc():
 | 
						|
    raise ValueError("abc failed :(")
 | 
						|
  abc()
 | 
						|
 |