python 信号量
时间: 2023-10-18 18:30:46 浏览: 46
Python中的信号量是一种同步原语,用于控制对共享资源的访问。它可以用于多线程或多进程环境中,以确保在同一时刻只有一个线程或进程可以访问共享资源。
在Python中,可以使用`threading`模块或`multiprocessing`模块提供的`Semaphore`类来创建信号量。
下面是一个简单的示例,展示了如何在多线程环境中使用信号量:
```python
import threading
# 创建信号量对象,初始值为1,表示只允许一个线程同时访问
semaphore = threading.Semaphore(1)
def worker():
# 请求信号量
semaphore.acquire()
# 访问共享资源
print("Accessing shared resource")
# 释放信号量
semaphore.release()
# 创建多个线程
threads = []
for _ in range(5):
t = threading.Thread(target=worker)
threads.append(t)
t.start()
# 等待所有线程完成
for t in threads:
t.join()
```
在上面的示例中,我们创建了一个初始值为1的信号量对象,表示只允许一个线程同时访问共享资源。每个线程在执行访问共享资源前都会调用`semaphore.acquire()`请求信号量,确保只有一个线程能够获得访问权限。在完成对共享资源的访问后,线程调用`semaphore.release()`释放信号量,允许其他线程继续访问。
这样,通过信号量的控制,我们可以有效地管理共享资源的并发访问。