Python定时器占用太多cpu
当我签入任务管理器时,在下面运行9小时或更长时间后,有时无法发出警报,因为它消耗了30%或更多的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
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)