Python定时器占用太多cpu

Python定时器占用太多cpu,python,ctypes,Python,Ctypes,当我签入任务管理器时,在下面运行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.t

当我签入任务管理器时,在下面运行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)     
导入时间
导入ctypes
def计时器(小时):
秒=小时*3600
开始=时间。时间()
时钟
已用时间=0
当运行时间<秒时:
已用时间=时间。时间()-开始
已用=已用//60
ctypes.windell.user32.MessageBoxA(0,“完成”+str(已用)+“小时”,“完成”,0)
计时器(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)   

这难道不会达到完全相同的效果吗?既然你在循环中什么都没做

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)

您正在运行一个循环并执行计算——为什么不使用Python的模块呢?这样你就可以卸载到一个单独的线程。你有一个没有睡眠或其他延迟的循环,因此它将以CPU能够处理的速度检查和更新这些值,这就是为什么它一直使用整个CPU核心的原因。另外,如果这就是你想要做的,为什么不直接使用呢?我猜我们差不多同时回答:)我猜是这样。不知怎的,我觉得在这里使用ctypes也有点不必要/不了解信息,但我可能错了..是的,我对Windows开发了解不多,但它似乎直接使用Win32 API。也许有一个Python模块带有绑定和更好的界面,但这似乎不是一个糟糕的方法。我以前使用过tk,但它在显示消息时会打开一个画布窗口。如果有什么办法,我们可以通过只显示消息框来隐藏窗口,那就好了。谢谢,威尔和特拉克。但是当我关闭或笔记本电脑进入睡眠状态时,下面的一个窗口无法准确运行,如何克服这个问题,导入时间导入ctypes def timer(小时):time.sleep(小时*3600)ctypes.windell.user32.MessageBoxA(0,“完成”+str(小时)+“小时”,“完成”,0)计时器(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)