• 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
    
  • 相关阅读:
    Spark-sql windows 下 执行错误.
    notepad ++ 注册表
    log4j 配置文件 示例
    linux 查看 进程 内存占用
    spring boot 常见错误解决
    python 轻量 web 框架 Bottle 使用
    Spring cloud eureka 添加 spring-security
    vue can‘ not resolver sass-loader 的 解决办法。
    外国人眼中的珍珠奶茶是啥?
    75.2亿美元:诺基亚、微软终于在一起
  • 原文地址:https://www.cnblogs.com/vercont/p/10210138.html
Copyright © 2020-2023  润新知