项目中需要使用定时器,每次都使用构造器函数调用:

timer = threading.Timer(timerFlag, upload_position)

timer.start()

打印线程后发现,每次都会创建一个新的子线程,虽然活跃的线程只有一个,但是也是种资源浪费:

print("threading active = {} \n \n".format(threading.enumerate()))

#打印

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

阅读源码和文档

class Timer(Thread):

"""Call a function after a specified number of seconds:

t = Timer(30.0, f, args=None, kwargs=None)

t.start()

t.cancel() # stop the timer's action if it's still waiting

"""

def __init__(self, interval, function, args=None, kwargs=None):

Thread.__init__(self)

self.interval = interval

self.function = function

self.args = args if args is not None else []

self.kwargs = kwargs if kwargs is not None else {}

self.finished = Event()

def cancel(self):

"""Stop the timer if it hasn't finished yet."""

self.finished.set()

def run(self):

self.finished.wait(self.interval)

if not self.finished.is_set():

self.function(*self.args, **self.kwargs)

self.finished.set()

# Special thread class to represent the main thread

# This is garbage collected through an exit handler

发现,其实Timer是threading的子类,用wait实现了定时效果,绑定了入参function,于是修改代码如下

def startTimer():

global timer

if timer != None:

timer.finished.wait(timerFlag)

timer.function()

else:

timer = threading.Timer(timerFlag, upload_position)

timer.start()

打印结果:

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

threading active = [<_mainthread stopped>, ]

始终只有一个线程且重复调用函数方法~End~

Python:学会创建并调用函数

这是关于Python的第4篇文章,主要介绍下如何创建并调用函数. print():是打印放入对象的函数 len():是返回对象长度的函数 input():是让用户输入对象的函数 ... 简单来说,函数 ...

Python 学习 第七篇:函数1(定义、调用和变量的作用域)

函数是把一些语句集合在一起的程序结构,用于把复杂的流程细分成不同的组件,能够减少代码的冗余.代码的复用和修改代码的代价. 函数可以0个.1个或多个参数,向函数传递参数,可以控制函数的流程.函数还可以返 ...

Python之调用函数

Python之调用函数 Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数. 可以直接从Python的官方网站查 ...

python 调用函数

Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: http://doc ...

python入门(13)获取函数帮助和调用函数

Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: http://doc ...

python调用函数超时设置

1.Windows中sign报错,Linux能很好的使用: https://pypi.python.org/pypi/timeout-decorator 2.Windows可以使用,Linux报错不能 ...

『Python』为什么调用函数会令引用计数&plus;2

一.问题描述 Python中的垃圾回收是以引用计数为主,分代收集为辅,引用计数的缺陷是循环引用的问题.在Python中,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存. sys.g ...

python函数(一)调用函数

在python中内置了很多函数或者类,比如:int,str,list,tuple,等.当然也可以自建函数,这个放在后文讨论.原理如下: 其实python中的类和方法非常非常多,这里只是以点带面,提供一 ...

Python&&num;160&semi;获取被调用函数名称,所处模块,被调用代码行

获取被调用函数名称,所处模块,被调用代码行 by:授客 QQ:1033553122 module2.py: #!/usr/bin/env python # -*- coding:utf-8 -*- _ ...

随机推荐

多线程中使用CheckForIllegalCrossThreadCalls &equals; false访问窗口-转

在多线程程序中,新创建的线程不能访问UI线程创建的窗口控件,如果需要访问窗口中的控件,可以在窗口构造函数中将CheckForIllegalCrossThreadCalls设置为 false publi ...

在Windows上安装虚拟机详细图文教程

用虚拟机来安装最新的软件,安装最新的系统等等比较保险,可以避免安装不顺利影响自己原来的系统和应用,想尝鲜又担心自己完全更换系统不适应的朋友可以尝试. 虚拟机下载:https://yunpan.cn/c ...

&lbrack;转载&rsqb; 自定义百度网盘分享密码 &lpar;Javascript&rpar;

压缩版 javascript:require(["function-widget-1:share/util/service/createLinkShare.js"]).protot ...

Spring 配置自动扫描spring bean配置

