sched --- 이벤트 스케줄러¶
소스 코드: Lib/sched.py
sched 모듈은 범용 이벤트 스케줄러를 구현하는 클래스를 정의합니다:
- 
class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)¶
- flowdas - 스케줄러 객체는 - heapq를 사용합니다. 따라서 개별 이벤트를 등록하고, 실행하는 시간 복잡도는 O(log n) 입니다. 하지만- cancel()은 최적화되지 않아서, O(log n) 이 가능한데도 O(n) 시간 복잡도를 제공하고 있습니다.- flowdas - 스케줄러가 스레드 안전하기는 하지만, - run()이 실행 중이고, 다음 이벤트가 실행될 시간이 도래할 때까지 기다리고 있는 상황에서, 다른 스레드에서 이벤트를 등록해도 깨어나지 않습니다.- scheduler클래스는 이벤트 스케줄링을 위한 일반적인 인터페이스를 정의합니다. "외부 세계"를 실제로 다루기 위해 두 개의 함수를 요구합니다 --- timefunc는 인자 없이 호출할 수 있어야 하고, 숫자(단위가 무엇이든, "시간")를 반환합니다. delayfunc 함수는 하나의 인자로 호출 가능해야 하며, timefunc의 출력과 호환되어야 하고, 그 시간 동안 지연시켜야 합니다. delayfunc는 다중 스레드 응용 프로그램에서 다른 스레드가 실행할 기회를 주기 위해 각 이벤트가 실행된 후- 0인자로 호출되기도 합니다.- 버전 3.3에서 변경: timefunc 와 delayfunc 매개 변수는 선택적입니다. - 버전 3.3에서 변경: - scheduler클래스는 다중 스레드 환경에서 안전하게 사용할 수 있습니다.
예제:
>>> import sched, time
>>> s = sched.scheduler(time.time, time.sleep)
>>> def print_time(a='default'):
...     print("From print_time", time.time(), a)
...
>>> def print_some_times():
...     print(time.time())
...     s.enter(10, 1, print_time)
...     s.enter(5, 2, print_time, argument=('positional',))
...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
...     s.run()
...     print(time.time())
...
>>> print_some_times()
930343690.257
From print_time 930343695.274 positional
From print_time 930343695.275 keyword
From print_time 930343700.273 default
930343700.276
스케줄러 객체¶
scheduler 인스턴스에는 다음과 같은 메서드와 어트리뷰트가 있습니다:
- 
scheduler.enterabs(time, priority, action, argument=(), kwargs={})¶
- 새 이벤트를 예약합니다. time 인자는 생성자에 전달된 timefunc 함수의 반환 값과 호환되는 숫자 형이어야 합니다. 같은 time으로 예약된 이벤트는 priority 순으로 실행됩니다. 낮은 숫자는 높은 우선순위를 나타냅니다. - 이벤트를 실행하는 것은 - action(*argument, **kwargs)를 실행하는 것을 의미합니다. argument는 action에 대한 위치 인자가 들어있는 시퀀스입니다. kwargs는 action에 대한 키워드 인자가 들어있는 딕셔너리입니다.- 반환 값은 나중에 이벤트를 취소하는 데 사용할 수 있는 이벤트입니다 ( - cancel()참조).- 버전 3.3에서 변경: argument 매개 변수는 선택적입니다. - 버전 3.3에서 변경: kwargs 매개 변수가 추가되었습니다. 
- 
scheduler.enter(delay, priority, action, argument=(), kwargs={})¶
- delay 시간 단위 후로 이벤트를 예약합니다. 상대 시간 이외의 다른 인자, 효과 및 반환 값은 - enterabs()와 같습니다.- 버전 3.3에서 변경: argument 매개 변수는 선택적입니다. - 버전 3.3에서 변경: kwargs 매개 변수가 추가되었습니다. 
- 
scheduler.cancel(event)¶
- 큐에서 이벤트를 제거합니다. event가 현재 큐에 없으면, 이 메서드는 - ValueError를 발생시킵니다.
- 
scheduler.empty()¶
- 이벤트 큐가 비어있으면 - True를 반환합니다.
- 
scheduler.run(blocking=True)¶
- 모든 예약된 이벤트를 실행합니다. 이 메서드는 다음 이벤트를 (생성자에 전달된 - delayfunc()함수를 사용하여) 기다린 다음 예약된 이벤트가 소진될 때까지 계속 실행합니다.- blocking이 거짓이면 시간이 도래한 (있다면) 예약된 이벤트를 모두 실행한 다음, 스케줄러에서 다음 예약된 호출까지의 (있다면) 대기시간을 반환합니다 . - action 이나 delayfunc는 예외를 발생시킬 수 있습니다. 두 경우 모두, 스케줄러는 일관된 상태를 유지하고 예외를 전파합니다. action에 의해 예외가 발생하면, 이후에 - run()을 호출할 때 이벤트를 실행하려고 하지 않습니다.- 일련의 이벤트가 다음 이벤트 이전에 사용 가능한 시간보다 실행하는 데 더 오래 걸리면, 스케줄러는 단순히 지연됩니다. 어떤 이벤트도 삭제되지 않습니다; 더는 적절하지 않은 이벤트를 취소할 책임은 호출 코드에 있습니다. - 버전 3.3에서 변경: blocking 매개 변수가 추가되었습니다. 
