Timeout(): gerçek dünya örneği

Python'da Fonksiyon Yazımı

Shayne Miel

Software Architect @ Duo Security

Zaman aşımı


def function1():
  # Bu fonksiyon bazen
  # çok uzun sürer
  ...

def function2(): # Bu fonksiyon bazen # takılır ve dönmez ...
Python'da Fonksiyon Yazımı

Zaman aşımı

@timeout
def function1():
  # Bu fonksiyon bazen
  # çok uzun sürer
  ...

@timeout def function2(): # Bu fonksiyon bazen # takılır ve dönmez ...

kronometre

Python'da Fonksiyon Yazımı

Zaman aşımı - arka plan bilgisi

import signal

def raise_timeout(*args, **kwargs): raise TimeoutError()
# Bir "alarm" sinyali çaldığında, raise_timeout() çağrılsın signal.signal(signalnum=signal.SIGALRM, handler=raise_timeout)
# 5 saniye sonra alarm kur signal.alarm(5)
# Alarmı iptal et signal.alarm(0)
Python'da Fonksiyon Yazımı
def timeout_in_5s(func):

@wraps(func) def wrapper(*args, **kwargs):
# 5 saniye için alarm kur signal.alarm(5)
try: # Süslenen fonksiyonu çağır return func(*args, **kwargs)
finally: # Alarmı iptal et signal.alarm(0)
return wrapper
@timeout_in_5s
def foo():
  time.sleep(10)
  print('foo!')
foo()
TimeoutError
Python'da Fonksiyon Yazımı
def timeout(n_seconds):

def decorator(func):
@wraps(func) def wrapper(*args, **kwargs):
# n saniye için alarm kur signal.alarm(n_seconds)
try: # Süslenen fonksiyonu çağır return func(*args, **kwargs) finally: # Alarmı iptal et signal.alarm(0)
return wrapper
return decorator
@timeout(5)
def foo():
  time.sleep(10)
  print('foo!')

@timeout(20) def bar(): time.sleep(10) print('bar!')
foo()
TimeoutError
bar()
bar!
Python'da Fonksiyon Yazımı

Hadi pratik yapalım!

Python'da Fonksiyon Yazımı

Preparing Video For Download...