python多线程-threading模块.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
python多线程-threading模块剖析

python多线程-threading模块   threading 是我们常用的用于 python 多线程的模块,其功能更加丰富。下面我们就来开始学习这个模块。   同样的,我这里声明一样我使用的版本是 python2.7,不同版本直接可能存在差异。   老规矩,使用 help() 函数获取帮助文档,看看里面有什么内容。   threading 模块中提供了一个 thread 的类,注意不要和 thread 模块搞混了,两者差别还是很大的。thread 这个类可以实例化一个对象,每个对象代表一个线程,可以调用其中的 run() 方法来开启一个线程的运行。而且,既然他是一个类,我们也可以派生一个子类,实现多种不同的线程创建方式。下面我们来看看如何使用这个类来实现多线程。 1.创建一个 Thread 的实例,传给它一个函数。 某处抠来的代码示例: 复制代码 #!/usr/bin/env python # -*- coding: utf-8 -*- import threading from time import sleep, ctime loops = [4, 2] def loop(nloop, nsec): print 开始线程, nloop, 于, ctime() sleep(nsec) print loop函数, nloop, 完成于, ctime() def main(): print 开始主线程:, ctime() threads = [] # 一个用于储存线程对象的列表 nloops = range(len(loops)) for i in nloops: t = threading.Thread(target=loop, args=(i, loops[i])) # 每次循环创建一个Thread的实例 threads.append(t) # 将新创建的对象放到一个列表中 for i in nloops: threads[i].start() # 每次循环运行一个线程 for i in nloops: threads[i].join() # 等待子线程的完成 print 主线程完成:, ctime() if __name__ == __main__: main() 复制代码 输出:   首先我们来看看如何创建一个 Thread 的实例,先看看其构造函数接受哪些参数: __init__(self, group=None, target=None, name=None, args=(), kwargs=None, verbose=None)   self:实例本身,特定格式,这里忽略。   group:应该是 None,这里是留给未来的扩展,当ThreadGroup类实现的时候。我们不用理它。   target:一个可调用的对象,可以是一个函数,也可以是一个类。如果是一个类的时候,将调用类内部的 __call__ 方法。   name: 用字符串表示线程的名字。在默认的情况下,遵从Thread-N的格式,其中 N 是一个十进制的数字,从 1 开始。可以为多个线程设定一样的名字。   args: 是一个元祖,以位置参数的方式传给被调用对象。   kwargs:是一个字典,以关键字参数的方式传给对象。   verbose:未有说明,试了一下,设置了改参数的值后将输出详细的说明,但是设置的值对这个输出结果的影响未知,据我观察输出的顺序多是随机的,也就是这里有值就行,下面是其中一次的输出结果:   一般情况下用不到,这里了解下就行。   注意:我们在thread模块中说过,thread.start_new_thread() 函数不接受关键字传参,而这里的 threading.Thread 类则建议全部用关键字传参。   知道了如何创建 thread 对象之后,我们再来看看其内部有什么方法: 1. getName(self)   获取线程的名字,就是初始函数中的 name 的值。同样的,我们可以使用实例的 name 属性来获取。注意这里是类里面的方法,所以 self 不是要给的参数。 2. setName(self, name)   为线程设定名字 name ,和初始函数中的设定一样,不过可以用来重命名线程名。 3. start(self)   开始线程的运行,每个线程对象只有调用最多一次。它将调用被调用对象的 run() 方法,并控制各个对象独立运行。也就是说被调用的对象必要要有 run() 方法,在使用 Thread 类来实例化

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档