当我在任务管理器中查看时,运行下面的程序有时会在 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)
关于Python定时器消耗太多CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38182529/