一、迴圈sleep:
最簡單的方式,在迴圈裡放入要執行的任務,然後sleep一段時間再執行。缺點是,不容易控制,而且sleep是個阻塞函式
def timer(n):
'''''
每n秒執行一次
'''
while True:
print(time.strftime('%Y-%m-%d %X',time.localtime()))
yourTask() # 此處為要執行的任務
time.sleep(n)
二、threading的Timer:
例如:5秒後執行
def printHello():
print("start" )
Timer(5, printHello).start()
例如:間隔5秒執行一次
def printHello():
print("start" )
timer = threading.Timer(5,printHello)
timer.start()
if __name__ == "__main__":
printHello()
例如:兩種方式組合用,5秒鐘後執行,並且之後間隔5秒執行一次
def printHello():
print("start")
timer = threading.Timer(5,printHello)
timer.start()
if __name__ == "__main__":
timer = threading.Timer(5,printHello)
timer.start()
三、sched模組:
sched是一種排程(延時處理機制)。
import time
import os
import sched
# 初始化sched模組的scheduler類
# 第一個引數是一個可以返回時間戳的函式,第二個引數可以在定時未到達之前阻塞。
schedule = sched.scheduler(time.time, time.sleep)
# 被週期性排程觸發的函式
def execute_command(cmd, inc):
print('執行主程式')
'''''
終端上顯示當前計算機的連線情況
'''
os.system(cmd)
schedule.enter(inc, 0, execute_command, (cmd, inc))
def main(cmd, inc=60):
# enter四個引數分別為:間隔事件、優先順序(用於同時間到達的兩個事件同時執行時定序)、被呼叫觸發的函式,
# 給該觸發函式的引數(tuple形式)
schedule.enter(0, 0, execute_command, (cmd, inc))
schedule.run()
# 每60秒檢視下網路連線情況
if __name__ == '__main__':
main("netstat -an", 60)
四、定時框架APScheduler:
APScheduler是基於Quartz的一個Python定時任務框架。提供了基於日期、固定時間間隔以及crontab型別的任務,並且可以持久化任務。
需要先安裝apscheduler庫,cmd視窗命令:pip install apscheduler
簡單的間隔時間排程程式碼:
from datetime import datetime
import time
import os
from apscheduler.schedulers.background import BackgroundScheduler
#學習中遇到問題沒人解答?小編建立了一個Python學習交流群:531509025
def tick():
print('Tick! The time is: %s' % datetime.now())
if __name__ == '__main__':
scheduler = BackgroundScheduler()
# 間隔3秒鐘執行一次
scheduler.add_job(tick, 'interval', seconds=3)
# 這裡的排程任務是獨立的一個執行緒
scheduler.start()
print('Press Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
try:
# 其他任務是獨立的執行緒執行
while True:
time.sleep(2)
print('sleep!')
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
print('Exit The Job!')
五、定時框架Celery:
非常強大的分散式任務排程框架;
需要先安裝Celery庫,cmd視窗命令: pip install Celery
六、定時框架RQ:
基於Redis的作業佇列工具,優先選擇APScheduler定時框架;
七、使用windows的定時任務:
可以將所需要的Python程式打包成exe檔案,然後在windows下設定定時執行。
八、Linux的定時任務(Crontab):
在Linux下可以很方便的藉助Crontab來設定和執行定時任務。進入Crontab檔案編輯頁面,設定時間間隔,使用一些shell命令來執行bash指令碼或者是Python指令碼,儲存後Linux會自動按照設定的時間來定時執行程式。