threading python2 和python3

python

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

以上是 threading python2 和python3 的全部内容, 来源链接: utcz.com/z/387648.html

回到顶部