文档章节

Python 的 threading.Timer 类如果重复执行很多遍,会不会产生一堆无法退出的线程?

mickelfeng
 mickelfeng
发布于 2016/09/09 17:37
字数 281
阅读 543
收藏 0

本人想写一个python脚本,后台多线程运行。

def single():
    
    print "start"

    threading.Timer(10, single).start()

    print "Thread Name:%s"%(threading.currentThread())

if __name__ == '__main__':
   th = threading.Timer(10, single)
   th.start()

没想到,线程跑到60多个的时候就自动死了

1. python里的Timer实际上就是一个线程类
2. 如果想实现每段时间执行一次某函数,网上给出的方法是:


import threading

def sayhello():
    print "hello world"
    global t #Notice: use global variable!
    t = threading.Timer(5.0, sayhello)
    t.start()

t = threading.Timer(5.0, sayhello)
t.start() 

可是,感觉这种方法有问题。。
因为每个线程对象在析构时,都会自动的join该线程。
这样,主线程退出时,必然会join其产生的线程。同理,任意一个线程退出时都会join它产生的线程。也就是说,这种情况下,所有的线程都在产生后不会退出了。。。这样,就会运行一段时间后产生一堆join态的线程。。

这太恐怖了吧?


t是global全局变量,所以避免了这个问题。

© 著作权归作者所有

mickelfeng

mickelfeng

粉丝 234
博文 2763
码字总数 596815
作品 0
成都
高级程序员
私信 提问
Python主进程hang住的两个原因

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/feilengcui008/article/details/52831354 最近使用Python遇到两个非常不好定位的问题,表现都是Python主进程h...

feilengcui008
2016/10/16
0
0
每周一个 Python 模块 | threading

专栏地址:每周一个 Python 模块 其实在 Python 中,多线程是不推荐使用的,除非明确不支持使用多进程的场景,否则的话,能用多进程就用多进程吧。写这篇文章的目的,可以对比多进程的文章来...

yongxinz
2018/12/06
0
0
python代码让android手机实现监控功能

百度搜索"qpython",点击qpython官网。 《QPython》是一个脚本引擎,他整合了Python解释器、Console、编辑器和SL4A库。可以让你在Android设备上运行Python语言开发的程序。它就是Android上的...

triangle_line
2018/04/11
921
0
Python:进程(threading)

这里是自己写下关于 Python 跟进程相关的 threading 模块的一点笔记,跟有些跟 Linux 调用挺像的,有共通之处。 Thread https://docs.python.org/3/library/threading.html?highlight=thread...

ypingcn
2018/01/31
0
0
Python线程编程的两种方式

Python中如果要使用线程的话,python的lib中提供了两种方式。一种是函数式,一种是用类来包装的线程对象。举两个简单的例子希望起到 抛砖引 玉的作用,关于多线程编程的其他知识例如互斥、信...

企图穿越
2010/03/08
795
0

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
2
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
5
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部