2012-01-18 4 views
0

표준 read-eval-print 루프를 사용하는 프로그램에서 알람을 구현하려고합니다.타이머 인터럽트 대기 프로세스를 만드는 방법은 무엇입니까?

while True: 
    input = get_input() # A function that waits for input and 
         # returns the input once it is obtained 
    set_alarm(interpret(input)) # A function that sets the alarm 

Set_alarm는 threading.Timer의 클래스를 사용

코드의 예는 다음과 같이 될 것이다. 이 문제가 하나 있습니다. 타이머는 시간에 활성화되지만 get_input()이 입력을 기다리고있을 때 타이머는 필요한 출력을 생성하기 전에 해당 프로세스가 완료 될 때까지 대기합니다.

타이머의 콜백 기능이 대기 기능을 중단하고 활성화 된 직후 출력을 생성하는 방법이 있습니까?

감사합니다.

답변

0

CPython checks for signals 개별 순수 파이썬 단계 사이. get_input()은 전역 인터프리터 잠금을 소유하고 있으며 get_input이 반환 될 때까지 신호 처리가 지연 될 수 있습니다.

해결 방법은 비 차단 호출을 사용하여 제한 시간을 준수하는 방식으로 사용자 입력을 요청하는 것입니다. 플랫폼에 따라 kbhit을 사용하거나 (표준 입력으로) 사용자 입력을받을 수 있습니다.

+0

좋아, 고마워! 하지만 khbit는 키 입력에만 적용됩니다. 맞습니까? get_input()이 말하기와 같은 다른 형식의 입력을 받으면 어떻게할까요? – Jian

+0

@ Jian : 그렇다면 이미 처리 중이거나 이미 처리 된 음성이 있는지 판단하기 위해 일종의 비 차단 방법을 찾아야합니다. – martineau

관련 문제