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.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()
는 동일합니다. 실제로 내부enterabs
는 delay
个时间单位。除了时间外,其他参数、含义和返回值与enterabs()
的值相同。其实内部enterabs
就是用来被enter
调用。
scheduler.cancel(event)
从队列中删除事件。如果事件不是当前队列中的事件,则该方法将跑出一个ValueError
。
scheduler.empty()
判断队列是否为空。
scheduler.run()
运行所有预定的事件。这个函数将等待(使用传递给构造函数的delayfunc()
函数),然后执行事件,直到不再有预定的事件。
任何action
或delayfunc
都可以引发异常。在这两种情况下,调度器将保持一个一致的状态并传播异常。如果一个异常是由action
引起的,就不会再继续执行run()
delayfunc()
함수) 그런 다음 이벤트가 없어질 때까지 실행합니다. 더 많은 예약 이벤트. 🎜🎜 Anyaction
또는 run(). 🎜🎜🎜🎜scheduler.queue🎜
읽기 전용 속성, 예정된 이벤트 목록을 반환합니다(도착 이벤트별로 정렬). 각 이벤트에는 time
、priority
、action
、argument
组成的namedtuple
가 있습니다.
위 내용은 Python 표준 라이브러리의 sched 모듈 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!