python多线程-threading模块

python多线程-threading模块

ID:37895555

大小:55.00 KB

页数:15页

时间:2019-06-02

python多线程-threading模块_第1页
python多线程-threading模块_第2页
python多线程-threading模块_第3页
python多线程-threading模块_第4页
python多线程-threading模块_第5页
资源描述:

《python多线程-threading模块》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、python多线程-threading模块  threading是我们常用的用于python多线程的模块,其功能更加丰富。下面我们就来开始学习这个模块。  同样的,我这里声明一样我使用的版本是python2.7,不同版本直接可能存在差异。  老规矩,使用help()函数获取帮助文档,看看里面有什么内容。  threading模块中提供了一个thread的类,注意不要和thread模块搞混了,两者差别还是很大的。thread这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的run()方法来开启一个线程的运行。而且,既然他是一个类,我们也可以派生

2、一个子类,实现多种不同的线程创建方式。下面我们来看看如何使用这个类来实现多线程。1.创建一个Thread的实例,传给它一个函数。某处抠来的代码示例:复制代码#!/usr/bin/envpython#-*-coding:utf-8-*-importthreadingfromtimeimportsleep,ctimeloops=[4,2]defloop(nloop,nsec):print'开始线程',nloop,'于',ctime()sleep(nsec)print'loop函数',nloop,'完成于',ctime()defmain():print'开始主

3、线程:',ctime()threads=[]#一个用于储存线程对象的列表nloops=range(len(loops))foriinnloops:t=threading.Thread(target=loop,args=(i,loops[i]))#每次循环创建一个Thread的实例threads.append(t)#将新创建的对象放到一个列表中foriinnloops:threads[i].start()#每次循环运行一个线程foriinnloops:threads[i].join()#等待子线程的完成print'主线程完成:',ctime()if__na

4、me__=='__main__':main()复制代码输出:  首先我们来看看如何创建一个Thread的实例,先看看其构造函数接受哪些参数:__init__(self,group=None,target=None,name=None,args=(),kwargs=None,verbose=None)  self:实例本身,特定格式,这里忽略。  group:应该是None,这里是留给未来的扩展,当ThreadGroup类实现的时候。我们不用理它。  target:一个可调用的对象,可以是一个函数,也可以是一个类。如果是一个类的时候,将调用类内部的__ca

5、ll__方法。  name:用字符串表示线程的名字。在默认的情况下,遵从"Thread-N"的格式,其中N是一个十进制的数字,从1开始。可以为多个线程设定一样的名字。  args:是一个元祖,以位置参数的方式传给被调用对象。  kwargs:是一个字典,以关键字参数的方式传给对象。  verbose:未有说明,试了一下,设置了改参数的值后将输出详细的说明,但是设置的值对这个输出结果的影响未知,据我观察输出的顺序多是随机的,也就是这里有值就行,下面是其中一次的输出结果:  一般情况下用不到,这里了解下就行。  注意:我们在thread模块中说过,threa

6、d.start_new_thread()函数不接受关键字传参,而这里的threading.Thread类则建议全部用关键字传参。  知道了如何创建thread对象之后,我们再来看看其内部有什么方法:1.getName(self)  获取线程的名字,就是初始函数中的name的值。同样的,我们可以使用实例的name属性来获取。注意这里是类里面的方法,所以self不是要给的参数。2.setName(self,name)  为线程设定名字name,和初始函数中的设定一样,不过可以用来重命名线程名。3.start(self)  开始线程的运行,每个线程对象只有调用

7、最多一次。它将调用被调用对象的run()方法,并控制各个对象独立运行。也就是说被调用的对象必要要有run()方法,在使用Thread类来实例化对象的时候,因为Thread中已经有了run()方法了,所以可以不用理。但是,在基础Thread创建子类的时候,一般我们要重写子类的run()方法。  当一个线程对象重复调用start()方法时,将触发RuntimeError异常。4.run(self)  方法表示线程是活跃的,也就是要运行线程。我们可以在子类中重写这个方法。  它和start()的差别在于:start()更像是一个管理器,它负责调用对象的run(

8、)方法,而run()方法更像是一个入口函数。如果单独运行run()方法,则只是运

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。