多线程(multithread)
简介
多线程编程
:独立的任务同时运行
由于python虚拟机是单线程(GIL)的原因,只有线程在执行I/O密集型的应用时才能更好的发挥python的并发性
线程与进程
计算机程序只是存储在磁盘上的二进制(或其它类型)的文件。只有把他们加载到内存并被操作系统调用,才拥有生命周期。
进程
- 进程是个执行中的程序
- 每个进程有自己的地址空间,内存,数据栈及其他用于跟踪执行的辅助数据
线程
线程是在同一进程下执行的,并共同享有相同的上下文
线程包括开始,执行顺序,结束三部分,它有一个指令指针,用于记录当前运行的上下文
其它线程运行时,它可以被抢占(中断)和临时挂起(也称睡眠)----这种说法叫让步(yielding)
- 一个进程中的线程和主线程享有同一片数据空间
- 线程一般多并发执行
全局锁
pass
python中的模块
thread:低级
threading:高级
queue:创建一个队列数据结构,用于线程之间的共享
多线程的创建方法
- 创建Thread实例传函数/创建Thread实例传可调用的类实例/继承Thread子类,子类实例化
threads = []
for i in thread_num:
t = 实例化目标函数对象并传参
threads.append(t)#添加入threads列表
for i in thread_num:
threads[i].start()#启动线程
for i in thread_num:
threads[i].join()
#join()阻碍线程直到线程执行完成,线程一旦启动,一直执行下去,直到给定的函数完成退出。
通用Thread子类(basic)
import threading
from time import ctime
class MyThread(threading.Thread):
def __init__(self,func,args,name=''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def getResult(self):
return self.res
def run(self):
print 'starting',self.name,' at: ',ctime()
self.res = self.func(*self.args)
print self.name,'finished at:',ctime()