Home > Article > Backend Development > Introduction to the sched module of the Python standard library
sched
The content of the module is very simple, only one class is defined. It is used as a general event scheduling module.
class sched.scheduler(timefunc, delayfunc)
This class defines a general interface for scheduling events. It requires two parameters to be passed in from the outside. timefunc
is one without For parameters that return time type numbers (commonly used such as time in the time module), delayfunc
should be a function that requires one parameter to call, is compatible with the output of timefunc, and functions to delay multiple time units function (commonly used such as sleep of the time module).
The following is an example:
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()
The output you see is that the first event is executed every 5 seconds, and the second event is executed every 10 seconds:
1499259731.99From print_time 1499259736.99From print_time 1499259741.991499259741.99
In multi-threaded scenarios, there will be thread safety issues, and the run() function will block the main thread. The official recommendation is to use the threading.Timer
class instead:
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()
The scheduler object has the following methods or properties:
scheduler.enterabs(time, priority, action, argument)
Add an event, the time
parameter should be the same as the passed to the constructor timefunc
Numeric type compatible with the return value of the function. Events arriving at the same time will be executed in order priority
.
The execution event is actually the execution of action(argument)
. argument must be a sequence containing action
parameters.
The return value is an event, which can be used to cancel the event later (see cancel()
).
scheduler.enter(delay, priority, action, argument)
Schedule an event to delay delay
time units. Except for time, other parameters, meanings and return values are the same as those of enterabs()
. In fact, the internal enterabs
is used to be called by enter
.
scheduler.cancel(event)
Delete events from the queue. If the event is not an event currently in the queue, this method will run a ValueError
.
scheduler.empty()
Determine whether the queue is empty.
scheduler.run()
Run all scheduled events. This function will wait (using the delayfunc()
function passed to the constructor) and then execute events until there are no more scheduled events.
Any action
or delayfunc
can throw an exception. In both cases, the scheduler will maintain a consistent state and propagate exceptions. If an exception is caused by action
, run()
will not continue to be executed.
scheduler.queue
Read-only attribute, returns a list of upcoming events (sorted by arrival events), each event has time
, priority
, #namedtuple
composed of ##action and
argument.
The above is the detailed content of Introduction to the sched module of the Python standard library. For more information, please follow other related articles on the PHP Chinese website!