我有一个应用程序在调用lpop
时保持循环。使用top
命令,我可以看到redis使用64%的CPU,而我的应用程序使用101%。
我正在使用redis来创建队列和工作者。我的工作人员处于无限循环中,呼叫lpop
并等待下一份工作进入。
为此,我正在使用machinery包。此here存在问题,其中问题来自lpop
。但是,由于评论令人困惑,我不知道LPOP
和BLPOP
之间的区别是什么,除了一个不阻止而另一个阻止的事实。
答案 0 :(得分:4)
Using timed BLPOP instead of LPOP to avoid massive cpu usage
7天前提交
commit 54315dd9fe56a13b8aba2d2a8868fc48dfbb5795
machinery/v1/brokers/redis.go - itemBytes, err := conn.Do("LPOP", redisBroker.config.DefaultQueue) + itemBytes, err := conn.Do("BLPOP", redisBroker.config.DefaultQueue, "1")
使用最新版本的machinery/v1/brokers/redis.go
将LPOP
更改为BLPOP
。