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
posted @ 2018-10-25 17:54  vercont  阅读(158)  评论(0编辑  收藏  举报