threading模块所有的对象:
Thread:表示一个线程的执行对象 Lock :锁源于对象 RLock:可重入锁对象,使单个线程可以再次获得已经获得的锁(递归锁定)
Condition:条件变量能够让一个线程停下来,等待其他线程满足了某个条件。如状态改变 满足了某个值或者状态
Event:通用的条件变量。多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活
Semaphore:为等待锁的线程提供一个类似等候室的结构
BoundedSemaphore:与Semaphore类似,只是它不允许超过初始值
Timer:与Thread相似,只是它要等待一段时间后才开始运行
Thread类:
其中threading的Thread类对象是主要的多线程运行对象,用Thread类你可以用多种方法创建对象,这里主要介绍三种:
方法一.创建一个Thread的实例,传给它一个函数;
方法二.创建一个Thread的实例,传给它一个可调用的类对象;
方法三.从Thread派生出一个子类,创建一个这个子类的实例。
Thread类的方法:
- start(): 开始线程的执行
- run():定义线程的功能函数,当应用上面介绍的方法三时才会用到(子类重写父类的run方法)
- join(timeout = None):程序挂起,直到线程结束;如果给了timeout,则最多阻塞timeout秒
- getName():返回线程的名字
- setName(name):设置线程的名字
- isAlive():布尔标志,表示这个线程是否还在运行中
- isDaemon():返回线程的Daemon标志
- setDaemon(True or False): True:线程被设置为守护线程;False:主线程会被挂起
关于start()方法源码如下:
关于start()方法开始线程的执行,在源码里其实是运行的是run方法
class Thread(_Verbose):
......省略多处......
def __init__(self, group=None, target=None, name=None,
args=(), kwargs=None, verbose=None):
......省略多处......
if kwargs is None:
kwargs = {}
self.__target = target
self.__name = str(name or _newname())
self.__args = args
self.__kwargs = kwargs
self.__daemonic = self._set_daemon()
......省略多处......
def start(self):
......省略多处......
try:
_start_new_thread(self.__bootstrap, ())
except Exception:
with _active_limbo_lock:
del _limbo[self]
raise
self.__started.wait()
def __bootstrap(self):
try:
self.__bootstrap_inner()
except:
if self.__daemonic and _sys is None:
return
raise
def __bootstrap_inner(self):
try:
......省略多处......
try:
self.run()
......省略多处......
def run(self):
try:
if self.__target:
self.__target(*self.__args, **self.__kwargs)
finally:
del self.__target, self.__args, self.__kwargs
实例一:
方法一.创建一个Thread的实例,传给它一个函数
# _*_coding:utf-8_*_
import threading
from time import sleep,ctime
"""
the process that intruduce class of thread
"""
_time = [2,4,6,8]
# Thread hang time 线程挂起的时间
_maxlink = len(_time)
# A pool of thread max-link 线程池的最大的数量
_thread_pool = []
# A pool of thread that save instantiation threads 存放线程实例的线程池
def loop(index,time):
""" A function to class Thread for sleep some times """
print "start loop %s at: "%index,ctime()
sleep(time[index])
print "end loop %s at: "%index,ctime()
def Thread_Pool(*arg):
""" A function that create and save instantiation
of threading to thread pool """
func,LN,Time = arg
for i in range(LN):
t = threading.Thread(target = func,args = (i,Time))
_thread_pool.append(t)
# 将线程实例放到线程池
def Thread_Start(arg):
""" A function that represents a thread of control. """
for i in range(arg):
_thread_pool[i].start()
def main():
"""A function of main"""
print "process start at: ".upper(),ctime()
Thread_Pool(loop,_maxlink,_time)
Thread_Start(_maxlink)
print "process end at: ".upper(),ctime()
if __name__ == '__main__':
main()<