Python 锁定线程在示例中不起作用
Python locking threads not working in an example
我正在尝试掌握 python 中的 multithreading
模块中的 Lock
。但由于某种原因,它没有锁定对象并让下一个线程 运行 不等待锁释放。
代码如下:
from threading import Thread, Lock
import time
database_value = 0
def increase(lock):
global database_value
lock.acquire()
local_copy = database_value
local_copy += 1
time.sleep(0.1)
database_value = local_copy
lock.release()
if __name__ == '__main__':
lock = Lock()
print('start value',database_value)
thread1 = Thread(target =increase, args = (lock,))
thread2 = Thread(target =increase, args = (lock,))
print('start')
#start
thread1.start()
thread2.start()
#join
print('join')
thread1.join()
thread1.join()
print('end value', database_value)
我期望的输出是:
start value 0
start
join
end value 2
但我得到的输出:
start value 0
start
join
end value 1
在连接步骤中,您等待线程 1 而不是线程 2。
#join
print('join')
thread1.join()
thread1.join() # Should be thread2
如果您在下面进行更改,它将起作用。
#join
print('join')
thread1.join()
thread2.join()
我正在尝试掌握 python 中的 multithreading
模块中的 Lock
。但由于某种原因,它没有锁定对象并让下一个线程 运行 不等待锁释放。
代码如下:
from threading import Thread, Lock
import time
database_value = 0
def increase(lock):
global database_value
lock.acquire()
local_copy = database_value
local_copy += 1
time.sleep(0.1)
database_value = local_copy
lock.release()
if __name__ == '__main__':
lock = Lock()
print('start value',database_value)
thread1 = Thread(target =increase, args = (lock,))
thread2 = Thread(target =increase, args = (lock,))
print('start')
#start
thread1.start()
thread2.start()
#join
print('join')
thread1.join()
thread1.join()
print('end value', database_value)
我期望的输出是:
start value 0
start
join
end value 2
但我得到的输出:
start value 0
start
join
end value 1
在连接步骤中,您等待线程 1 而不是线程 2。
#join
print('join')
thread1.join()
thread1.join() # Should be thread2
如果您在下面进行更改,它将起作用。
#join
print('join')
thread1.join()
thread2.join()