Python 线程调度

Python 线程调度

Python支持在程序中使用多个线程。多线程程序可以独立地执行多个子任务,从而实现任务的并行执行。

Python解释器将Python线程请求映射到POSIX/pthreads或Windows线程。因此,与普通线程类似,Python线程由主机操作系统处理。

然而,Python解释器不支持线程调度。因此,无法使用Python解释器实现线程优先级、调度方案和线程抢占。Python线程的调度和上下文切换取决于主机调度器的处理。

Python确实在标准库中以sched模块的形式提供了一些任务调度的支持。它可以用于创建机器人和其他监控和自动化应用程序。 sched 模块实现了一个通用的事件调度器,用于在指定的时间运行任务。它提供了类似于Windows或Linux中的任务调度器的工具。

调度器类在内置模块 sched 中定义。

scheduler(timefunc=time.monotonic, delayfunc=time.sleep)

调度器类中定义的方法包括:

  • scheduler.enter() - 可以安排事件在延迟后运行,或者在特定时间运行。使用enter()方法来安排延迟执行的事件。

  • scheduler.cancel() - 从队列中移除事件。如果事件不在队列中,该方法会引发ValueError错误。

  • scheduler.run(blocking=True) - 运行所有已安排的事件。

可以安排事件在延迟后运行,或者在特定时间运行。要安排延迟执行的事件,请使用enter()方法,该方法接受四个参数。

  • 表示延迟的数字

  • 优先级值

  • 要调用的函数

  • 函数的参数元组

示例1

此示例安排了两个不同的事件 –

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()

它将生成以下 输出

START: Mon Jun 5 15:37:29 2023
elapsed= 2 name= EVENT_1
elapsed= 5 name= EVENT_2

示例2

让我们来看一个例子来更好地理解这个概念-

import sched
from datetime import datetime
import time

def addition(a,b):
   print("Performing Addition : ", datetime.now())
   print("Time : ", time.monotonic())
   print("Result : ", a+b)

s = sched.scheduler()

print("Start Time : ", datetime.now())

event1 = s.enter(10, 1, addition, argument = (5,6))
print("Event Created : ", event1)
s.run()
print("End Time : ", datetime.now())

将会产生以下的 输出

Start Time : 2023-06-05 15:49:49.508400
Event Created : Event(time=774087.453, priority=1, sequence=0, action=<function addition at 0x000001FFE71A1080>, argument=(5, 6), kwargs={})
Performing Addition : 2023-06-05 15:49:59.512213
Time : 774087.484
Result : 11
End Time : 2023-06-05 15:49:59.559659

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程