gpt4 book ai didi

Python Gui 编程和 cpu 使用。如何创建 'idle' 或 'throttle' 以便一段代码不消耗 100 个可用 cpu?

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:54 25 4
gpt4 key购买 nike

当一个 friend 正在测试我制作的图形用户界面时,我收到了关于运行缓慢的投诉。果然,查看 Xp 的性能监视器,它运行时会尽可能多地消耗 cpu。在对 stackoverflow 进行一些研究之后,这似乎是正常的预期行为。

我的问题是:有没有一种方法可以限制或扼制允许程序使用的资源量?我在打开一堆程序时保持性能监视器可见,并且在大多数情况下,所有“专业”程序(如 photoshop、sublime text 等)似乎都处于“空闲”状态。也就是说,一旦开始,在初始峰值之后,它们的 CPU 使用率就会下降到处理器的一小部分。

如何限制 python 程序的使用,或者让它只在需要时获取权力(就像其他程序似乎做的那样)?

我的主循环的一个略微截断的版本:

while True:
events = pygame.event.get()
for event in events:
if event.type == QUIT:
if not flags['confirm']:
flags['alert'] = 1
else:
pygame.quit()

elif event.type == MOUSEBUTTONDOWN:
text_box.set_focus(event.button, event.pos)
m_numbar.set_focus(event.button, event.pos)
# print event.pos




if not flags['window_open']:
screen.blit(combined_bg, (0,0))
t_button.update(events, screen)

else:
screen.blit(combined_blur, (0,0))

if flags['config']:
screen.blit(config_window_img, (0,0))
text_box.update(events)
text_box.draw(screen)
m_numbar.update(events)
m_numbar.draw(screen)
submit.update(events, screen)
cancel.update(events, screen)
check_box.update(events, screen)
else:
text_box.draw(screen)
m_numbar.draw(screen)

if flags['alert']:
flags['window_open'] = True
screen.blit(alert_dialog, (0,0))
alert_cancel.update(events, screen)
alert_confirm.update(events, screen)


if flags['saving'][0]:
if time.time() - flags['saving'][1] < .75:
screen.blit(sav_img, (170,170))
else:
flags['window_open'] = False
flags['saving'][0] = False


if flags['currently_doing_thing']:
if not flags['alert']:
screen.blit(r_tag, (40,10))
if check_for_prog():
if not flags['prog_open']:
makeDir()
flags['prog_open'] = True
os.startfile("lla_.exe")
else:
flags['prog_open'] = False
if check_for_grab_process():
try:
os.system("TASKKILL /F /IM lla_.exe")
except:
pass




config_button.update(events, screen)
pygame.display.update()

除了 Gui 编程之外,是否可以限制“正常”任务的 CPU 使用率?例如,while 1 将以 100%cpu 运行。有没有办法限制像这样的简单情况?

最佳答案

使用 Pygame 时,您的主循环看起来像这样(来自 Python Pygame Introduction ):

while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()

ballrect = ballrect.move(speed)
if ballrect.left < 0 or ballrect.right > width:
speed[0] = -speed[0]
if ballrect.top < 0 or ballrect.bottom > height:
speed[1] = -speed[1]

screen.fill(black)
screen.blit(ball, ballrect)
pygame.display.flip()

注意在循环顶部对 pygame.event.get() 的调用。在没有其他事情发生的正常情况下,调用此函数时将阻塞。这意味着您的脚本将等待 event.get() 函数返回,同时完全不使用 CPU。 event.get() 函数仅在您需要处理一些有趣的事情(鼠标移动、按键等)时返回。

根据您对问题的描述,我相信您没有按预期使用 pygame.event.get()。或许您可以展示您的主循环是什么样的。

关于Python Gui 编程和 cpu 使用。如何创建 'idle' 或 'throttle' 以便一段代码不消耗 100 个可用 cpu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com