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()