python多线程的学习

1.基本概念python

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