首页 > 编程 > Python > 正文

对python:threading.Thread类的使用方法详解

2020-02-16 01:01:32
字体:
来源:转载
供稿:网友

Python Thread类表示在单独的控制线程中运行的活动。有两种方法可以指定这种活动:

1、给构造函数传递回调对象

mthread=threading.Thread(target=xxxx,args=(xxxx))mthread.start()

2、在子类中重写run() 方法

这里举个小例子:

import threading, timeclass MyThread(threading.Thread):  def __init__(self):    threading.Thread.__init__(self)  def run(self):    global n, lock    time.sleep(1)    if lock.acquire():      print n , self.name      n += 1      lock.release()if "__main__" == __name__:  n = 1  ThreadList = []  lock = threading.Lock()  for i in range(1, 200):    t = MyThread()    ThreadList.append(t)  for t in ThreadList:    t.start()  for t in ThreadList:    t.join()

派生类中重写了父类threading.Thread的run()方法,其他方法(除了构造函数)都不应在子类中被重写,换句话说,在子类中只有_init_()和run()方法被重写。使用线程的时候先生成一个子线程类的对象,然后对象调用start()方法就可以运行线程啦(start调用run)

下面我们进入本文的正题threading.Thread类的常用函数与方法:

1、一旦线程对象被创建,它的活动需要通过调用线程的start()方法来启动。这方法再调用控制线程中的run方法。

2、一旦线程被激活,则这线程被认为是'alive'(活动)。当它的run()方法终止时-正常退出或抛出未处理的异常,则活动状态停止。isAlive()方法测试线程是否是活动的。大致上,线程从 start()调用开始那点至它的run()方法中止返回时,都被认为是活动的。模块函数enumerate()返回活动线程的列表。

3、一个线程能调用别的线程的join()方法。这将阻塞调用线程,直到拥有join()方法的线程的调用终止。

4、线程有名字,默认的是Thread-No形式的,名字能传给构造函数,通过setName()方法设置,用getName()方法获取。

5、线程能被标识为'daemon thread'(守护线程).这标志的特点是当剩下的全是守护线程时,则Python程序退出。它的初始值继承于创建线程。标志用setDaemon()方法设置,用isDaemon()获取。

6、存在'main thread'(主线程),它对应于Python程序的初始控制线程。它不是后台线程。

7、

class Thread(group=None, target=None, name=None, args=(), kwargs={})

构造函数能带有关键字参数被调用。

这些参数是:

group 应当为 None,为将来实现Python Thread类的扩展而保留。

target 是被 run()方法调用的回调对象. 默认应为None, 意味着没有对象被调用。

name 为线程名字。默认形式为'Thread-N'的唯一的名字被创建,其中N 是比较小的十进制数。

args是目标调用参数的tuple,默认为空元组()。

kwargs是目标调用的参数的关键字dictionary,默认为{}。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表