繁体   English   中英

Python如何同步线程?

[英]Python how to synchronize threads?

我正在学习使用Python进行并发编程。

在以下代码中,我似乎遇到了同步问题。 我该如何解决?

import threading
N = 1000000
counter = 0

def increment():
    global counter
    for i in range(N):
        counter += 1

t1 = threading.Thread(target=increment)
t2 = threading.Thread(target=increment)

t1.start()
t2.start()
t1.join()
t2.join()

print(counter)

两个线程都试图同时修改counter ,有时它们确实这样做。 这导致一些增量不出现。 这是一种使用threading.Lock解决该问题的简单方法:

import threading

N = 1000000
counter = 0

def increment(theLock):
    global counter
    for i in range(N):
        theLock.acquire()
        counter += 1
        theLock.release()

lock = threading.Lock()
t1 = threading.Thread(target=increment, args=[lock,])
t2 = threading.Thread(target=increment, args=[lock,])

t1.start()
t2.start()
t1.join()
t2.join()

print(counter)

必须保护theLock.acquire()theLock.release()环绕代码,使其一次只能在一个线程中运行。 在您的例子中,获取和释放也可以围绕整个环,但是这将是一样没有使用多。 请参阅线程文档 ,尤其是“ Lock Objects部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM