在循环中使用 sleep() 可以很好吗?

Is it ok to use sleep() in a loop to be nice?

我无法更好地描述这个问题。

这是来自 redis-py github 页面。

>>> while True:
>>>     message = p.get_message()
>>>     if message:
>>>         # do something with the message
>>>     time.sleep(0.001)  # be nice to the system :)

我认为这种编码风格(循环休眠)不是很好,但是这个库让我除了使用这种风格别无选择。 (至少他们是这样建议的)

可以一起生活吗?

https://github.com/andymccurdy/redis-py

是的,没关系,如果图书馆不提供替代方案

  • 忙着等待不睡觉很邪恶,因为它占用了大量的CPU时间

  • 忙等待睡觉不是很优雅,但是CPU负载几乎可以忽略不计

这下不用睡觉了! The docstring for get_message 说你可以指定一个 timeout 参数,函数将在返回前等待 timeout 秒。

while True:
    message = p.get_message(timeout=0.1) # or however long you'd want to wait
    if message:
        # do something with the message

如果您不坚持使用 get_message,您发布的代码示例正下方有 listen method, which will block until the next message arrives. Actually, its usage is explained on the project's Github page。它就像任何其他迭代器一样使用:

for message in p.listen():
    # do something with the message