2017-10-24 3 views
1

나는 미래의 사건들의 대기열이 시간 순서대로 나열된 스케줄링 기능과 스케줄러를 가지고있다. 저는 UNIX 타임 스탬프와 일반 time.time()을 사용하고 있습니다. 스케줄러의 한 조각이 거의 비슷하다 :일정한 시간 동안 단조로운 시간으로 일정 잡기

: 정확한 날짜와 시간, 예에

eventtime = time.time() + delay_seconds 

또는 기반으로 다음 eventtime이 계산 중 지연을 기반으로 할 수

# select the nearest event (eventfunc at eventime) 
sleeptime = eventtime - time.time() 
# if the sleep gets interrupted, 
# the whole block will be restarted 
interruptible_sleep(sleeptime) 
eventfunc() 

eventtime = datetime(year,month,day,hour,min).timestamp() 

이제는 파이썬으로 단조로운 시간을 보았습니다. 단조로운 시간을 사용하도록 스케줄러를 수정하려고합니다. 스케줄러는 그들이 말하는 단조로운 시간을 사용하기로되어 있습니다. 지연과

없음 문제 :

sleeptime = eventtime - time.monotonic() 

은 여기서

eventtime = time.monotonic() + delay_seconds 

그러나 정확한 시간

나는 가장 좋은 방법은 그대로 코드를 떠날 생각 없다. 그 맞습니까?

예인 경우 단조로운 시간을 기준으로 한 대기열과 정규 시간을 기준으로하는 두 개의 대기열이 필요합니다. 나는 그 아이디어를별로 좋아하지 않는다.

+0

['sched' 표준 모듈] (https://docs.python.org/3/library/sched.html)을 참고하십시오. 그것은 시간 조작 백엔드와 독립적으로 설계되었으며'time.monotonic'을 기본값으로 사용합니다. –

답변

1

주석에서 말씀 드렸듯이 코드는 sched standard module의 기능을 복제하므로이 문제를 해결하여 편리하게 마이그레이션 할 수 있습니다. 말했다

,

시스템 시간 앞으로 이동 또는 뒤로가 작업 별 있다면 당신은 어떻게해야하는지
  • . 당신은 아무것도에 관계없이 그들 사이에 설정된 간격으로 일을해야 할 때
  • time.monotonic()
  • 그래서, 솔루션 대신 시간에 반응 할 것으로 예상되는 경우 점프, 그렇지 않으면 조만간 이상의 예약 된 작업을 실행하여 경우에 설계 새로운 시스템 시간에 따라 단조로운 시간을 사용할 이유가 없습니다. 당신이 모두을하고자하는 경우

는 다음 중 하나가 이가지 타임 스탬프 두 스케줄러 또는 작업이 필요합니다.

후자의 경우 스케줄러는 하나의 유형을 다른 유형으로 변환해야합니다 (대기 할 계산할 때마다/다음 태스크를 실행할 것인지 여부). time은 아무런 의미가 없습니다.

+0

내 프로그램은 NTP가 잘 구성된 것으로 가정합니다 (즉, 서버는 점프가없는 정확한 시간을가집니다). 그러나 경우에만 더 강력한 솔루션을 보유하는 것이 항상 좋습니다. 그래서 단조로운 시계의 장단점을 조사하고 있습니다. 당신은 내 질문에 직접 대답하지 않았습니다.스케줄러에서 단조로운 클럭을 이용하려면 두 개의 이벤트 대기열이 필요합니까? 지연 시간, 간격 등을위한 하나의 큐 -'time.monotonic'과 또 다른 큐 - 정확한 날짜/시간에 스케줄링하기 -'time.time'으로 작업하기? – VPfB

+0

업데이트를 참조하십시오. –

관련 문제