python中提供thread 和 threading模块对多线程提供支持,其中threading模块是对thread模块的封装,多数情况下使用threading来进行多线程编程。
一.使用threading.Thread在线程中运行函数
# coding=utf-8
import threading
from time import ctime, sleep
def music(func):
for i in range(2):
print '第',i,'次听音乐!!!!'
print 'I was listening to %s. %s' %(func,ctime())
sleep(1)
def move(func):
for i in range(2):
print '第',i,'次看电影!!!'
print 'I was at the %s!! %s' %(func,ctime())
def run(x,y):
s=x+y
print '--------',s,'---------'
#在线程中运行函数
if __name__ == '__main__':
threads=[]
t1=threading.Thread(target=music,args=(u'爱情买卖',))
threads.append(t1)
t2=threading.Thread(target=move,args=(u'阿凡达',))
threads.append(t2)
t3=threading.Thread(target=run,args=(10,12))
threads.append(t3)
for t in threads:
t.setDaemon(True)
t.start()
for t in threads:
t.join()
print 'all over %s' %ctime()
二.继承threading.Thread 重载run方法
#coding=utf-8
import threading
from time import sleep
import time
#继承threading.Thread类,重写run方法
class mytheard(threading.Thread):
def __init__(self,num):
threading.Thread.__init__(self)
self.num=num
def run(self):
print 'I am',self.num
sleep(5)
class Mythread(threading.Thread):
def __init__(self,ssid,tname):
threading.Thread.__init__(self,name=tname)
self.ssid=ssid
def run(self):
x=0
print x
time.sleep(10)
print self.ssid
def example1():
t1=mytheard(1)
t2=mytheard(2)
t3=mytheard(3)
t1.start()
t2.start()
t3.start()
def example2():
t=Mythread(2,'t1')
t.setDaemon(True)#设置该线程为守护线程
t.start()
print t.getName()
t.setName('t2')
print t.getName()#获取线程名
print t.isAlive()#判断该线程是否还活着
print t.isDaemon()#判断该线程是否为守护线程
t.join()#阻塞主线程,直到线程t执行结束
print 'work end!!!!'
if __name__ == '__main__':
example2()