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...