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

时间:2015-02-20 13:45:03

标签: python multithreading loops sleep

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

这是来自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

2 个答案:

答案 0 :(得分:5)

在这种情况下无需睡觉! 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,它会在下一条消息到达之前阻止。实际上,它的用法在您发布的代码示例下面的project's Github page上进行了解释。它只是像任何其他迭代器一样使用:

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

答案 1 :(得分:2)

是的,没关系,如果图书馆没有提供替代

  • 忙着等待没有睡觉是非常邪恶的,因为它占用了大量的CPU时间。

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