c语言中的sched头文件,使用sched库完成周期定时任务

我们经常需要定时的执行某个任务,在Linux下我们有强大的crontab

我们经常需要定时执行某个任务,在linux下有强大的crontab,在python里除了第三方模块外,python自带了sched模块和Timer类,用于完成周期任务。timer类在threading模块里。

下面主要说明sched模块的使用

scheduler.scheduler(timefunc, delayfunc)

scheduler对像有如下方法和属性:

scheduler.enterabs(time,priority,action,argument)   生成一个调度事件,它的返回值可用于取消这个调度事件.相同时间执行的事件将按它们的优先级顺序处理

scheduler.enter(delay,priority,action,argument)     生成一个调度事件,返回值和enterabs一样

scheduler.cancel(event)    取消一个调度事件,参数为enterabs,enter的返回值。

scheduler.empty()    判断调度事件队列是否为空,空则返回True

scheduler.run()     运行所有调度事件,阻塞等待完成。这个方法使用构造方法中的delayfunc阻塞等下一个事件,然后执行它直至完成调度队列里的所有调度事件。cancel方法和run方法需不在一个线程里,如果在同一个线程需要在run之前cancel调度事件

scheduler.queue    调度队列

sched模块是一个延时调度处理模块,每次要执行某个任务时都必须写入一个调度任务(调用的方法)。

使用如下:生成一个调度器:

import time,sched

s=sched.scheduler(time.time,time.sleep)

说明:第一个参数必须是不带参数的时间函数,并且必须返回数字,比如此例返回的是一个时间戳,第二个参数是阻塞函数,该函数需带一个参数,兼容时间函数的输出。

添加第一调度事件:

添加调度事件的方法有2个enter和enterabs,以enter为例:

def print_time():

print "From print_time", time.time()

s.enter(5,1,print_time,())

执行

s.run()

需要注意的是sched模块不是循环的,一次调度被执行完后就结束了,如果要再执行,请再次enter, enter后也无需再次执行run.若在一个方法里重复调用run,当超过最大的递归深度时会导致异常,终止任务执行。

#! /usr/bin/env python

#coding=utf-8

import time, os, sched

# 第一个参数确定任务的时间,返回从某个特定的时间到现在经历的秒数

# 第二个参数以某种人为的方式衡量时间

schedule = sched.scheduler(time.time, time.sleep)

def run_command(cmd, inc):

# 安排inc秒后再次运行自己,即周期运行

schedule.enter(inc, 0, run_command, (cmd, inc))

os.system(cmd)

def timming_exe(cmd, inc = 60):

# enter用来安排某事件的发生时间,从现在起第n秒开始启动

schedule.enter(inc, 0, run_command, (cmd, inc))

# 持续运行,直到计划时间队列变成空为止

schedule.run()

print("show time after 10 seconds:")

if os.name == "nt":

timming_exe("echo %time%", 10)

elif os.name=="posix":

timming_exe("echo `date`", 10)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值