在某些时候,我们需要精确的启动一个func,如果用time.sleep简单的轮询,会因为执行的任务阻塞,或者其他原因导致无法精确的定时执行。

例如在采集某些数据的时候,需要精确的每60秒采集一次,如果直接简单的轮询:{1:计时1,2:采集,3:计时2,4:sleep(60-计时2-计时1)},正常的时候看起来没什么问题。

但是如果在第二步“采集”的时候阻塞超过60秒,那就会导致后续的采集延迟了。

因此需要一个新的定时器,精确的定时触发操作,不管每一步操作有没有完成,到下一个时刻都要开始触发新的操作。

如下代码,每隔4s触发do_job这个函数,在这个函数中,如果触发次数是3的倍数,则sleep 5,其他则sleep 2。

import threading
import time
import logging logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s - %(levelname)s - %(message)s"
) def do_job(count):
logging.info("[%s] start job" % count)
if count % 3 == 0:
time.sleep(5)
else:
time.sleep(2)
logging.info("[%s] end job" % count) def thread_time_running(max_runs=10):
alive_timers = []
for i in range(0, max_runs):
t = threading.Timer(4, do_job, [i,])
logging.info("starting thread %d" % i)
t.start()
logging.info("warning thread %d" % i)
t.join(timeout=4)
if t.is_alive():
alive_timers.append(t) for i, t in enumerate(alive_timers):
if t.is_alive():
t.join() thread_time_running()

执行之后如下:

2021-03-17 20:49:50,736 - INFO - starting thread 0
2021-03-17 20:49:50,736 - INFO - warning thread 0
2021-03-17 20:49:54,742 - INFO - [0] start job
2021-03-17 20:49:54,742 - INFO - starting thread 1
2021-03-17 20:49:54,742 - INFO - warning thread 1
2021-03-17 20:49:58,748 - INFO - [1] start job
2021-03-17 20:49:58,748 - INFO - starting thread 2
2021-03-17 20:49:58,749 - INFO - warning thread 2
2021-03-17 20:49:59,746 - INFO - [0] end job
2021-03-17 20:50:00,753 - INFO - [1] end job
2021-03-17 20:50:02,754 - INFO - starting thread 3
2021-03-17 20:50:02,754 - INFO - [2] start job
2021-03-17 20:50:02,755 - INFO - warning thread 3
2021-03-17 20:50:04,755 - INFO - [2] end job
2021-03-17 20:50:06,759 - INFO - [3] start job
2021-03-17 20:50:06,759 - INFO - starting thread 4
2021-03-17 20:50:06,760 - INFO - warning thread 4
2021-03-17 20:50:10,765 - INFO - [4] start job
2021-03-17 20:50:10,765 - INFO - starting thread 5
2021-03-17 20:50:10,766 - INFO - warning thread 5
2021-03-17 20:50:11,761 - INFO - [3] end job
2021-03-17 20:50:12,770 - INFO - [4] end job
2021-03-17 20:50:14,771 - INFO - [5] start job
2021-03-17 20:50:14,771 - INFO - starting thread 6
2021-03-17 20:50:14,772 - INFO - warning thread 6
2021-03-17 20:50:16,775 - INFO - [5] end job
2021-03-17 20:50:18,774 - INFO - [6] start job
2021-03-17 20:50:18,774 - INFO - starting thread 7
2021-03-17 20:50:18,774 - INFO - warning thread 7
2021-03-17 20:50:22,777 - INFO - starting thread 8
2021-03-17 20:50:22,777 - INFO - [7] start job
2021-03-17 20:50:22,778 - INFO - warning thread 8
2021-03-17 20:50:23,776 - INFO - [6] end job
2021-03-17 20:50:24,783 - INFO - [7] end job
2021-03-17 20:50:26,783 - INFO - starting thread 9
2021-03-17 20:50:26,783 - INFO - [8] start job
2021-03-17 20:50:26,784 - INFO - warning thread 9
2021-03-17 20:50:28,786 - INFO - [8] end job
2021-03-17 20:50:30,787 - INFO - [9] start job
2021-03-17 20:50:35,790 - INFO - [9] end job

python简单的time ticker的更多相关文章

  1. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  2. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  3. 亲身试用python简单小爬虫

    前几天基友分享了一个贴吧网页,有很多漂亮的图片,想到前段时间学习的python简单爬虫,刚好可以实践一下. 以下是网上很容易搜到的一种方法: #coding=utf-8 import urllib i ...

  4. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  5. Selenium + PhantomJS + python 简单实现爬虫的功能

    Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDrive ...

  6. 【美妙的Python之中的一个】Python简单介绍及环境搭建

    美妙的Python之Python简单介绍及安装         简而言之: Python 是能你无限惊喜的语言,与众不同.             1.Python:                  ...

  7. python 简单图像识别--验证码

    python  简单图像识别--验证码 记录下,准备工作安装过程很是麻烦. 首先库:pytesseract,image,tesseract,PIL windows安装PIL,直接exe进行安装更方便( ...

  8. python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序

    python简单的监控脚本-利用socket.psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取 ...

  9. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  10. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

随机推荐

  1. 2024年最新iOS 17屏蔽系统更新方法,iPhone、iPad通用!

    到Safari浏览器打开,描述文件会自动安装进手机里. 这时候我们在设置里,找到设备管理,点击刚刚下载好的描述文件,进行安装.要注意看,有苹果的签名,才说明是官方出品,千万要注意哦!安装完成后,重启手 ...

  2. Hi3516EV200 编译环境配置及交叉编译软件包

    基础信息 OS: Ubuntu 16.04 xenial SDK 版本: Hi3516EV200R001C01SPC012 - Hi3516EV200_SDK_V1.0.1.1 SDK 包路径:Hi3 ...

  3. 安卓线性布局LinearLayout

    1.weight权重解读 用法归纳: 按比例划分水平方向:将涉及到的View的android:width属性设置为0dp,然后设置为android weight属性设置比例即可. ` <Line ...

  4. implicit和explicit求解器的一点比较

    implicit procedure和explicit procedure的比较 abaqus有两个求解器:standard和 explicit求解器.两个求解器在很多方面都有所差异:单元类型/材料行 ...

  5. [SDR] GNU Radio 系列教程 —— GNU Radio RX PDU (接收据包操作)的基础知识(超全)

    目录 1 接收概述 2 相关块介绍 2.1 相关性估计器(Correlation Estimator) 2.2 多相时钟同步(Polyphase Clock Sync) 2.3 线性均衡器(Linea ...

  6. 基础指令:grep、wc、管道符( | )、head、tail、less、more、sort、uniq、Linux软件安装、重定向及

    目录 3.0 dd读取.转换并输出数据 3.1 压缩 (tar.zip).解压缩(tar xf.unzip) 3.2 ln软硬链接 3.2.1 软链接: 3.2.2 硬链接: 3.3 find文件查找 ...

  7. How to grow old

    An individual human existence should be like a river-small at first,narrowly contained within its ba ...

  8. 区块链特辑——solidity语言基础(四)

    Solidity语法基础学习 七.事件: 事件 Event ·日志(log),是用来快速索引并查询过往资料的手段. ·而solidity是透过"事件"在区块链上写下日志,使用者或由 ...

  9. 关于TFDMemtable的使用场景【3】处理数据

    原因很多: 1.通过TFDMemtable处理数据时,避免影响数据感知 2.处理速度很快. ------------------------------ 从Tdataset读取数据: Procedur ...

  10. lombok用法

    加入 maven 依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lo ...