threading中定時器Timer
定時器功能:在設置的多少時間后執行任務,不影響當前任務的執行
常用方法
from threading import Timer
t = Timer(interval, function, args=None, kwargs=None)
# interval 設置的時間(s)
# function 要執行的任務
# args,kwargs 傳入的參數
t.start() # 開啟定時器
t.cancel() # 取消定時器
簡單示例
import time
from threading import Timer
def task(name):
print('%s starts time: %s'%(name, time.ctime()))
t = Timer(3,task,args=('nick',))
t.start()
print('end time:',time.ctime()) # 開啟定時器后不影響主線程執行,所以先打印
-------------------------------------------------------------------------------
end time: Wed Aug 7 21:14:51 2019
nick starts time: Wed Aug 7 21:14:54 2019
驗證碼示例:60s后驗證碼失效
import random
from threading import Timer
# 定義Code類
class Code:
# 初始化時調用緩存
def __init__(self):
self.make_cache()
def make_cache(self, interval=60):
# 先生成一個驗證碼
self.cache = self.make_code()
print(self.cache)
# 開啟定時器,60s后重新生成驗證碼
self.t = Timer(interval, self.make_cache)
self.t.start()
# 隨機生成4位數驗證碼
def make_code(self, n=4):
res = ''
for i in range(n):
s1 = str(random.randint(0, 9))
s2 = chr(random.randint(65, 90))
res += random.choice([s1, s2])
return res
# 驗證驗證碼
def check(self):
while True:
code = input('請輸入驗證碼(不區分大小寫):').strip()
if code.upper() == self.cache:
print('驗證碼輸入正確')
# 正確輸入驗證碼后,取消定時器任務
self.t.cancel()
break
obj = Code()
obj.check()