Python多线程的创建,相关函数和守护线程的理解
一:多线程的创建
threading库创建线程有两种方式,函数式和继承式
1)函数式
def func():
print 'Starting'
print 'Ending'
t=threading.Thread(name='func',target=func)
t.start()
2)继承式
class ThreadClass(threading.Thread):
def __init__(self, group = None, target = None, name = None, args = (), kwargs = {}):
threading.Thread.__init__(self, group, target, name, args, kwargs)
def run(self):
print 'Starting'
print 'Ending'
t = ThreadClass()
t.start()
Thread类的构造函数定义如下:
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={})
group:留作ThreadGroup扩展使用,一般赋值NULL
target:就是新建线程要执行的任务函数名
name:线程的名字,也可使用getName(),setName()获取或者修改
args:tuple参数
kwargs:dictionary参数
二:相关函数
1)start():启动线程;
2)join():主线程阻塞住,等待调用该函数的线程结束。join的参数是一个数字,如果非零就表示在此时间后,如果调用join的线程没有结束join函数也返回;
3)is_alive(), isAlive(),判断线程是否结束;
4)setDaemon(),设置函数为守护线程
class ThreadClass(threading.Thread):
def __init__(self, group = None, target = None, name = None, args = (), kwargs = {}):
threading.Thread.__init__(self, group, target, name, args, kwargs)
def run(self):
while True:
dosometing()......
t = ThreadClass()
t.setDaemon(True)
t.start()
while True:
if not t.is_alive():
print "t is dead"
exit(1)
time.sleep(60)
t.join()
三:守护线程
守护线程的概念有点不同于Linux环境下的概念,可能是我没理解,但是这个概念和Java里的守护线程一样:
守护线程在主线程退出后也会随着退出,非守护线程则不会。什么意思呢?
对于普通线程,如果线程的任务没有结束,主线程不会退出,整个程序也不会退出;
对于守护线程,即使线程任务还没有结束,如果主线程退出该线程也会退出;
(不知道这样的理解对不对,实验一下)
#--encoding='utf-8'--
import logging
import threading
import time
logging.basicConfig(
level=logging.DEBUG,
format='(%(threadName)-10s) %(message)s',
)
def ThreadFunc():
logging.debug(' Starting')
file_object = open('thefile.txt', 'w+')
while True:
file_object.write('wahaha\r\n')
file_object.flush()
time.sleep(1)
logging.debug(' Existing')
file_object.close( )
t=threading.Thread(name='ThreadFunc',target=ThreadFunc)
#t.setDaemon(True)
t.start()
time.sleep(5)
1)首先注释掉d.setDaemon(True),也就是d是一个普通线程
执行之后,主线程本该在5秒后退出,但是却发现该线程还是不断的输入wahaha,该脚本一直运行直到kill掉改脚本的执行。此时Ctrl+c也无效,只有kill。
2)删除d.setDaemon(True)前面的#,也就是d是一个守护线程
执行之后,主线程在5秒后退出,线程d只输出少于五个wahah之后也随着主线程的退出而退出,整个脚本退出。在退出前Ctrl+c有效。
Python多线程的创建,相关函数和守护线程的理解的更多相关文章
- java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)
今天开始就来总结一下Java多线程的基础知识点,下面是本篇的主要内容(大部分知识点参考java核心技术卷1): 1.什么是线程以及多线程与进程的区别 2.多线程的创建与启动 3.中断线程和守护线程以及 ...
- Java 多线程(四)之守护线程(Daemon)
目录 定义 如何创建 判断 注意事项 函数setDaemon(true)必须在 start() 函数之前使用. 守护线程中产生的线程也是守护线程: 测试 @ 定义 Java 中有两种线程: 一种是用户 ...
- java守护线程的理解
package daemonThread; /*setDaemon(true)方法将线程设置为守护线程,线程的Daemon默认值为false * 只要当前JVM实例中存在任何一个非守护线程没有结束,守 ...
- JAVA 对守护线程的理解
1.在start之前,setDaemon. 该现场就成为守护线程了. 2.守护现线程并不是主线程结束,子线程(守护线程)也跟着结束.而是守护线程在没有用户线程运行的情况伴随着JVM退出而结束. 示例代 ...
- python多线程——如何停止一个死循环的线程
进程想要执行任务就需要依赖线程.换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程. 那什么是多线程?提到多线程这里要说两个概念,就是串行和并行,搞清楚这个,我们才能更好地理解多 ...
- python守护线程
如果你设置一个线程为守护线程,就表示你在说这个线程是不重要的,在进程退出的时候,不用等待这个线程退出.如果你的主线程在退出的时候,不用等待那些子线程完成,那就设置这些线程的daemon属性.即在线程开 ...
- 说说Python多线程中的daemon属性方法
大家看多线程部分的时候肯定看到过daemon这个属性,当我在百度了一圈后也没发现有比较好的解释(或者大家对这个解释都非常清楚),于是自己通过代码和官方介绍了解它,进行了一些总结 给大家一些参考. 首先 ...
- web端自动化——python多线程
Python通过两个标准库thread和threading提供对线程的支持.thread提供了低级别的.原始的线程以及一个简单的锁.threading基于Java的线程模型设计. 锁(Lock)条件变 ...
- Python 多线程(一)
Python多线程(一) 目录 Python多线程(一) 线程 Python线程模型 Python虚拟机按照下面所述方式来切换线程 Threading模块 未引进线程 结果 引入线程 方式一:创建Th ...
随机推荐
- NET 领域驱动设计实战系列总结
NET 领域驱动设计实战系列总结 一.引用 其实在去年本人已经看过很多关于领域驱动设计的书籍了,包括Microsoft .NET企业级应用框架设计.领域驱动设计C# 2008实现.领域驱动设计:软件核 ...
- 在MVC5中的使用Ninject
在MVC5中的使用 Ninject 从MVC3中就开始接触Ninject这个IOC工具.也一直是MVC Framework系列书籍中推荐的IOC工具,当然还有优秀的Autofac等.性能和使用上面个有 ...
- hdu Just a Hook
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树+lazy操作 线段树是从上到下开始建树,树状数组是从下到上建树.... 代码: ...
- Sierpinski三角形
转载请标明地址:http://www.cnblogs.com/wangmengmeng/ 效果图: 通项公式:An=3的N-1次方 源代码: #include <graphics.h> # ...
- MIFARE系列6《射频卡与读写器的通信》
1. ATR(Answer to request) 读写器呼叫磁场内的卡片.卡片对呼叫做出应答. 对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠 ...
- ArcGIS网络分析之Silverlight客户端最近设施点分析(四)
原文:ArcGIS网络分析之Silverlight客户端最近设施点分析(四) 在上一篇中说了如何实现最近路径分析,本篇将讨论如何实现最近设施点分析. 最近设施点分析实际上和路径分析有些相识,实现的过程 ...
- 【高德API】如何利用MapKit开发全英文检索的iOS地图
原文:[高德API]如何利用MapKit开发全英文检索的iOS地图 制作全英文地图的展示并不困难,但是要制作全英文的数据检索列表,全英文的信息窗口,你就没办法了吧.告诉你,我有妙招!使用iOS自带的M ...
- ZOJ 3802 Easy 2048 Again 像缩进DP
链接:problemId=5334">http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334 题意:一个长度为5 ...
- Swift入门教程:基本语法大全
原文:Swift入门教程:基本语法大全 简介: ...
- 深入struts2(三)---工作机制和运行流程图
1 工作原理 1.1 体系架构 图2.1 struts2.0体系架构图 1.2 工作机制 针对上节体系架构图,以下分步说明运行流程 Ø client初始化一个指向Servle ...