【发布时间】:2017-11-10 13:01:01
【问题描述】:
为什么while True: 在某些情况下不会对 CPU 造成太大影响,而在其他情况下会?如何防止这种情况发生?
我写了一个简单的程序,很担心
import threading
import time
#sleeptime = 0.1
while True:
#time.sleep(sleeptime)
if not [thread.name for thread in threading.enumerate() if thread.name == 'control']:
threading.Thread(target=control, name='control').start()
将消耗所有计算资源(或至少由操作系统给出的上限)来检查 if 语句(大多数情况下它是错误的,因此它应该很快循环)所以我最初将system.sleep(sleeptime) 放在那里以避免这种情况,但是当我删除它时我很惊讶它对系统资源没有明显的影响。为什么?
这让我想到了系统检查条件的频率。
天真地:如果我做类似的事情
import time
i=0
before = time.process_time()
while True:
i += 1
if i >= 100000000: #1e8 but writing 1e8 adds ~ 30% time
break
after = time.process_time()
print(after-before)
在我的机器上运行时我得到 11 秒和 50% 的 CPU 负载。为什么在第二个示例中我得到 50% 的负载,而在第一个示例中几乎没有?是因为i += 1吗?
是否可以分析 while 循环(它循环的频率和消耗的资源量)而不减慢它的速度或造成开销,从而使测量值变得无关紧要?
我在 Win32 上的 Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] 上执行此操作
【问题讨论】:
标签: python python-3.x