python - 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()
解决方案
看来这个问题是由 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 以解决问题
推荐阅读
- node.js - 我可以在没有 ca-server 的情况下将 rest api 部署到 Hyperledger Fabric 吗?
- python - 如何在 Fast API 中将 unix 时间戳解析为没有时区的日期时间
- javascript - 如何每天只刷新一次页面(加载页面后)单击按钮并使用Javascript打印上次刷新的时间
- java - 我有一个错误 NetworkDispatcher.processRequest
- python - Plotly-Dash:如何使用仍然显示原始列名的交叉表制作数据框?
- eslint - 你能用不同的语言对文件的一部分进行 Lint 吗?
- python - 删除控制台中的最后一行以编写更短的消息 python
- json - JSONDecoder 未从 api 加载文本
- android - 获取 ANativeWindow_lock 错误代码的描述
- ios - 如何在 Swift 中为导航栏添加阴影并隐藏边框?