python多线程的学习

2017-01-12 09:56:05来源:oschina作者:啊哈关关人点击

1.基本概念

使用多线程编程,以及类似queue的共享数据结构,这个编程任务可以规划成几个执行特定函数的线程。
qingUserRequestThread:负责读取客户端输入,该输入可能来自I/O通道,程序将创建多个线程,每个客户端一个,客户端的请求将会被放入队列中。
RequestThread:该线程负责从队列中获取请求并进行处理,为第3个线程提供输出。
ReplyThread:负责向用户输出,将结果传回给用户(如果是网络用户),或者把数据写到本地文件系统或数据库中。
进程:执行中的程序。每个进程拥有自己的地址空间,内存,数据栈,以及其他用于跟踪执行的辅助数据。操作系统管理其上的所有进程的执行,并为这些进程合理分配时间。进程也可以通过派生(fork或spawn)新的进程来执行其他任务,不过每个新进程也都拥有自己的内存和数据栈等,所以只能采用进程间通信(PIC)的方式来共享信息。
线程:与进程相似,但是在同一个进程下执行的,并共享相同的上下文。可以将他们认为是一个主进程或“主线程"中运行的迷你进程。
线程包括开始,执行顺序,和结束三个部分。他有一个指令指针,用于记录当前运行的上下文,当其他线程运行时,他可以被抢占(中断)和临时挂起(睡眠)--这种做法叫做让步
全局解释锁:Python的解释器当中,任意时刻只有一个线程会被解释器执行。对Python虚拟机的访问是由全局解释锁(GIL)来控制的,这个锁是用来保证同时只能有一个线程执行。
执行步骤:设置GIL
切换进一个线程去运行
执行下列操作之一:a.指定数量的字节码指令b.线程主动让出控制权(可以调用来完成time.sleep(0))
把线程设置回睡眠状态
解锁GIL
重复上述步骤
退出线程:当一个线程完成函数时,他就回退出。还可以通过调用诸如thread.exit()之类的方法,sys.exit()退出,或抛出SystemExit异常来使线程退出。但你不能直接终止一个线程

2.python的threading模块

Thread:表示一个执行线程的对象
Lock:锁原语对象
RLock:可重入锁对象,使单一线程可以再次获得已持有的锁(递归锁)
Condition:条件变量对象,使得一个线程等待另一个线程满足特定的条件
#!/usr/bin/env python
import threading
def haha(max):
for i in range(max):
print max
def main():
threads =[]
n=range(10)
for i in n:
t=threading.Thread(target=haha,args=(10,))#实例化Thread对象,把target(函数)和args(参数)传进去,然后获得Thread对象
threads.append(t)
for i in n:
threads[i].start()#当所有的线程都分配完成之后,通过调用每个线程的start()方法让他们执行
for i in n:
threads[i].join()#为每个线程调用join()方法。join()方法将等待线程结束,或者在提供了超时时间的话,达到超时时间。
if __name__ == "__main__":
main()

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台