Python计时器占用太多cpu

2024-03-28 16:00:46 发布

您现在位置:Python中文网/ 问答频道 /正文

当我签入任务管理器时,在下面运行有时会在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)     

Tags: import管理器timedef警报cpuctypesstart
2条回答

试试这个:

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)

相关问题 更多 >