友人が私が作成したGUIをテストしているときに、動作が遅いという苦情を受けました。案の定、Xpのパフォーマンスモニターを見ると、可能な限り多くのCPUを消費してワイドオープンで実行されます。スタックオーバーフローを掘り下げた後、これは通常の予想される動作のようです。
私の質問はこれです:プログラムが使用できるリソースの量を制限または抑制する方法はありますか?たくさんのプログラムを開いている間、パフォーマンスモニターを表示したままにしました。ほとんどの場合、すべての「プロフェッショナル」プログラム(フォトショップ、崇高なテキストなど)はすべて「アイドル」状態になっているようです。つまり、一度開始すると、最初のピークの後、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で実行されます。このような単純なケースを抑制する方法はありますか?