>백엔드 개발 >파이썬 튜토리얼 >Python 표준 라이브러리의 sched 모듈 소개

Python 표준 라이브러리의 sched 모듈 소개

零下一度
零下一度원래의
2017-07-20 18:06:391992검색

이벤트 일정

 sched 모듈의 내용은 매우 간단하며 하나의 클래스만 정의합니다. 일반적인 이벤트 스케줄링 모듈로 사용됩니다. sched模块内容很简单,只定义了一个类。它用来最为一个通用的事件调度模块。

  class sched.scheduler(timefunc, delayfunc)这个类定义了调度事件的通用接口,它需要外部传入两个参数,timefunc是一个没有参数的返回时间类型数字的函数(常用使用的如time模块里面的time),delayfunc应该是一个需要一个参数来调用、与timefunc的输出兼容、并且作用为延迟多个时间单位的函数(常用的如time模块的sleep)。

  下面是一个列子:

import sched, time

s = sched.scheduler(time.time, time.sleep) # 生成调度器def print_time():print "From print_time", time.time()def print_some_times():print time.time()
s.enter(5, 1, print_time, ()) 
# 加入调度事件# 四个参数分别是:# 间隔事件(具体值决定与delayfunc, 这里为秒);# 优先级(两个事件在同一时间到达的情况);# 触发的函数;# 函数参数;s.enter(10, 1, print_time, ())# 运行s.run()print time.time()if __name__ == '__main__':
print_some_times()

  看到的输出结果,隔5秒中执行第一个事件,隔10秒后执行第二个事件:

1499259731.99From print_time 1499259736.99From print_time 1499259741.991499259741.99

  在多线程场景中,会有线程安全问题,run()函数会阻塞主线程。官方建议使用threading.Timer类代替:

import timefrom threading import Timerdef print_time():print "From print_time", time.time()def print_some_times():print time.time()
Timer(5, print_time, ()).start()
Timer(10, print_time, ()).start()
time.sleep(11) # 阻塞主线程,等待调度程序执行完毕,再执行后面内容print time.time()if __name__ == '__main__':
print_some_times()

Scheduler对象方法

  scheduler对象拥有下面这些方法或属性:

  • scheduler.enterabs(time, priority, action, argument)

  加入一个事件,time参数应该是一个与传递给构造函数的timefunc函数的返回值相兼容的数值类型。在同一时间到达的事件将按照priority顺序执行。

  执行事件其实就是执行action(argument)。argument必须是一个包含action参数的序列。

  返回值是一个事件,它可以用于稍后取消事件(请参见cancel()

 class sched.scheduler(timefunc, Delayfunc)이 클래스는 외부 입력이 필요한 이벤트 예약용 인터페이스를 정의합니다. 매개변수, delayfunc는 timefunc의 출력과 호환되는 하나의 매개변수와 함께 호출되어야 하며 여러 시간 단위를 지연시키는 함수(일반적으로 사용됨) 시간 모듈의 수면으로). 🎜🎜 다음은 예입니다.🎜rrreee🎜 표시되는 출력은 첫 번째 이벤트가 5초마다 실행되고 두 번째 이벤트가 10초마다 실행된다는 것입니다.🎜rrreee🎜멀티 스레드 시나리오에서는 스레드가 있습니다. 안전 문제로 인해 run() 함수는 메인 스레드를 차단합니다. 공식적인 권장 사항은 threading.Timer 클래스: 🎜rrreee🎜Scheduler 개체 메서드🎜🎜 메소드 또는 속성: 🎜
  • scheduler.enterabs(time, 우선 순위, 작업, 인수 )🎜 li>

🎜 이벤트 추가, time 매개변수는 timefunc 함수의 반환 값과 호환되는 숫자 유형입니다. 동시에 도착하는 이벤트는 그에 따라 크기가 조정됩니다. border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; 🎜🎜  실행 이벤트는 실제로 실행입니다액션(인수) 인수는 action 매개변수 순서. 🎜🎜 반환 값은 이벤트이며 나중에 이벤트를 취소하는 데 사용할 수 있습니다( 취소()) 🎜
  • scheduler.enter(delay,priority,action,argument)

이벤트를 지연하도록 예약enterabs()는 동일합니다. 실제로 내부enterabsdelay个时间单位。除了时间外,其他参数、含义和返回值与enterabs()的值相同。其实内部enterabs就是用来被enter调用。

  • scheduler.cancel(event)

  从队列中删除事件。如果事件不是当前队列中的事件,则该方法将跑出一个ValueError

  • scheduler.empty()

  判断队列是否为空。

  • scheduler.run()

  运行所有预定的事件。这个函数将等待(使用传递给构造函数的delayfunc()函数),然后执行事件,直到不再有预定的事件。

  任何actiondelayfunc都可以引发异常。在这两种情况下,调度器将保持一个一致的状态并传播异常。如果一个异常是由action引起的,就不会再继续执行run()

  • scheduler.cancel(event)

    🎜🎜  대기열에서 이벤트를 삭제합니다. 이벤트가 현재 대기열의 이벤트가 아닌 경우 이 메서드는 em; white-space: pre-wrap; border: 1px solid #eaeaea; background-color: #f8f8f8; 인라인;">값 오류. 🎜🎜🎜🎜scheduler.empty()🎜🎜🎜🎜  대기열이 비어 있는지 확인합니다. 🎜🎜🎜🎜scheduler.run()🎜🎜🎜🎜  예정된 모든 이벤트를 실행합니다. 이 함수는 대기합니다( delayfunc() 함수) 그런 다음 이벤트가 없어질 때까지 실행합니다. 더 많은 예약 이벤트. 🎜🎜 Anyaction 또는 run(). 🎜🎜🎜🎜scheduler.queue🎜

  읽기 전용 속성, 예정된 이벤트 목록을 반환합니다(도착 이벤트별로 정렬). 각 이벤트에는 timepriorityactionargument组成的namedtuple가 있습니다.

위 내용은 Python 표준 라이브러리의 sched 모듈 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.