python 多线程 共享对象
时间: 2023-11-23 15:52:41 浏览: 60
在 Python 中,多线程共享对象需要注意线程安全问题。如果多个线程同时访问同一个对象,可能会导致数据不一致或者程序崩溃等问题。为了解决这个问题,可以使用锁机制来保证同一时间只有一个线程能够访问共享对象。
Python 中提供了多种锁机制,比如 threading.Lock、threading.RLock、threading.Semaphore 等。其中,Lock 和 RLock 都是互斥锁,Semaphore 是信号量。
下面是一个使用 Lock 来保证多线程共享对象安全的示例代码:
```python
import threading
class Counter:
def __init__(self):
self.value = 0
self.lock = threading.Lock()
def increment(self):
with self.lock:
self.value += 1
def worker(counter):
for i in range(100000):
counter.increment()
counter = Counter()
threads = [threading.Thread(target=worker, args=(counter,)) for i in range(10)]
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print(counter.value)
```
在上面的代码中,Counter 类中的 increment 方法使用了 with self.lock 来获取锁,保证了同一时间只有一个线程能够访问 self.value。worker 函数是一个线程函数,它会调用 Counter 的 increment 方法来增加计数器的值。最后,我们创建了 10 个线程来执行 worker 函数,并且使用 join 方法等待所有线程执行完毕后再输出计数器的值。