我的虚拟脚本使用两个函数,一个函数加1,一个函数减1。 我试图与线程异步地运行每个函数1000000次,并使用锁来防止竞争情况。
但是,我注意到for loop
本身使用锁时,
相同的线程将一直运行到循环结束为止,这使我相信线程正在同步运行。
这是我的脚本的样子:
master_count = 0
trials = 1000
import threading
def add_count():
global master_count
for i in range(trials):
with lock:
print(threading.current_thread().getName())
master_count += 1
def subtract_count():
global master_count
for i in range(trials):
with lock:
print(threading.current_thread().getName())
master_count -= 1
lock = threading.Lock()
t1 = threading.Thread(target = add_count, name = 'add1' )
t2 = threading.Thread(target = add_count, name = 'add2' )
t3 = threading.Thread(target = subtract_count, name = 'subtract1' )
t4 = threading.Thread(target = subtract_count, name = 'subtract2' )
t1.start()
t2.start()
t3.start()
t4.start()
t4.join()
t2.join()
t3.join()
t1.join()
print(master_count)
我看到此输出到python shell(10个试用版):
add1
add1
add1
add1
add1
add1
add1
add1
add1
add1
add2
add2
add2
add2
add2
add2
add2
add2
add2
add2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract2
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
subtract1
我可以想象,如果脚本正在异步运行,我会看到线程名的混合,而不是这个有序的输出。
我也尝试在While
循环中执行此操作,但是我遇到了同样的问题。
实际上是同步运行吗?如果是这样,我如何使其与锁异步运行。
谢谢。