python重复执行函数_Python threading 单线程 timer重复调用函数相关推荐

  1. Python 批量创建线程及threading.Thread类的常用函数及方法

    在<[Python]线程的创建.执行.互斥.同步.销毁>(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条.其实,Python里是可 ...

  2. python中什么叫函数_Python 基础起步 (十) 什么叫函数?

    Python 函数 大家好,这一期让我们来看看Python中比较核心的知识点:函数(也叫方法),那么到底什么是一个函数呢?先让我引入一个官方一点的定义: 函数是对程序逻辑进行结构化或者过程化的一种编程 ...

  3. python动态执行语句_Python Language

    句法 eval(表达式[,globals = None [,locals = None]]) EXEC(对象) exec(对象,全局) exec(对象,全局,本地) 参数 争论细节expression ...

  4. python主函数调用格式_Python入门基础中怎么定义函数,函数调用,函数传递参数...

    什么是函数和为什么要用函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.已经知道Python提供了许多内建函数,比如print(). ...

  5. python 定义list长度_python中list列表的高级函数 python如何统计列表的长度

    在python的函数中,如何将列表list的一部分作为函比如定义个函数,想实现的功能就是将列表a的后半部分(['c','d'])传入后面paraTestList(a[2:])中,括号里面的a[2:]命 ...

  6. python去重复的数据_python - 常用数据清洗方法-重复项处理

    在数据的处理过程中,一般都需要进行数据清洗工作,如数据集是否存在重复,是否存在缺失,数据是否具有完整性和一致性,数据中是否存在异常值等.发现诸如此类的问题都需要针对性地处理,下面我们一起学习常用的数据 ...

  7. python内置的数学函数_Python数字和内置数学函数

    python内置的数学函数 In this section, we will be learning about Numbers and various Math functions availabl ...

  8. python中fetchall函数_python中查询数据库时fetchone()函数和fetchall()函数的区别

    我们在用python操作数据库的时候,经常会碰见两个函数:fetchone()和fetchall() 刚开始学习的时候可能会搞不清楚他们两个的区别 其实非常简单 首先fetchone()函数它的返回值 ...

  9. python语言接收信息的内置函数_python接收信息的内置函数是

    有的python内置函数怎么就一个pass这个模块是用C实现的,没有Python源码. 所以python代码中只有一个pass,因为代码中都是C实现的. 两种情况: 一种情况是继承的时候会用到的,父类 ...

最新文章

  1. 056_Avatar头像
  2. SpringBoot+MyBatisPlus+ElementUI一步一步搭建前后端分离的项目(附代码下载)
  3. 折叠屏来了,开发者们准备好了吗?
  4. 北京.net俱乐部博客园小组成立了
  5. centos mysql pmm_【MySQL】MySQL监控利器PMM
  6. 孪生三兄弟 CycleGAN, DiscoGAN, DualGAN
  7. redis源码剖析(十六)——服务端思维导图整理
  8. java applet socket_Java swing applet中使用的套接字
  9. layout布局_安卓最常见的几种布局
  10. 支持向量机中到底什么是支持向量
  11. 任正非就注册姚安娜商标道歉;人人影视字幕组因盗版被查;JIRA、Confluence 等产品本月停售本地化版本 | 极客头条...
  12. Prototype使用Form操作表单
  13. LINQ体验(14)——LINQ to SQL语句之存储过程 夺表
  14. mapxtreme2008 7.0错误
  15. 电力系统如何实现时间同步
  16. 【安全测试工程师】超实用的Web渗透测试学习路线~
  17. 微信小程序 - 引入第三方字体(使用网络字体艺术字)
  18. 华为关闭系统更新EMUI9.0禁止更新mate10降级EMUI9
  19. nginx系列(十七)nginx下的gzip与vary、预压缩、缓存、反向代理的结合
  20. 【读论文-笔记】——1.沐神读Alexnet

热门文章

  1. 提升Visual Studio 2012的响应能力
  2. 对xxl-job进行simpleTrigger并动态创建任务扩展
  3. pythonchallenge_level9
  4. hive数据仓库摘录和总结
  5. 如何解决KEIL 5 编KEIL4同RTX系统的project解
  6. JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .
  7. Servlet Listener
  8. 条件独立(conditional independence) 结合贝叶斯网络(Bayesian network) 概率有向图 (PRML8.2总结)...
  9. 离开域后打开Office慢 Openfiler
  10. 深入浅出自定义标签(一)入门