美文网首页
使用threading模块

使用threading模块

作者: CaesarsTesla | 来源:发表于2017-03-29 22:33 被阅读11次
    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    #@Filename:mtsleepC
    #@Date:2017-03-29 21:58
    #@auther:Mudy
    #@E-mail:2808050775@qq.com
    #@Blog:txmudy.cn
    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)) #[0,1]
    
        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 ',ctime())
    
    if __name__ == "__main__":
        main()
    

    输出的结果是:

    starting at: Wed Mar 29 22:11:19 2017
    start loop 0 at: Wed Mar 29 22:11:19 2017
    start loop 1 at: Wed Mar 29 22:11:19 2017
    loop 1 done at: Wed Mar 29 22:11:21 2017
    loop 0 done at: Wed Mar 29 22:11:23 2017
    all done at  Wed Mar 29 22:11:23 2017
    

    实例化Thread(调用Thread())和调用thread.start_new_thread()的最大的区别是新线程不会立即开始执行.这是一个非常有用的同步功能,尤其是当你并不希望线程立即开始执行时。
      当所有线程都分配完成之后,通过调用每个线程的start()方法让他们开始执行,而不是在这之前就会执行。相比于管理一组锁(分配、获取、释放、检查锁状态等)而言,这里只要为每个线程调用join()方法即可。join()方法将等待线程结束。或者在提供了超时时间的情况下,达到超时时间。使用join()方法要比等待锁释放的无限循环更加清晰(这也是这种锁又称为自旋锁的原因
      对于调用join()方法而言,其另一个重要方面是其实它根本不需要调用。一旦线程启动,他们就会一直执行,直到给定的函数完成后退出。如果线程还有其他事情要去做,而不是等待这些线程完成(例如其他处理或者等待新的客户端请求),就可以不调用join()。join()方法只有在你需要等待线程完成的时候在是有用的

    如果不调用join()

    starting at: Wed Mar 29 22:28:22 2017
    start loop 0 at: Wed Mar 29 22:28:22 2017
    start loop 1 at: Wed Mar 29 22:28:22 2017
    all done at  Wed Mar 29 22:28:22 2017
    loop 1 done at: Wed Mar 29 22:28:24 2017
    loop 0 done at: Wed Mar 29 22:28:26 2017
    

    相关文章

      网友评论

          本文标题:使用threading模块

          本文链接:https://www.haomeiwen.com/subject/lgwyottx.html