首頁 >後端開發 >Python教學 >Python實作定時任務

Python實作定時任務

高洛峰
高洛峰原創
2017-02-10 09:22:551945瀏覽

本篇文章主要介紹了Python實現定時任務,主要有5種方法,具有一定的參考價值,有興趣的小夥伴們可以參考一下。

Python下實現定時任務的方式有很多種方式。以下介紹幾個

循環sleep:

這是一種最簡單的方式,在循環裡放入要執行的任務,然後sleep一段時間再執行。缺點是,不容易控制,而且sleep是個阻塞函數。

def timer(n): 
  ''''' 
  每n秒执行一次 
  ''' 
  while True:  
    print time.strftime('%Y-%m-%d %X',time.localtime())  
    yourTask() # 此处为要执行的任务  
    time.sleep(n)

threading的Timer:

threading模組中的Timer能夠幫助實現定時任務,而且是非阻塞的。

例如3秒後印helloworld:

def printHello(): 
  print "hello world" 
 
Timer(3, printHello).start()

例如每3秒列印一次helloworld:

def printHello(): 
  print "Hello World" 
  t = Timer(2, printHello) 
  t.start() 
 
 
if __name__ == "__main__": 
  printHello()

一種調度(延時處理機制)。

# -*- coding:utf-8 -*- 
# use sched to timing 
import time 
import os 
import sched 
 
 
# 初始化sched模块的scheduler类 
# 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。 
schedule = sched.scheduler(time.time, time.sleep) 
 
 
# 被周期性调度触发的函数 
def execute_command(cmd, inc): 
  ''''' 
  终端上显示当前计算机的连接情况 
  ''' 
  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的一個定時任務框架。提供了基於日期、固定時間間隔以及crontab類型的任務,並且可以持久化任務。

這個現在還沒自己嘗試過,等過段時間用了再來補充。
使用windows的定時任務:


這裡可以將所需的Python程式打包成exe文件,然後在windows下設定定時執行。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。
更多Python實現定時任務相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn