threading.Timer

 

import datetime,threading

def aa(v, a, b):
    print(v,a,b)
    timer=threading.Timer(interval=2,function=aa,args=(2,),kwargs={'a':'22222','b':'3333333333'})
    timer.start()


timer=threading.Timer(interval=4, function=aa, args=(2,), kwargs={'a': '22222', 'b': '33333333333'})
timer.run()
threading.Event().wait(2)
print(1111111111)
timer.cancel()
print('after cancel')

while True:
    threading.Event().wait(2)
    print(threading.enumerate())

 

 由于run()方法没有开启多线程,顺序执行,因此cancel(),必须放在run()之前

import threading
def v(a):
    a+=1
    print(a)
    print('threads {} {}'.format(threading.enumerate(),threading.active_count()))
    if a>5:
        return
    t=threading.Timer(interval=2,function=v,args=(a,))
    t.start()
    return a
print(v(0),'iuop')

 

cronie定时任务

import threading,datetime
def v(a,b,c):
    print(a,b,c)
    #继续调用自身
    t=threading.Timer(interval=2,function=v,args=(22,),kwargs={'b':33,'c':44})
    t.start()

#当前时间
today=datetime.datetime.now()
#tomorrow
tomorrow= today + datetime.timedelta(days=+1)
#tomorrow.year,tomorrow.month,tomorrow.day均是int,next_time构造为下次定点执行时刻
next_time=datetime.datetime.strptime('{}-{}-{} 3:00:00'.format(tomorrow.year,tomorrow.month,tomorrow.day),'%Y-%m-%d %H:%M:%S')
#当前据下次执行时间
interval=(next_time-today).total_seconds()
print(interval)
threading.Timer(interval=interval,function=v,args=(22,),kwargs={'b':33333333,'c':44444444444}).start()

 

posted @ 2020-11-06 16:39  ascertain  阅读(376)  评论(0编辑  收藏  举报