python的schedule定时模块

import schedule
import time
from mysql_example import mysqlexample
import random
import datetime
import logging
import threading
logging.basicConfig(level=logging.NOTSET)

#插入数据库
def insertdate():
    number = round(random.uniform(0, 1000), 5)
    dtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    insertsql = """ INSERT INTO atest_doubledate (DTIME,DATE_ONE) VALUES (%s,%s)"""    
    x = mysqlexample()
    y = x.insert_date(dtime, number)
# 异步调用insertdate
def run_threaded(func):

    s2 = threading.Thread(target=func)
    s2.start()

#异步调用run_threaded
def run_thread():

    schedule.every(10).seconds.do(run_threaded, insertdate)
    while True:
        schedule.run_pending()
        time.sleep(1)

#异步调用计时
s1 = threading.Thread(target=run_thread)
s1.start()




但是悲剧的发现了一些问题 两次调用之间会有延时,这个延时还是会浮动的缓慢增加。10s种执行一次计算的话,大概不到一个小时就会秒数+1,这个就很悲剧了。十分钟差了0.28秒,这要是定时记录数据就太悲剧了。
但是间隔时间比较长用这个还是很方便的,比如,每天执行一次,没小时执行一次这样的数据频率用这个数据库还是没有问题的。

···················································································································································

发现 自己的基础还是不牢固,把time的时间设置和定时间隔一样,效果会好很多,这次测试十分钟,时间间隔增长了0.1,

···················································································································································

def insertdate():
    dtime = datetime.datetime.now()
    print(dtime)
    number = round(random.uniform(0, 1000), 5)
    insertsql = """ INSERT INTO atest_doubledate (DTIME,DATE_ONE) VALUES (%s,%s)"""
    # delsql = "DELETE FROM atest_doubledate WHERE ID = %s"
    # updatesql = "UPDATE atest_doubledate set DTIME = %s WHERE ID = %s"
    # res = mysql_alter_sql(insertsql, [(dtime, number), (dtime, number), (dtime, number)], manydate=True)
    # RES = mysql_alter_sql(delsql, 22)
    # des = mysql_alter_sql(updatesql, [dtime, 23])
    x = mysqlexample()
    y = x.insert_date(dtime.strftime("%Y-%m-%d %H:%M:%S"), number)


#INFO:schedule:Running job Every 10 seconds do tread_insertdate(<function insertdate at 0x03B84C48>) (last run: 2018-12-06 16:28:50, next run: 2018-12-06 16:29:00)
#2018-12-06 16:29:00.219063
#INFO:schedule:Running job Every 10 seconds do tread_insertdate(<function insertdate at 0x03B84C48>) (last run: 2018-12-06 16:29:00, next run: 2018-12-06 16:29:10)
#2018-12-06 16:29:10.220479
#INFO:schedule:Running job Every 10 seconds do tread_insertdate(<function insertdate at 0x03B84C48>) (last run: 2018-12-06 16:29:10, next run: 2018-12-06 16:29:20)
#2018-12-06 16:29:20.221768

坑 了 dtime 应该放在上面 放在下面等于是等待mysql执行完毕之后的时间 不准确。更改之后时间比较稳定了,每次延时0.0015s左右。

INFO:schedule:Running job Every 10 seconds do tread_insertdate(<function insertdate at 0x02F94C48>) (last run: 2018-12-06 16:32:27, next run: 2018-12-06 16:32:37)
2018-12-06 16:32:37.927138
INFO:schedule:Running job Every 10 seconds do tread_insertdate(<function insertdate at 0x02F94C48>) (last run: 2018-12-06 16:32:37, next run: 2018-12-06 16:32:47)
2018-12-06 16:32:47.927408
INFO:schedule:Running job Every 10 seconds do tread_insertdate(<function insertdate at 0x02F94C48>) (last run: 2018-12-06 16:32:47, next run: 2018-12-06 16:32:57)
2018-12-06 16:32:57.927678

把time.sleep()注销掉之后,从数据中截取的三个数值,大体上是间隔0.003s左右,但是cpu的性能飞起啊,从20%涨到了40-50之间飘动。

把 time.sleep()取消注销,改为time.sleep(0.001),时间间隔涨幅,从0.0004-0.0013之间跳动,这个跳动范围有点大,但是cpu涨幅不大,很稳定

改为time.sleep(0.0001),感觉还没有改为time.sleep(0.001)好,不知道为什么,,,

还是建议吧延时和定时触发的时间改为一致吧······,毕竟没差多少。。。。。。

猜你喜欢

转载自blog.csdn.net/linxue110/article/details/84861003