Python多线程的创建,相关函数和守护线程的理解
2013-05-07 19:30
701 查看
欢迎关注我的个人博客blog.timene.com
一:多线程的创建
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有效。
一:多线程的创建
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多线程的创建,相关函数和守护线程的理解
- 多线程(九):线程相关知识点(创建方式,API,守护线程,状态转换)
- python 8-1 如何使用多线程,Thread创建线程,执行函数赋值给target//类+函数放在run方法中执行
- 04.多线程--06.【同步方式在线程两种创建方式中的可行性】【同步代码块和同步函数的关系】【多线程程序设计思路总结】
- 多线程——线程的创建以及操作线程的相关方法简介
- 6.多线程学习--守护线程的创建和运行
- 多线程——线程的创建以及操作线程的相关方法简介
- 【搞懂Java多线程之一】多线程相关概念,线程生命周期以及线程创建方法
- 多线程状态的和守护线程的理解
- Python多线程之线程创建和终止
- python的多线程和守护线程
- 讲Linux下面线程的操作、多线程的同步和互斥相关函数及操作的文章链接
- 基础入门_Python-进程相关.深入理解子进程/守护进程/进程高可用实现?
- python多线程编程: python对多线程的支持和线程的创建、启动、挂起、退出
- Python列表创建及相关函数
- python多线程之创建线程
- 多线程开发要点1:如何使用类的成员函数创建线程
- 再谈多线程编程(一)——线程的概念、多线程的创建、守护线程、线程状态的转化
- java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)
- 多线程,线程创建及关闭句柄存在的问题,终止线程的运行的几个函数