alarm
을 사용하면 4 초 후에 시간을 제한 할 수 있습니다. 사용할 수있는 함수와 예외 클래스가 필요하기 때문에 일부 설정이 필요합니다.
import signal
# Define a couple things.
class TimeoutException(Exception):
pass
def timeout_handler(signum, frame):
raise TimeoutException()
# Set the alarm handler.
signal.signal(signal.SIGALRM,timeout_handler)
alarmOn = False
try:
while True:
# Pitch detection algorithm
if pitch_energy <= threshold:
# False condition - start your alarm.
if not alarmOn:
signal.alarm(4)
alarmOn = True
else:
# True condition - turn off the alarm.
alarmOn = False
signal.alarm(0)
result.append(pitch)
except TimeoutException: # This happens if four seconds pass without signal.alarm(0) being called.
print "We're done."
signal.alarm(0) # Turn the alarm off
signal.alarm()
기능을 사용하면 초를주는 어떤 값으로 타이머를 시작합니다. 알람이 리셋되지 않고 몇 초가 지나면 SIGALRM
신호가 전송됩니다. 위의 코드가 작동하는 방식은 SIGALRM
신호를 잡아 당기고 사용자 정의 TimeoutException
을 던집니다. 이것은 우리가 그 예외를 잡았으므로 while
루프에서 벗어날 수있게 해줍니다.
EDIT : dano의 대답을 보면이 것이 지나치게 복잡 할 가능성이 있습니다. 우리의 가장 큰 차이점은이 솔루션을 사용하면 4 초가 지나면 즉시 수행중인 작업이 중단되어 중간에 피치 감지 알고리즘이 중지 될 수 있다는 것입니다. dano의 솔루션은 코드의 특정 지점에서 시간을 확인할 때까지 항상 대기합니다.
pitch_energy> 임계 값이 4 초 동안 거짓 인 경우 루프에서 벗어납니다. –
조건을 false로 지정하면 카운터를 사용하고 휴식을 취하는 것처럼 들립니다. –
휴식 시간으로 "경과 시간"을 사용할 수있는 방법이 있습니까? –