以下是一个使用 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 的 INCRDECR 命令来增加和减少并发请求数。在处理请求之前,我们首先检查当前并发请求数是否已达到限制。如果已达到限制,则等待一段时间后再次检查。如果未达到限制,则增加并发请求数,开始处理请求,并在处理完成后减少并发请求数。

这样可以确保同时处理的并发请求数不会超过限制。请注意,由于多线程环境下的原子性问题,我们使用 Redis 的原子操作来增加和减少并发请求数,以确保计数的准确性。


原文地址: https://www.cveoy.top/t/topic/piSJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录