python定时执行任务

1 time.sleep

import time

for i in range(5):

  print(i)

  time.sleep(10)

2 用shed

import time  
import sched  
  
schedule = sched.scheduler ( time.time, time.sleep )  
  
def func(string1,float1):  
    print("now is",time.time()," | output=",string1,float1)
  
print(time.time())
schedule.enter(2,0,func,("test1",time.time()))  
schedule.enter(2,0,func,("test1",time.time()))  
schedule.enter(3,0,func,("test1",time.time()))  
schedule.enter(4,0,func,("test1",time.time()))  
schedule.run()  
print(time.time())

其中func中放要执行的函数,用schedule.enter加入要执行的函数,里面的第一个参数是延迟执行的时间,用sched.scheduler进行初始化

1512033155.9311035
now is 1512033157.9316308  | output= test1 1512033155.9311035
now is 1512033157.9316308  | output= test1 1512033155.9311035
now is 1512033158.9322016  | output= test1 1512033155.9311035
now is 1512033159.9316351  | output= test1 1512033155.9311035
1512033159.9316351
[Finished in 4.2s]

上面是执行结果,缺点是任务队列是阻塞型,即schedule里的任务不执行完,后面的主线程就不会执行

3 用threading里的timer,实现非阻塞型,即主线程要任务同时执行

import time  
from threading import Timer  
  
def print_time( enter_time ):  
    print "now is", time.time() , "enter_the_box_time is", enter_time  
  
  
print time.time()  
Timer(5,  print_time, ( time.time(), )).start()  
Timer(10, print_time, ( time.time(), )).start()  
print time.time()  

执行结果:

1512034286.9443169
1512034286.9452875
now is 1512034291.9460146 enter_the_box_time is 1512034286.9443169
now is 1512034296.9461012 enter_the_box_time is 1512034286.9452875
[Finished in 10.2s]

可看出任务和主线程是同步执行,但是后3位又稍有不同,应该是python的多线程并非真正的多线程导致

每天某个时间定时执行任务:

import datetime
import time

def doSth():
    print('test')
    # 假装做这件事情需要一分钟
    time.sleep(60)

def main(h=0, m=0):
    '''h表示设定的小时,m为设定的分钟'''
    while True:
        # 判断是否达到设定时间,例如0:00
        while True:
            now = datetime.datetime.now()
            # 到达设定时间,结束内循环
            if now.hour==h and now.minute==m:
                break
            # 不到时间就等20秒之后再次检测
            time.sleep(20)
        # 做正事,一天做一次
        doSth()

main()

4 linux用 crontab

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值