【发布时间】:2015-10-25 13:34:56
【问题描述】:
在编写while True 循环(在某些情况下无能为力)时,避免大量 CPU 使用的最佳方法是什么?好像time.sleep(0)伤害了CPU:
import time
msg = []
# in main thread I will add messages to msg list sometimes
msg.append('some_msg')
# in some other thread I will parse them like this:
while True:
for msg in msgs:
# do some operations
time.sleep(0) # hurt CPU in case of len(msg) == 0
是的,我可以使用time.sleep(1) 代替它,但它真的是在 Python 中最正确的方法吗?
【问题讨论】:
-
你为什么要这样做?
-
time.sleep(0)在这里毫无意义,因为它没有做任何有用的事情,它只是调用一大堆依赖于平台的代码(因此,浪费资源),仅此而已。 -
指定的链接不包含此问题的任何真实答案,请重新打开我的问题
-
在这种情况下调用 sleep() 的原因是允许其他线程在您的消息循环等待消息时运行。您应该将睡眠时间设置为您可以接受的值。如果您的应用需要在十分之一秒内响应消息,请使用 sleep(0.05) 并将 cpu 释放给其他进程,同时等待消息到达。
-
执行此操作的“正确”方法取决于您的
msgs变量实际添加/删除的内容/方式。当您“处理”一条消息时,它会被丢弃吗?在我们为您提供帮助之前,您需要提供有关您的具体问题的更多信息。
标签: python