首页 > 解决方案 > pygame python 库中的 pygame.event.wait() 占用 100%CPU

问题描述

我在脚本中使用 pygame.event.wait() 函数来降低 CPU 使用率。我在这里找到了这个想法:

https://www.pygame.org/docs/ref/event.html#pygame.event.wait

以及此处的使用示例: Pygame waiting the user to keypress a key

我试图弄清楚为什么该函数没有按预期工作以及脚本中的错误在哪里:

import pygame    
from pygame.locals import *    
import threading    


def read_keyboard():    
  pygame.event.clear()    
  while True:    
    event = pygame.event.wait()     # here we wait until user hits keyboard     
    player_input = ''     
    font = pygame.font.Font(None, 50)    
    if event.type == KEYDOWN:    
      if event.unicode == 'h':    
      player_input = 'hello'     
    elif event.type == QUIT:    
      return     

read_keyboard_thread = threading.Thread(target = read_keyboard)

pygame.init()                       
screen = pygame.display.set_mode((480,360))                       
read_keyboard_thread.start()

标签: pythonpygame

解决方案


看来这个问题是由 pygame 中如何处理声音引起的。看来 CPU 利用率是 pygame 的一个已知问题,并且有不同的帖子,特别是这篇文章有助于解决这个问题:

https://github.com/pygame/pygame/issues/331

我更新了代码以禁用 pygame 中的某些混音器类,它有所帮助。我很幸运在这个项目中不需要声音:-)

 53 pygame.init()    #  here we start all of the pygame stuff
 54 pygame.mixer.quit()

最后,如果需要混音器,建议从源代码编译 pygame 以解决问题

https://github.com/pygame/pygame


推荐阅读