- Python 教程
- Python 教程
- Python - 概述
- Python - 历史
- Python - 特性
- Python 与 C++
- Python - Hello World 程序
- Python - 应用领域
- Python 解释器及其模式
- Python - 环境设置
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 文字
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 按位运算符
- Python - 成员资格运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if-else 语句
- Python - 嵌套 if 语句
- Python - Match-Case 语句
- Python - 循环
- Python - For 循环
- Python for-else 循环
- Python - While 循环
- Python - break 语句
- Python - Continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数和模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅关键字参数
- Python - 位置参数
- Python - 仅位置参数
- Python - 任意或可变长度参数
- Python - 变量范围
- Python - 函数注释
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 切片字符串
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表项
- Python - 更改列表项
- Python - 添加列表项
- Python - 删除列表项
- Python - 循环列表
- Python - 列表推导式
- Python - 排序列表
- Python - 复制列表
- Python - 联接列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组(Tuple )
- Python - 访问元组项
- Python - 更新元组
- Python - 解压缩元组项
- Python - 循环元组
- Python - 联接元组
- Python - 元组方法
- Python - 元组练习
- Python 集
- Python - 集(sets)
- Python - 访问 Set Items
- Python - 添加 Set Items
- Python - 删除 Set Items
- Python - 循环 Set Items
- Python - 联接 Sets
- Python - 复制 Set
- Python - Set 运算符
- Python - Set 方法
- Python - Set 的练习
- Python 字典
- Python - 字典
- Python - 访问字典项
- Python - 更改字典项
- Python - 添加字典项
- Python - 删除字典项
- Python - 字典视图对象
- Python - 循环字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组项
- Python - 添加数组项
- Python - 删除数组项
- Python - 循环数组
- Python - 复制数组
- Python - 反向数组
- Python - 对数组进行排序
- Python - 连接数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python OS 文件/目录方法
- Python - os.path 方法
- 面向对象编程
- Python - OOP 概念
- Python - 类和对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态性
- Python - 方法覆盖
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 软件包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误和异常
- Python - 语法错误
- Python - 异常处理
- Python - try-except 块
- Python - try-finally 块
- Python - 引发异常
- Python - 异常链接
- Python - 嵌套 try 块
- Python - 用户定义的异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 联接线程
- Python - 命名线程
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护程序线程
- Python - 同步线程
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络
- Python - 网络编程
- Python - 套接字编程
- Python - URL 处理
- Python - 泛型
- Python 杂项
- Python - 日期和时间
- Python - math 模块
- Python - 迭代器
- Python - 生成器
- Python - 闭包(closures)
- Python - 装饰器( Decorators)
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送电子邮件
- Python - 更多扩展
- Python - 工具/实用程序
- Python - 图形用户界面
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用 Metaclasses 进行元编程
- Python - 模拟和存根
- Python - 猴子修补
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - 人性化软件包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
Python - 线程调度
Python 中的线程调度是决定在任何给定时间运行哪个线程的过程。在多线程程序中,多个线程独立执行,允许并行执行任务。但是,Python 没有直接控制线程优先级或调度策略的内置支持。相反,它依赖于操作系统的线程调度程序。
Python 线程映射到主机操作系统的本机线程,例如类 Unix 系统上的 POSIX 线程 (pthread) 或 Windows 线程。操作系统的计划程序管理这些线程的执行,包括上下文切换、线程优先级和计划策略。Python 通过线程提供基本的线程调度功能。Timer 类和 sched 模块。
在本教程中,将学习 Python 中线程调度的基础知识,包括如何使用 sched 模块来调度任务和线程。用于延迟执行函数的 timer 类。
使用 Timer 类调度线程
Python threading 模块的 Timer 类允许您安排在一定时间后调用函数。此类是 Thread 的子类,用作创建自定义线程的示例。
您可以通过调用计时器的 start() 方法来启动计时器,类似于线程。如果需要,您可以使用 cancel() 方法在计时器开始之前停止计时器。请注意,执行操作之前的实际延迟可能与指定的确切间隔不匹配。
例此示例演示如何使用线程。Timer() 类来安排和管理 Python 中任务(自定义线程)的执行。
import threading
import time
# Define the event function
def schedule_event(name, start):
now = time.time()
elapsed = int(now - start)
print('Elapsed:', elapsed, 'Name:', name)
# Start time
start = time.time()
print('START:', time.ctime(start))
# Schedule events using Timer
t1 = threading.Timer(3, schedule_event, args=('EVENT_1', start))
t2 = threading.Timer(2, schedule_event, args=('EVENT_2', start))
# Start the timers
t1.start()
t2.start()
t1.join()
t2.join()
# End time
end = time.time()
print('End:', time.ctime(end))
在执行上述程序时,它将产生以下输出 -
Elapsed: 2 Name: EVENT_2
Elapsed: 3 Name: EVENT_1
End: Tue Jul 2 14:46:36 2024
使用 sched 模块调度线程
Python 标准库中的 sched 模块提供了一种调度任务的方法。它实现了一个通用的事件调度程序,用于在特定时间运行任务。它提供了类似的工具,例如 Windows 或 Linux 中的任务调度程序。
sched 模块的关键类和方法
scheduler() 类定义在 sched 模块中,用于创建调度器对象。这是类的语法 -
scheduler(timefunc=time.monotonic, delayfunc=time.sleep)
scheduler 类中定义的方法包括 -
- scheduler.enter(delay, priority, action, argument=(), kwargs={}) − 事件可以安排在延迟后运行,或者在特定时间运行。要延迟调度它们,请使用 enter() 方法。
- scheduler.cancel(event) − 从队列中删除事件。如果事件不是队列中的当前事件,则此方法将引发 ValueError。
- scheduler.run(blocking=True) − 运行所有定时事件。
可以将事件安排在延迟后运行,也可以安排在特定时间运行。要以延迟计划它们,请使用 enter() 方法,该方法需要四个参数。
- 表示延迟的数字
- 优先级值
- 要调用的函数
- 函数的参数元组
此示例演示如何使用 sched 模块将事件安排为在延迟后运行。它安排了两个不同的事件 -
import sched
import time
scheduler = sched.scheduler(time.time, time.sleep)
def schedule_event(name, start):
now = time.time()
elapsed = int(now - start)
print('elapsed=',elapsed, 'name=', name)
start = time.time()
print('START:', time.ctime(start))
scheduler.enter(2, 1, schedule_event, ('EVENT_1', start))
scheduler.enter(5, 1, schedule_event, ('EVENT_2', start))
scheduler.run()
# End time
end = time.time()
print('End:', time.ctime(end))
它将产生以下输出 -
elapsed= 2 name= EVENT_1
elapsed= 5 name= EVENT_2
End: Tue Jul 2 15:11:53 2024
例
让我们再举一个例子来更好地理解这个概念。此示例使用 Python 中的 sched 模块安排一个函数在 4 秒延迟后执行加法。
import sched
from datetime import datetime
import time
def addition(a,b):
print("Performing Addition : ", datetime.now())
print("Time : ", time.monotonic())
print("Result {}+{} =".format(a, b), a+b)
s = sched.scheduler()
print("Start Time : ", datetime.now())
event1 = s.enter(4, 1, addition, argument = (5,6))
print("Event Created : ", event1)
s.run()
print("End Time : ", datetime.now())
它将产生以下输出 -
Event Created : Event(time=2927111.05638099, priority=1, sequence=0, action=<function addition at 0x7f31f902bd90>, argument=(5, 6), kwargs={})
Performing Addition : 2024-07-02 15:18:31.866381
Time : 2927111.060294749
Result 5+6 = 11
End Time : 2024-07-02 15:18:31.866545