博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python多线程2:sched
阅读量:6255 次
发布时间:2019-06-22

本文共 2586 字,大约阅读时间需要 8 分钟。

sched模块提供了一个类的事件安排。

scheduler类定义

class sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep) 
scheduler类为事件调度定义了一套通用接口。

它须要传入两个函数:1)timefunc是一个没有參数的callable,而且返回一个一个数字(表示“时间”,随意单位)。假设time.monotonic不是可用的,则默觉得time.time。2)delayfunc是带有一个參数的callable,与timefunc的输出兼容。用于延迟一段时间。在多线程应用中,为了给其他线程运行的机会。在每一个事件运行后,delayfunc也将使用參数0调用。

从3.3版本号開始。scheduler是线程安全的。
以下是一个样例:

>>> import sched, time>>> s = sched.scheduler(time.time, time.sleep)>>> def print_time(a='default'):        print("From print_time", time.time(), a)   >>> def print_some_times():        print(time.time())        s.enter(10, 1, print_time)        s.enter(5, 2, print_time, argument=('positional',))        s.enter(5, 1, print_time, kwargs={'a': 'keyword'})        s.run()        print(time.time())   >>> print_some_times()930343690.257From print_time 930343695.274 positionalFrom print_time 930343695.275 keywordFrom print_time 930343700.273 default930343700.276

Scheduler对象

Scheduler实例有下面方法和属性:
scheduler.enterabs(time, priority, action, argument=(), kwargs={})
调度一个新事件。time參数应该是一个数字类型。与构造器传入的timefunc函数的返回值兼容。

指定到同一个时间的事件调度将按他们的优先级顺序依次运行。

运行时间即为运行action(*argument, **kwargs)。argument是一个序列,依照action的參数顺序排列。kwargs是一个map,使用key相应action的參数。
返回值是一个事件,能够被用于事件的取消(看cancel())。

scheduler.enter(delay, priority, action, argument=(), kwargs={})
在延迟delay时间后调度一个事件。除了使用相对时间,其他的參数和返回值和enterabs是同样的。

scheduler.cancel(event)
从队列中移除事件。假设事件不在当前队列中。该方法抛出ValueError。
scheduler.empty()
假设队列是空的。则返回True。
scheduler.run(blocking=True)
运行全部的事件。这种方法将等待(使用传递给构造器的delayfunc()函数)下一个事件的时间到达,然后运行它,直到全部的事件都被运行。
假设blocking为false,则不堵塞等待,马上调度溢出时间的那些时间(假设存在),然后返回在调度器中的下次调度的须要等待的时间,比如:
>>> import sched, time>>> s = sched.scheduler(time.time, time.sleep)>>> def print_time(a='default'):        print("From print_time", time.time(), a)>>> def print_some_times():        print(time.time())        s.enter(10, 1, print_time)        s.enter(5, 2, print_time, argument=('positional',))        s.enter(5, 1, print_time, kwargs={'a': 'keyword'})        print("Next : ",s.run(False))        print(time.time())
第一次调用:
>>> print_some_times()1435115632.601069Next :  5.01435115632.656073
Next表示下一个事件将在5秒后运行。第二次超过10秒后调用:
>>> print_some_times()1435115665.549954From print_time 1435115665.596957 keywordFrom print_time 1435115665.607957 positionalFrom print_time 1435115665.618958 defaultNext :  4.9669978618621831435115665.635959
这时事件已经所有达到运行时间点。所以所有马上运行。
action后者delayfunc能抛出一个异常,这时,调度器将保持一致并传递该异常。假设异常被action抛出,以后该事件将不会再被运行。
假设一个事件运行的结束时间超过了下一个事件的运行时间,调度会忽略下一个事件。没有事件将被丢弃。
scheduler.queue
要运行的事件列表,刚看完名单,活动将在排列顺序上运行。

每个事件被存储为元组。包括:time、priority、action、argument和kwargs。

转载地址:http://dejsa.baihongyu.com/

你可能感兴趣的文章
HDURevenge of Segment Tree(第二长的递增子序列)
查看>>
Json数组操作小记 及 JSON对象和字符串之间的相互转换
查看>>
常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服...
查看>>
安装 directx sdk 出现 S1023 解决
查看>>
Git-命令行-删除本地和远程分支
查看>>
SUPERSOCKET.CLIENTENGINE 简单使用
查看>>
第 7 章 异步输入输出
查看>>
ASP.NET应用使用Nginx做负载均衡遇到的一个问题
查看>>
Chapter 5 Blood Type——5
查看>>
在JSON中遇到的一些坑
查看>>
本文将介绍“数据计算”环节中常用的三种分布式计算组件——Hadoop、Storm以及Spark。...
查看>>
C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用...
查看>>
springmvc中controller内方法跳转forward?redirect?
查看>>
论坛程序推荐,区别
查看>>
spring mvc redirect 重定向 跳转并传递参数
查看>>
《止学》 [隋]文中子(王通)
查看>>
微信小程序之底部弹框预约插件
查看>>
基础知识 - Golang 中的正则表达式
查看>>
分享一个shell脚本的坑:grep匹配+wc取值 在脚本执行后的结果与手动执行结果不一致...
查看>>
【Clojure 基本知识】 关于函数参数的各种高级用法
查看>>