我在python中使用Redis服务器。在
我的应用程序是多线程的(每个进程使用20-32个线程),而且
我在不同的机器上运行这个应用程序。在
我注意到有时候Redis的cpu使用率是100%,Redis服务器变得无响应/慢。在
我想为每个应用程序使用1个连接池,共4个连接。
例如,如果我最多在20台机器上运行我的应用程序,应该有
20*4=80到redis服务器的连接。在POOL = redis.ConnectionPool(max_connections=4, host='192.168.1.1', db=1, port=6379)
R_SERVER = redis.Redis(connection_pool=POOL)
class Worker(Thread):
def __init__(self):
self.start()
def run(self):
while True:
key = R_SERVER.randomkey()
if not key: break
value = R_SERVER.get(key)
def _do_something(self, value):
# do something with value
pass
if __name__ = '__main__':
num_threads = 20
workers = [Worker() for _ in range(num_threads)]
for w in workers:
w.join()
当执行一个命令时,上面的代码应该运行从最大大小为4的连接池中获取连接的20个线程。在
当连接解除时?在
在执行每个命令之后,将释放连接并返回池
有人能验证我是否理解了这个想法是正确的,并且上面的示例代码将按描述的那样工作吗?在
因为当我看到redis连接时,总是有4个以上。在
编辑:我刚刚在代码中注意到函数在finally之前有一个return语句。那么最终的目的是什么?在