2011-06-13 5 views
0

어떻게하는지 알아 내는데 어려움이 있습니다.파이썬 시간 문제

설정 기간 동안 파이썬 스크립트를 실행하려고합니다. 그리고 그 기간의 1/10마다 뭔가를 실행하는 데 필요합니다. 문제는이 단계가 완료하는 데 어느 정도 시간이 걸릴 수 있다는 것입니다. 나는 처음에 설정된 최대 지속 시간을 넘을 수 없다.

예 : 기간 20시간

간격 = 20/10 = 2 시간 (이 필요한 경우 변경 가능)

시간마다 그 기능을 실행하는(). function()은 완료하는 데 0-60 분이 걸립니다. 그리고는 잔다. 어떻게하면 9 번 더 계속 실행되지만 최대 지속 시간을 초과하지 않도록 할 수 있습니까?

+1

단순히 글로벌 타이머를 사용하지 않는 이유는 무엇입니까? 예를 들어 아주 초기부터 시작하여 필요할 때마다 값을 확인하십시오. –

+1

'signal.alarm'을 체크 아웃하면 신호를 사용할 수 있습니다. 이 방법으로 SIGALRM이 주어진 간격 동안 생성되며, 시그널 핸들러가'function'을 호출하도록 설정할 수 있습니다. 또한'signal.setitimer'를 확인하십시오. –

답변

2

아마도 신호를 사용할 수 있습니다. SIGALRM이 생성 될 때 호출되도록 신호 처리기를 설정하는 것이 좋습니다. 신호 처리기에서 function을 호출 할 수 있습니다. 그런 다음 알람을 재설정하고 다시하십시오. 이것은 당신에게 아이디어를주기위한 기본적인 예입니다. 그러나 나는 그와 함께 작동하는 방법 확실하지 않다,

signal.signal(signal.SIGALRM, alarm_handler) 
signal.alarm(interval) 

또는 자동 간격으로 알람을 구성 할 수 signal.setitimer을 사용할 수 있습니다 : 알람이 울릴되면

import signal 
... 
signal.signal(signal.SIGALRM, alarm_handler) # set the signal handler 
signal.alarm(interval)      # set the alarm 
... 
def alarm_handler(signum, stack): 
    # call function 
    function() 

, 당신은 function()를 호출 한 후 알람 리셋 큰 timeslices (그것 microsleeps를 위해 사용되는).

주 : signal.alarm()을 주 스레드에서 호출해야합니다.

0

포크 실제 작업을 수행하는 하위 프로세스. 실행 제한을 초과하면 작업을 종료하십시오.