Lekko zmodyfikowałem przykład sygnału z official docs (dół strony).signal.alarm nie wyzwala wyjątku na czas
Dzwonię pod numer sleep 10
, ale chciałbym, aby alarm został podniesiony po 1 sekundzie. Po uruchomieniu poniższego fragmentu zajmuje to więcej niż 1 sekundę, aby wywołać wyjątek (myślę, że trwa to całe 10 sekund).
import signal, os
def handler(signum, frame):
print 'Interrupted', signum
raise IOError("Should after 1 second")
signal.signal(signal.SIGALRM, handler)
signal.alarm(1)
os.system('sleep 10')
signal.alarm(0)
Jak mogę zakończyć działanie funkcji po przekroczeniu limitu czasu w aplikacji jednowątkowej?
Czy Twoje połączenie z systemem "uśpienia" nie zawiesza wszystkiego, łącznie z licznikiem sygnału? Alarm nie gaśnie, ponieważ również śpi. Prawdopodobnie musisz przekazać to wywołanie "uśpienia" do osobnego procesu z modułem ['subprocess'] (https://docs.python.org/3/library/subprocess.html). – JCVanHamme