Python学习05--多线程编程

昨天学习的多线程,今天总结一下,巩固一下

python中提供thread 和 threading模块对多线程提供支持,其中threading模块是对thread模块的封装,多数情况下使用threading来进行多线程编程


1.第一种使用thread我没调试成功,反正也不推荐这种方式,干脆不写了


2.threading 方式 也有两种做法

<1> 继承threading.Thread 重载run方法

#!/usr/bin/python
'''
Created on 2015-1-6

@author: huangpeng03
'''
import threading
class mythread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self.num = num
    def run(self):
        print 'I am ',self.num
    
if __name__ == '__main__':
    t1 = mythread(1)
    t2 = mythread(2)
    t3 = mythread(3)
    t1.start()
    t2.start()
    t3.start()
<2> 使用threading.Thread在线程中运行函数

#!/usr/bin/python
'''
Created on 2015-1-6

@author: huangpeng03
'''
import threading
def run(x,y):
    for i in range(x,y):
        print i

if __name__ == '__main__':
    t1 = threading.Thread(target=run,args=(15,20))
    t1.start()

3.join方法

如果一个线程或者函数在执行过程中调用另外一个线程,并且其完成后才能执行,这时就要用到.join()方法了

具体如下:

#!/usr/bin/python
'''
Created on 2015-1-6

@author: huangpeng03
'''
import  threading
import time
class Mythread(threading.Thread):
    def __init__(self,id):
        threading.Thread.__init__(self)
        self.id = id
    def run(self):
        x = 0
        print x
        time.sleep(10)
        print self.id

def func():
    t.start()
    t.join()
    for i in range(5):
        print i

if __name__ == '__main__':
    t = Mythread(2)
    func()

结果是:

0
2
0
1
2
3
4


4.isAlive方法用来判断线程是否正在运行


5.还有一些设置、更改线程名的方法

#!/usr/bin/python
'''
Created on 2015-1-6

@author: huangpeng03
'''
import  threading
import time
class mythread(threading.Thread):
    def __init__(self,threadname):
        threading.Thread.__init__(self,name=threadname)
    def run(self):
        print self.getName()
        

if __name__ == '__main__':
    t1 = mythread('t1')
    print t1.getName()
    
    t1.setName('T')
    print t1.getName()
    
    

6.setDaemon 方法   在脚本运行过程中有一个主线程,如果主线程又创后再建了一个子线程,那么当主线程退出时,会检验子线程是否完成,如果子线程未完成,则主线程会等待子线程完成后再退出。当需要主线程退出时,不管子线程是否完成都随主线程退出,则看见恶意使用Thread对象的serDaemon方法来设置。

#!/usr/bin/python
'''
Created on 2015-1-6

@author: huangpeng03
'''
import  threading
import time
class mythread(threading.Thread):
    def __init__(self,threadname):
        threading.Thread.__init__(self,name=threadname)
    def run(self):
        time.sleep(5)
        print self.getName()

def func1():
    t1.start()
    print 'func1 done'
def func2():
    t2.start()
    print 'func2 done'

if __name__ == '__main__':
    t1 = mythread('t1')
    t2 = mythread('t2')
    t2.setDaemon(True)
    func1()
    func2()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值