python 多线程学习一
2013-12-08 22:21
357 查看
python线程使用有两种方法:
1.直接调用threading.Thread来构造thread对象,Thread的参数如下:
class threading.Thread(group=None target=None name=None args=() kwargs={})
group为None;
target为线程将要执行的功能函数;
name为线程的名字,也可以在对象构造后调用setName()来设定;
args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1);
kwargs为dict类型的参数,也即位命名参数;
2.实现自己的threading.Thread的子类,需要重载__init__()和run()。
下面是两个例子:
python对于thread的管理中有两个函数:join和setDaemon
join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接着threada.join()往后运行。
使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一个timeout参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并。
setDaemon:主线程A启动了子线程B,调用b.setDaemon(True),则主线程结束时,会把子线程B也杀死。
python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉。而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出。通过调用setDaemon(True),能与C/C++中得默认效果是一样的。
上面的程序启动了两个线程,输出结果如下:
如果将#b.setDaemon(True)的注释去掉,则输出结果如下:
1.直接调用threading.Thread来构造thread对象,Thread的参数如下:
class threading.Thread(group=None target=None name=None args=() kwargs={})
group为None;
target为线程将要执行的功能函数;
name为线程的名字,也可以在对象构造后调用setName()来设定;
args为tuple类型的参数,可以为多个,如果只有一个也的使用tuple的形式传入,例如(1);
kwargs为dict类型的参数,也即位命名参数;
2.实现自己的threading.Thread的子类,需要重载__init__()和run()。
下面是两个例子:
import time import threading def timer(no,interval): cnt =0 print threading.Thread.getName() while cnt<10: print "Thread %d,time:%s" %(no,time.ctime()) time.sleep(interval) cnt+=1 def test(): a = threading.Thread(name ="ping",target=timer,args=(1,1)) b = threading.Thread(name ="mao",target=timer,args=(2,2)) a.start() b.start() a.join() b.join() if __name__ =='__main__': test()
import threading import time import datetime class timer(threading.Thread): def __init__(self,no,interval): self.m_no =no self.m_interval = interval threading.Thread.__init__(self) def run(self): cnt =0 while cnt<10: print "no %d,cnt is %d,time is %s" %(self.m_no,cnt,datetime.datetime.now()) time.sleep(self.m_interval) cnt+=1 def test(): a =timer(1,1) a.start() if __name__=='__main__': test() print "Main thread exit"
python对于thread的管理中有两个函数:join和setDaemon
join:如在一个线程B中调用threada.join(),则threada结束后,线程B才会接着threada.join()往后运行。
使得一个线程可以等待另一个线程执行结束后再继续运行。这个方法还可以设定一个timeout参数,避免无休止的等待。因为两个线程顺序完成,看起来象一个线程,所以称为线程的合并。
setDaemon:主线程A启动了子线程B,调用b.setDaemon(True),则主线程结束时,会把子线程B也杀死。
python中得thread的一些机制和C/C++不同:在C/C++中,主线程结束后,其子线程会默认被主线程kill掉。而在python中,主线程结束后,会默认等待子线程结束后,主线程才退出。通过调用setDaemon(True),能与C/C++中得默认效果是一样的。
import threading import time import datetime lock=threading.Lock() class timer(threading.Thread): def __init__(self,no,interval): self.m_no =no self.m_interval =interval threading.Thread.__init__(self) def run(self): cnt =0 while cnt<10: lock.acquire() print "no %d,cnt is %d,time is %s" %(self.m_no,cnt,datetime.datetime.now()) lock.release() time.sleep(self.m_interval) cnt+=1 def test(): a =timer(1,1) b =timer(2,2) #b.setDaemon(True) a.start() b.start() if __name__=='__main__': test() print "Main thread exit"
上面的程序启动了两个线程,输出结果如下:
如果将#b.setDaemon(True)的注释去掉,则输出结果如下:
相关文章推荐
- python进阶学习笔记(四)--多线程thread
- python学习笔记之使用threading模块实现多线程(转)
- Python多线程学习
- python多线程的学习
- python学习之异常与多线程
- Python模块学习 ---- threading 多线程控制和处理
- Python多线程学习
- 【python学习】多线程 与 面向对象 结合的一个经典例子
- Python模块学习:threading 多线程控制和处理
- Python多线程学习
- Python学习06--多线程之线程同步、通信
- Python模块学习:threading 多线程控制和处理
- Python模块学习 ---- threading 多线程控制和处理
- Python学习-并发编程之多线程
- Python菜鸟学习手册15----多线程
- Python学习之(二) Python多线程学习
- Python学习笔记(十三)——保持时间、计划任务和启动程序以及多线程
- python学习笔记之使用threading模块实现多线程(转)
- python多线程学习 - Rollen Holt - 博客园
- Python学习笔记(三)多线程的使用