@
    
进程
    
   
进程
#
一个执行中
的程序
    @线程(轻量级进程)
   
    #同一个进程下执行的,并共享相同的上下文
   
    #线程包括开始、执行顺序和结束
   
    #线程是以并发方式执行,单核CPU系统中,实现是每个线程执行一小会儿。
   
    @GIL(全局解释器锁)
   
    #I/O密集型的Python程序要比计算密集型的代码能够更好的利用多线程。
   
    #多线程环境中,Python虚拟机按照下面所述的方式执行。
   
    ##设置GIL
   
    ##切换进一个线程去运行
   
    ##执行下面操作之一
   
    ###指定数量的字节码指令
   
    ###线程主动让出控制权(可以调用time.sleep(0))来完成
   
    #把线程设置回睡眠状态(切换出线程)
   
    #解锁GIL
   
    #重复上述步骤
   
    @
    
退出线程
    
   
退出线程
#
还可以通过调用诸如
thread.exit()
之
类的退出函数,或者 sys.exit()之类的退出 Python 进程的标准方法,亦或者抛出 SystemExit异常,来使线程退出。不过,你不能直接“终止”一个线程。
    @Python多线程模块
   
    #thread (python3中改名为_thread不推荐使用)
   
#
threading(推荐使用)
#
Queue (
队列数据结构
)
@threading的使用
#创建Thread的实例,传给它一个函数
#创建Thread的实例,传给它一个可调用的类实例
#派生Thread的子类,并创建子类的实例。
@threading的属性和方法列表
#name 线程名
#ident 线程的标识符
#daemon 布尔标志,表示这个线程是否是守护线程
#__init__(group=None, target=None, name=None, args=(),kwargs={}, verbose=None, daemon=None)
    #start()        开始执行线程
   
    #run()        定义线程功能的方法
   
    #join(timeout = None)
    
直至启动的线程终止之前一直挂起;除非给出了
    
    
     
timeout
     
    
    
(秒),否则
    
会一直阻塞
直至启动的线程终止之前一直挂起;除非给出了
timeout
(秒),否则
会一直阻塞
@创建Thread的实例,传给它一个函数
#例
    #!/usr/bin/env python
   
    # -*-coding:utf-8 -*-
   
    import threading
   
    from time import sleep, ctime
   
    loops = [4, 2]
   
    def loop(nloop, nsec):
   
    print(‘start loop’, nloop, ‘at:’, ctime())
   
    sleep(nsec)
   
    print(‘loop’, nloop, ‘done at:’, ctime())
   
    def main():
   
    print(‘starting at:’, ctime())
   
    threads = []
   
    nloops = range(len(loops))
   
    for i in nloops:
   
    t = threading.Thread(target=loop, args=(i, loops[i]))
   
    threads.append(t)
   
    for i in nloops:
   
    threads[i].start()
   
    for i in nloops:
   
    threads[i].join()
   
    print(‘all DONE at:’)
   
    if __name__ == ‘__main__’:
   
    main()
   
    @创建Thread的实例,传给它一个可调用的类实例
   
    import threading
   
    from time import sleep, ctime
   
    loops = [2, 4]
   
    class ThreadFunc(object):
   
    def __init__(self, func, args, name=”):
   
    self.name = name
   
    self.func = func
   
    self.args = args
   
    def __call__(self):
   
    self.func(*self.args)
   
    def loop(nloop, nsec):
   
    print(‘start loop’, nloop, ‘at:’, ctime())
   
    sleep(nsec)
   
    print(‘loop’, nloop, ‘done at:’, ctime())
   
    def main():
   
    print(‘starting at:’, ctime())
   
    threads = []
   
    nloops = range(len(loops))
   
    for i in nloops:
   
    t = threading.Thread(
   
    target=ThreadFunc(loop, (i, loops[i]),
   
    loop.__name__))
   
    threads.append(t)
   
    for i in nloops:
   
    threads[i].start()
   
    for i in nloops:
   
    threads[i].join()
   
    print(“all Done at:”, ctime())
   
    if __name__ == ‘__main__’:
   
    main()
   
    @
    
派生
    
    
Thread
    
    
的子类,并创建子类的实例
    
   
派生
Thread
的子类,并创建子类的实例
    import threading
   
    from time import sleep, ctime
   
    loops = [2, 4]
   
    class MyThread(threading.Thread):
   
    def __init__(self, func, args, name=”):
   
    threading.Thread.__init__(self)
   
    self.name = name
   
    self.func = func
   
    self.args = args
   
    def run(self):
   
    self.func(*self.args)
   
    def loop(nloop, nsec):
   
    print(‘start loop’, nloop, ‘at:’, ctime())
   
    sleep(nsec)
   
    print(‘loop’, nloop, ‘done at:’, ctime())
   
    def main():
   
    print(‘starting at:’, ctime())
   
    threads = []
   
    nloops = range(len(loops))
   
    for i in nloops:
   
    t = MyThread(loop, (i, loops[i]), loop.__name__)
   
    threads.append(t)
   
    for i in nloops:
   
    threads[i].start()
   
    for i in nloops:
   
    threads[i].join()
   
    print(‘all DONE at:’, ctime())
   
    if __name__ == ‘__main__’:
   
    main()
   
 
版权声明:本文为glfxml原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。