使用 Redis 限制并发请求示例:Python 代码实现
以下是一个使用 Redis 限制并发的 Python 代码示例:
import time
import redis
from threading import Thread
# 创建 Redis 连接
redis_client = redis.Redis(host='localhost', port=6379, db=0)
def process_request(request_id):
# 模拟处理请求的时间
time.sleep(1)
print(f'Request {request_id} processed')
def handle_request(request_id):
# 检查当前并发请求数是否已达到限制
while True:
current_concurrency = redis_client.get('concurrency')
if current_concurrency is None:
current_concurrency = 0
else:
current_concurrency = int(current_concurrency)
if current_concurrency >= 5: # 设置并发限制为 5
time.sleep(0.1)
else:
# 增加并发请求数
redis_client.incr('concurrency')
break
# 处理请求
process_request(request_id)
# 减少并发请求数
redis_client.decr('concurrency')
if __name__ == '__main__':
# 创建 10 个并发请求
for i in range(10):
t = Thread(target=handle_request, args=(i,))
t.start()
在上述示例中,我们使用 Redis 的 INCR 和 DECR 命令来增加和减少并发请求数。在处理请求之前,我们首先检查当前并发请求数是否已达到限制。如果已达到限制,则等待一段时间后再次检查。如果未达到限制,则增加并发请求数,开始处理请求,并在处理完成后减少并发请求数。
这样可以确保同时处理的并发请求数不会超过限制。请注意,由于多线程环境下的原子性问题,我们使用 Redis 的原子操作来增加和减少并发请求数,以确保计数的准确性。
原文地址: https://www.cveoy.top/t/topic/piSJ 著作权归作者所有。请勿转载和采集!