python定時執行任務

2021-09-29 16:16:58 字數 2446 閱讀 7715

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

定時執行任務

在windows上,使用configuration task scheduler 任務計畫程式 task scheduler library 任務計畫程式庫 create task.或者 control panel scheduled tasks add a scheduled task.在linu...

定時執行任務

spring中可以通過配置方便的實現週期性定時任務管理,這需要用到以下幾個類 org.springframework.schedu ling.quartz.methodinvokingjobdetailfactorybean 配置需要排程的bean的某個方法 org.springframework....

Python 定時執行執行緒 執行任務

最常用的是以下的方法。不過缺點是sleep函式堵塞了主線程,會造成無妨同時執行其他的程式。usr bin env python encoding utf 8 import time deftask print task deftimer n while true print time.strftim...