Python----schedule模块关于定时任务的高级用法二

简介: Python----schedule模块关于定时任务的高级用法二

1 设置时间间隔随机数

在有一些场景下,为了模拟比较自然的情景,需要采用随机的时间间隔,这就派上用场了

如下代码,设置随机间隔从2秒到10秒之间取随机数

import schedule
import time


def do_func(name,age):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))

def main():
    # 定义定时任务时直接打标签
    schedule.every(2).to(10).seconds.do(do_func,"张三丰",100).tag("demo1","demo2")

    while True:
        schedule.run_pending()


if __name__=="__main__":
    main()

执行结果如下,可以看出,确实在随机时间间隔

2022-05-25 01:02:45 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:02:50 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:02:53 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:02:59 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:03:01 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:03:05 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:03:08 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:03:13 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:03:17 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:03:22 in do func : 姓名:张三丰 年龄:100

2 设置定时任务执行到指定时间

如下均为指定到固定时间,这里因为是固定时间,就不再演示执行的结果了

import schedule
from datetime import datetime, timedelta, time

def job():
    print('in job...')

# 每小时执行一次,直到今天的 18:30为止
schedule.every(1).hours.until("18:30").do(job)

# 每小时执行一次,直到 2030-01-01 18:33为止
schedule.every(1).hours.until("2030-01-01 18:33").do(job)

# 在未来8小时内,每小时执行一次
schedule.every(1).hours.until(timedelta(hours=8)).do(job)

# 每小时执行一次,直到今天的 11:33:42
schedule.every(1).hours.until(time(11, 33, 42)).do(job)

# 每小时执行一次,直到 2030-01-01 18:33:20 为止
schedule.every(1).hours.until(datetime(2030, 1, 1, 18, 33, 20)).do(job)

3 计算当前到下一次执行的时间差单位为秒

如下,设置每两个小时执行一次,如下可以计算出到下一次执行的时间为7200秒

import schedule
import time


def do_func(name,age):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))

def main():
    # 定义定时任务时直接打标签
    schedule.every(2).hours.do(do_func,"张三丰",100)

    t=schedule.idle_seconds()
    print(t)


if __name__=="__main__":
    main()

结果如下:

7200.0

立刻执行所有的任务,不管他们是如何定时的

(1)首先看一下,不使用立刻执行所有的任务时:

代码如下:

import schedule
import time


def do_func(name,age):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))

def main():
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    schedule.every(3).seconds.do(do_func,"张三丰",100)

    while True:
        schedule.run_pending()



if __name__=="__main__":
    main()

执行结果如下,即启动任务后,过一个时间间隔才执行

2022-05-25 01:43:04
2022-05-25 01:43:07 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:43:10 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:43:13 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:43:16 in do func : 姓名:张三丰 年龄:100

(2)设置立刻执行
代码如下,设置立刻执行

import schedule
import time


def do_func(name,age):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))

def main():
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    schedule.every(3).seconds.do(do_func,"张三丰",100)
    schedule.run_all()

    while True:
        schedule.run_pending()


if __name__=="__main__":
    main()

可以看出,此时任务立刻执行,不会等3秒再执行,立刻执行之后再开始按照定时任务设置的规则去执行

2022-05-25 01:46:17
2022-05-25 01:46:17 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:46:20 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:46:23 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:46:26 in do func : 姓名:张三丰 年龄:100

(3)立刻执行可以设置延时,这里的延时是指延长这些时间之后,定时任务才生效
代码如下

import schedule
import time


def do_func(name,age):
    print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+" in do func : 姓名:"+name+" 年龄:"+str(age))

def main():
    print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
    schedule.every(3).seconds.do(do_func,"张三丰",100)
    schedule.run_all(delay_seconds=10)

    while True:
        schedule.run_pending()


if __name__=="__main__":
    main()

执行结果如下,可以看出,按照这种方式设置,也是立刻执行,只不过立刻执行之后,要过10秒之后定时任务才失效,这里需要特别注意,这里的延时不是说延长这么多时间才执行

2022-05-25 01:48:20
2022-05-25 01:48:20 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:48:30 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:48:33 in do func : 姓名:张三丰 年龄:100
2022-05-25 01:48:36 in do func : 姓名:张三丰 年龄:100
目录
相关文章
|
7月前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
218 62
|
1月前
|
人工智能 数据库连接 API
掌握Python的高级用法:技巧、技术和实用性示例
本文分享了Python的高级用法,包括生成器、装饰器、上下文管理器、元类和并发编程等。生成器通过`yield`实现懒加载序列;装饰器用于增强函数功能,如添加日志或性能分析;上下文管理器借助`with`语句管理资源;元类动态定制类行为;并发编程利用`threading`和`asyncio`库提升任务执行效率。掌握这些高级概念可优化代码质量,解决复杂问题,提高程序性能与可维护性。
|
2月前
|
Python
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
90 14
|
3月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
|
3月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
56 8
|
3月前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
60 5
|
6月前
|
Python
Python Internet 模块
Python Internet 模块。
170 74
|
3月前
|
SQL Oracle 关系型数据库
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
|
4月前
|
Python API 监控
将Python CLI工具发布为pip模块的完整指南
注册PyPI账户 访问PyPI官网注册账户 推荐使用双因素认证增强安全性 生成API令牌 访问PyPI账户管理 生成具有"Upload packages"权限的令牌,妥善保存 确保模块名唯一性 在PyPI搜索页面验证模块名未被使用 建议使用小写字母和连字符的组合(如my-cli-tool)
85 9
|
7月前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
194 63

推荐镜像

更多