Python线程基础

threading类相关知识

1.threading中的基础类有Thread, Lock, Rlock, Condition, [Bounded]Semaphore, Event, Timer, local。
2.threading中常用的方法有
threading.currentThread(): 返回当前的线程变量;
threading.enumerate();返回一个正在运行的线程list集合
hreading.activeCount();返回正在运行的线程数
threading.TIMEOUT_MAX 用于设置线程超时时间

Thread类

thread为线程类,可有两种使用方式,一种是直接创建并传入调用的方法;一种是集成threading.Thread,并重写run方法。
# coding:utf-8
import threading
import time
#方法一:将要执行的方法作为参数传给Thread的构造方法
def action(arg):
    time.sleep(1)
    print('the arg is:%s\r' %arg)

for i in xrange(4):
    t =threading.Thread(target=action,args=(i,))
    t.start()
print('main thread end!')
创建线程实例时需要注意:
Thread构造方法需要传入的参数解释为:
Thread(group=None, target=None, name=None, args=(), kwargs={}) 
  group: 线程组,目前还没有实现,库引用中提示必须是None; 
  target: 要执行的方法; 
  name: 线程名; 
  args/kwargs: 要传入方法的参数。

#方法二:从Thread继承,并重写run()
class MyThread(threading.Thread):
    def __init__(self,arg):
        super(MyThread, self).__init__()#注意:一定要显式的调用父类的初始化函数。
        self.arg=arg
    def run(self):#定义每个线程要运行的函数
        time.sleep(1)
        print 'the arg is:%s\r' % self.arg
for i in xrange(4):
    t =MyThread(i)
    t.start()
print('main thread end!')

线程中的几个重要方法

isAlive(): 返回线程是否在运行。正在运行指启动后、终止前。
get/setName(name): 获取/设置线程名。
start(): 线程准备就绪,等待CPU调度
is/setDaemon(bool): 获取/设置是后台线程(默认前台线程(False)),也成为守护线程。(在start之前设置)
如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,主线程和后台线程均停止。
如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,程序停止
start(): 启动线程。
join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout(可选参数)。

关于守护线程有几点需要注意

1.当设置了setDameon为False时,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程也执行完成后,主线程停止。
2.当设置了setDameon为True时,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论成功与否,主线程均停止。
3.同时设置了setDameon为True和调用了join函数时, join()将阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout,即使设置了setDeamon(True)主线程依然要等待子线程结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值