• threading python2 和python3


    from __future__ import division                                                 
    from __future__ import print_function                                           
                                                                                    
    import threading                                                                
                                                                                    
    balance = 0                                                                     
                                                                                    
    def change_it(n):                                                               
        global balance                                                              
        balance +=n                                                                 
        balance -=n                                                                 
                                                                                    
    def run_thread(n):                                                              
        for i in range(10000):                                                      
            change_it(n)                                                            
                                                                                    
    def create_thread():                                                            
        for i in range(30):                                                         
            t1 = threading.Thread(target=run_thread,args=(1,))                      
            t2 = threading.Thread(target=run_thread,args=(-1,))                     
            t1.start()                                                              
            t2.start()                                                              
            t1.join()                                                               
            t2.join()                                                               
            print(balance)                                                          
                                                                                    
    def _test_thread():                                                             
        create_thread()                                                             
                                                                                    
    def test():                                                                     
        _test_thread()                                                              
                                                                                    
    test()             
    

    输出

    Linux-4.15.0-36-generic-x86_64-with-Ubuntu-16.04-xenial
    #39~16.04.1-Ubuntu SMP Tue Sep 25 08:59:23 UTC 2018
    ('64bit', 'ELF')
    Python:2.7.12 (default, Dec  4 2017, 14:50:18) 
    [GCC 5.4.0 20160609]
    6
    6
    -1
    0
    -28
    -41
    -40
    -49
    -56
    -54
    -60
    -63
    -68
    -73
    -69
    -78
    -53
    -60
    -53
    -58
    -48
    -71
    -82
    -83
    -130
    -129
    -111
    -100
    -84
    -173
    
    Linux-4.15.0-36-generic-x86_64-with-Ubuntu-16.04-xenial
    #39~16.04.1-Ubuntu SMP Tue Sep 25 08:59:23 UTC 2018
    ('64bit', 'ELF')
    Python:3.5.2 (default, Nov 23 2017, 16:37:01) 
    [GCC 5.4.0 20160609]
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    

    加锁后

    from __future__ import division                                                 
    from __future__ import print_function                                           
                                                                                    
    import threading                                                                
                                                                                    
    balance = 0                                                                     
    lock = threading.Lock()                                                         
                                                                                    
    def change_it(n):                                                               
        global balance                                                              
        balance +=n                                                                 
        balance -=n                                                                 
                                                                                    
    def run_thread(n):                                                              
        for i in range(10000):                                                      
            lock.acquire()                                                          
            try:                                                                    
                change_it(n)                                                        
            finally:                                                                
                lock.release()                                                      
                                                                                    
    def create_thread():                                                            
        for i in range(30):                                                         
            t1 = threading.Thread(target=run_thread,args=(1,))                      
            t2 = threading.Thread(target=run_thread,args=(-1,))                     
            t1.start()                                                              
            t2.start()                                                              
            t1.join()                                                               
            t2.join()                                                               
            print(balance)                                                          
                                                                                    
    def _test_thread():                                                             
        create_thread()                                                             
                                                                                    
    def test():                                                                     
        _test_thread()                                                              
                                                                                    
    test()
    

    输出

    Linux-4.15.0-36-generic-x86_64-with-Ubuntu-16.04-xenial
    #39~16.04.1-Ubuntu SMP Tue Sep 25 08:59:23 UTC 2018
    ('64bit', 'ELF')
    Python:2.7.12 (default, Dec  4 2017, 14:50:18) 
    [GCC 5.4.0 20160609]
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    
    Linux-4.15.0-36-generic-x86_64-with-Ubuntu-16.04-xenial
    #39~16.04.1-Ubuntu SMP Tue Sep 25 08:59:23 UTC 2018
    ('64bit', 'ELF')
    Python:3.5.2 (default, Nov 23 2017, 16:37:01) 
    [GCC 5.4.0 20160609]
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    
  • 相关阅读:
    Java线程状态和关闭线程的正确姿势
    Eclipse最全的编码设置
    Maven中的src/test/java颜色不正常
    web.xml 各版本的 Schema 头部声明
    程序员面试系列
    几款强大的网页生成工具
    endnoteX9批量导入enw
    关于Ubuntu16.04里安装elasticsearch-head显示集群健康值未连接的问题
    U盘做了系统盘,写入如硬盘映像过程中终止,怎么格式化硬盘重新写入?
    使用jupyter notebook出现kernel error
  • 原文地址:https://www.cnblogs.com/vercont/p/10210139.html
Copyright © 2020-2023  润新知