当我检查任务管理器时,下面的运行有时在9小时或更长时间后无法发出警报,因为它消耗了30%或更多的CPU。如果有人能调整一下,那就太好了。
import time
import ctypes
def timer(hours):
seconds = hours * 3600
start = time.time()
time.clock()
elapsed = 0
while elapsed < seconds:
elapsed = time.time() - start
elapsed = elapsed//60
ctypes.windll.user32.MessageBoxA(0,"Done "+str(elapsed) + " Hrs", "Done", 0)
timer(8)
试试这个:
import time
import ctypes
def timer(hours):
seconds = hours * 3600
start = time.time()
elapsed = 0
while elapsed < seconds:
# Do something once every minute.
time.sleep(60)
elapsed = time.time() - start
elapsed = elapsed//60
ctypes.windll.user32.MessageBoxA(0,"Done "+str(elapsed) + " Hrs", "Done", 0)
timer(8)
问题是你在循环中没有sleep()
,所以循环实际上只是每秒运行数百到数千或数万次,消耗CPU。上面的代码将在重复循环之前等待1分钟。
如果你在等待计时器时不需要做任何事情,你可以完全避免循环,只使用sleep()
:
import time
import ctypes
def timer(hours):
time.sleep(hours * 3600)
ctypes.windll.user32.MessageBoxA(0,"Done "+str(hours) + " Hrs", "Done", 0)
timer(8)
这难道不会达到完全相同的效果吗?因为你在循环的时候什么也没做。
import time
import ctypes
def timer(hours):
start = this.time()
time.sleep(hours * 3600)
ctypes.windll.user32.MessageBoxA(0,"Done "+str(hours) + " Hrs", "Done", 0)