Semaphore()在Python中实现并发访问控制的实例
发布时间:2023-12-24 13:23:20
在Python中,Semaphore是一种并发访问控制机制,可以用来限制同时访问某个资源的线程数量。Semaphore维护一个内部计数器,该计数器可以通过调用acquire()和release()方法来增加和减少。
下面是一个使用Semaphore的示例,假设有一个资源池,其中包含有限数量的资源,同时只能有一定数量的线程访问该资源。我们可以使用Semaphore来限制同时访问资源的线程数量。
import threading
# 构建一个Semaphore对象,初始值为5,表示最多允许5个线程同时访问资源
semaphore = threading.Semaphore(5)
def access_resource():
# 使用acquire方法获取资源
semaphore.acquire()
try:
# 这里是对资源的访问操作
print("Thread {} is accessing resource".format(threading.currentThread().getName()))
finally:
# 使用release方法释放资源,使其可供其他线程访问
semaphore.release()
# 创建10个线程访问资源
for i in range(10):
t = threading.Thread(target=access_resource)
t.start()
在上面的示例中,我们使用Semaphore限制了同时访问资源的线程数量为5个。当有新的线程尝试获取资源时,如果已经有5个线程在访问资源,则该线程会被阻塞,直到有资源可用。
Semaphore可以确保同时访问共享资源的线程数量不超过设定的阈值,从而避免了竞态条件和其他并发访问问题。在实际应用中,Semaphore常常用来控制对数据库或者文件的并发访问,或者限制网络连接的数量等场景。
