python3线程池锁
时间: 2023-12-05 22:40:53 浏览: 85
在Python中,可以使用`threading`模块来实现线程池锁。其中,`Lock`和`RLock`是两种常用的锁类型。`Lock`是最基本的锁类型,它提供了互斥锁的机制,即同一时刻只能有一个线程访问共享资源。而`RLock`则是可重入锁,它允许一个线程多次获取同一个锁,避免了死锁的问题。
下面是一个使用线程池锁的例子,其中使用了`ThreadPoolExecutor`来创建线程池,并使用`with`语句来自动获取和释放锁资源:
```python
import concurrent.futures
import threading
total = 0
lock = threading.Lock()
def add():
global total
for i in range(1000000):
with lock:
total += 1
def desc():
global total
for i in range(1000000):
with lock:
total -= 1
if __name__ == '__main__':
with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
executor.submit(add)
executor.submit(desc)
print(total)
```
在上面的例子中,我们创建了一个包含两个线程的线程池,并使用`submit`方法将`add`和`desc`函数提交到线程池中执行。在`add`和`desc`函数中,我们使用`with`语句来获取和释放锁资源,确保同一时刻只有一个线程能够访问`total`变量。最后,我们输出`total`的值,可以看到它的值为0,说明线程池锁起到了作用。
阅读全文