python实现定时自动启动代码  线程方法(每日更新、爬虫等)

本文使用threading.Timer(seconds, fun)的方法实现周期启动

通过datetime.datetime.now()等方法获取当前时间同时做校正判断

定时自启动函数的效果

如果想即食  直接修改marktime

然后在func加入你的代码或者调用你的函数

注释版

import datetime

import threading

marktime=" 18:02:20"

# 修改:上面的marktime改成你需要的自启动时间即可

# (空格别删了)请按照以上格式修改时间哦 乱修改会报错

# 运行函数

def func():

# 在这里加你的函数即可

print("haha")

#如果需要循环调用,就要添加以下方法

timer = threading.Timer(86400, func)

# 86400是3600*24 懂我意思吧

timer.start()

# preFun预处理函数 对第一次启动进行今日或次日时间判断 然后方便进行正确的自启动

def preFun():

# 获取现在时间

now_time = datetime.datetime.now()

marktimes = datetime.datetime.strptime(str(now_time.date()) + marktime, "%Y-%m-%d %H:%M:%S")

# marktimes是datetime化的时间数据类型

# 2020-03-13 17:35:26.772379 marktimes是如左类似结构

# 今日时间是否预期

if (now_time <= marktimes):

next_time = marktimes

print("今日" + marktime + '执行代码')

else:

# 明日启动

next_time = now_time + datetime.timedelta(days=+1)

print("明日" + marktime + '执行代码')

# 这下面可以优化 懒得弄了……哈啊哈哈

next_year = next_time.date().year

next_month = next_time.date().month

next_day = next_time.date().day

next_time = datetime.datetime.strptime(str(next_year) +

"-" + str(next_month) +

"-" + str(next_day) + marktime,

"%Y-%m-%d %H:%M:%S")

# next_time将得到的下次时间更新成秒数表示的时间

# 科普一下 就是那种time.time()函数得到的秒 这样的时间方便计算 不然要疯狂的进制转化……

# 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

# 获取距离下次marktime时间,单位为秒

timer_start_time = (next_time - now_time).total_seconds()

return timer_start_time

def main():

timer_start_time=preFun()

# 把与处理得时间放进去 然后线程在start()后

# 会在规定秒数后启动你的func里的代码

timer = threading.Timer(timer_start_time, func)

# 运行线程

timer.start()

print('冷启动后启动func的时间',timer_start_time)

pass

if __name__ == '__main__':

main()

简洁版

import datetime

import threading

marktime=" 18:02:20"

# 运行函数

def func():

# 在这里加你的函数即可

print("haha")

timer = threading.Timer(86400, func)

timer.start()

# preFun预处理函数

def preFun():

now_time = datetime.datetime.now()

marktimes = datetime.datetime.strptime(str(now_time.date()) + marktime, "%Y-%m-%d %H:%M:%S")

if (now_time <= marktimes):

next_time = marktimes

print("今日" + marktime + '执行代码')

else:

# 明日启动

next_time = now_time + datetime.timedelta(days=+1)

print("明日" + marktime + '执行代码')

next_year = next_time.date().year

next_month = next_time.date().month

next_day = next_time.date().day

next_time = datetime.datetime.strptime(str(next_year) +

"-" + str(next_month) +

"-" + str(next_day) + marktime,

"%Y-%m-%d %H:%M:%S")

timer_start_time = (next_time - now_time).total_seconds()

return timer_start_time

def main():

timer_start_time=preFun()

timer = threading.Timer(timer_start_time, func)

timer.start()

print('冷启动后启动func的时间',timer_start_time)

pass

if __name__ == '__main__':

main()

总结

代码可以用但是性能没有测试……还有线程的中断是关闭进程,过于原始的方法显得非常不优雅。如果你感兴趣可以自己修改一下。

标签:marktime,python,爬虫,datetime,threading,线程,func,time,now

来源: https://blog.csdn.net/QAQterrible/article/details/104846672

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