我的网站由
tornado
提供支持。在进行压力测试时,我发现python3
几乎使用了所有CPU,而redis-server
则使用了一点。所以,我做了一个配置文件,但配置文件结果让我很困惑:
似乎所有
redis-py
操作(r.xxx()
和lua_xxx()
)都需要大量的CPU时间。
我不知道为什么
python3
吃掉所有CPU,因为如果redis请求被阻止,它应该休眠,从而减少CPU使用率。那么,您能告诉我问题出在哪里吗?谢谢!
我知道已经过去了很多时间,但现在我将 redis-py 与 asyncio 结合使用,遇到了同样的问题。
就我而言,我使用 get_message 方法中的 timeout 参数解决了这个问题,因为没有它,每个异步周期都不会返回 None,从而使我的 CPU 飙升至 100%。
async with self._redis_conn.pubsub() as pubsub:
await pubsub.psubscribe("ws-*")
while True:
message = await pubsub.get_message(ignore_subscribe_messages=True, timeout=20)
redis_logger.debug(message)
if message is not None:
...