zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    zookeeper java调用及权限控制
    走进C++程序世界------IO标准库介绍
    Unity3d 镜面折射 vertex and frag Shader源代码
    servlet上传文件报错(二)
    模仿linux内核定时器代码,用python语言实现定时器
    6.12交流
    python学习(三) 使用字符串
    JAVA面试(四)
    python学习(二) 列表和元组
    C++面试题(三)
  • 原文地址:https://www.cnblogs.com/vercont/p/10210138.html
Copyright © 2011-2022 走看看