首页 > 应用开发 > > python线程中加锁范围是越大越好还是越小越好呢?
把锁放在循环外面
from threading import Thread, Lock
import time
num = 0
def test1():
global num
# 上锁
mutex.acquire()
for i in range(1000000):
num += 1
# 解锁
mutex.release()
print("--test1--num=%d" % num)
def test2():
global num
mutex.acquire()
for i in range(1000000):
num += 1
mutex.release()
print("--test2--num=%d" % num)
start_time = time.time() # 开始时间
# 创建一把互斥锁,默认没有上锁
mutex = Lock()
p1 = Thread(target=test1)
p1.start()
# time.sleep(3) # 取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?
p2 = Thread(target=test2)
p2.start()
p1.join()
p2.join()
end_time = time.time() # 结束时间
print("num = %d" % num)
print("运行时间:%fs" % (end_time - start_time)) # 结束时间-开始时间
"""
输出结果:
--test1--num=1000000
--test2--num=2000000
num = 2000000
运行时间:0.287206s
"""把锁放在for里面:
from threading import Thread, Lock
import time
num = 0
def test1():
global num
for i in range(1000000):
# 上锁
mutex.acquire()
num += 1
# 解锁
mutex.release()
print("--test1--num=%d" % num)
def test2():
global num
for i in range(1000000):
# 上锁
mutex.acquire()
num += 1
# 解锁
mutex.release()
print("--test2--num=%d" % num)
start_time = time.time() # 开始时间
# 创建一把互斥锁,默认没有上锁
mutex = Lock()
p1 = Thread(target=test1)
p1.start()
# time.sleep(3) # 取消屏蔽之后 再次运行程序,结果会不一样,,,为啥呢?
p2 = Thread(target=test2)
p2.start()
p1.join()
p2.join()
end_time = time.time() # 结束时间
print("num = %d" % num)
print("运行时间:%fs" % (end_time - start_time)) # 结束时间-开始时间
"""
输出结果:
--test1--num=1890838
--test2--num=2000000
num = 2000000
运行时间:4.694896s
"""运行时间差别很大,锁放在什么位置合适呢?
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/818/viewspace-3125357/ ,如需转载,请注明出处,否则将追究法律责任。