sched — 이벤트 스케줄러
sched — 이벤트 스케줄러
sched 모듈은 범용 이벤트 스케줄러를 구현하는 클래스를 정의합니다.
본문
sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep)
scheduler 클래스는 이벤트 스케줄링을 위한 일반적인 인터페이스를 정의합니다. "외부 세계"를 실제로 다루기 위한 두 함수가 필요합니다 — timefunc는 인자 없이 호출 가능해야 하며 어떤 단위든 숫자("시간")를 반환해야 합니다. delayfunc 함수는 timefunc의 출력과 호환되는 하나의 인자로 호출 가능해야 하며, 그만큼의 시간 단위만큼 지연해야 합니다. delayfunc는 각 이벤트가 실행된 후 인자 0으로도 호출되어 다중 스레드 응용 프로그램에서 다른 스레드가 실행될 기회를 허용합니다.
versionchanged: 3.3에서
timefunc와delayfunc매개변수는 선택 사항이 되었습니다.
versionchanged: 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.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))
... s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))
... s.run()
... print(time.time())
...
>>> print_some_times()
1652342830.3640375
From print_time 1652342830.3642538 second enterabs
From print_time 1652342830.3643398 first enterabs
From print_time 1652342835.3694863 positional
From print_time 1652342835.3696074 keyword
From print_time 1652342840.369612 default
1652342840.3697174
스케줄러 객체
scheduler 인스턴스는 다음 메서드와 속성을 가집니다.
scheduler.enterabs(time, priority, action, argument=(), kwargs={})
새 이벤트를 스케줄합니다. time 인자는 생성자에 전달된 timefunc 함수의 반환 값과 호환되는 숫자 형이어야 합니다. 같은 시간에 예약된 이벤트는 우선순위 순서로 실행됩니다. 낮은 숫자가 더 높은 우선순위를 나타냅니다.
이벤트 실행은 action(*argument, **kwargs)을 실행하는 것을 의미합니다. argument는 action의 위치 인자를 담는 시퀀스이고, kwargs는 action의 키워드 인자를 담는 사전입니다.
반환 값은 나중에 이벤트를 취소하는 데 사용할 수 있는 이벤트입니다(cancel() 참고).
versionchanged: 3.3에서
argument매개변수는 선택 사항이 되었습니다.versionchanged: 3.3에서
kwargs매개변수가 추가되었습니다.
scheduler.enter(delay, priority, action, argument=(), kwargs={})
delay 시간 단위 후에 이벤트를 스케줄합니다. 상대적인 시간 외에 다른 인자, 효과, 반환 값은 enterabs()와 동일합니다.
scheduler.cancel(event)
큐에서 이벤트를 제거합니다. event가 현재 큐에 있는 이벤트가 아니면 이 메서드는 ValueError를 발생시킵니다.
scheduler.empty()
이벤트 큐가 비어 있으면 True를 반환합니다.
scheduler.run(blocking=True)
모든 예약된 이벤트를 실행합니다. 이 메서드는 (생성자에 전달된 delayfunc 함수를 사용하여) 다음 이벤트를 기다린 다음 실행하고, 예약된 이벤트가 더 이상 없을 때까지 계속합니다.
blocking이 거짓이면, 현재 timefunc 값보다 작거나 같은 시간 값(있는 경우)을 가진 큐의 모든 이벤트를 즉시 실행하고, 현재 timefunc 값과 스케줄러의 이벤트 큐에 있는 다음 예약 이벤트의 시간 값 사이의 차이를 반환합니다. 큐가 비어 있으면 None을 반환합니다.
action 또는 delayfunc 중 하나가 예외를 발생시킬 수 있습니다. 어느 경우든 스케줄러는 일관된 상태를 유지하고 예외를 전파합니다. action이 예외를 발생시키면 해당 이벤트는 이후 run() 호출에서 시도되지 않습니다.
일련의 이벤트 실행이 다음 이벤트 전에 사용 가능한 시간보다 오래 걸리면 스케줄러는 단순히 지연됩니다. 어떤 이벤트도 버려지지 않습니다. 더 이상 관련 없는 이벤트를 취소하는 것은 호출 코드의 책임입니다.
versionchanged: 3.3에서
blocking매개변수가 추가되었습니다.
scheduler.queue
실행될 순서로 다가오는 이벤트의 목록을 반환하는 읽기 전용 속성입니다. 각 이벤트는 time, priority, action, argument, kwargs 필드를 가진 named tuple로 표시됩니다.