You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pygame.event.wait()未降CPU占用反而占满100%,求排查脚本错误

Pygame event.wait()导致CPU占用100%的问题排查

最近我试着用pygame.event.wait()来降低脚本的CPU使用率——这个方法参考了Pygame官方文档,示例来自Stack Overflow的相关问答,但实际运行后完全没达到预期,CPU直接被占满到100%了。麻烦帮我排查下下面这段脚本里的错误:

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事件系统的线程安全限制上:

  • Pygame的事件API(包括event.wait())设计为只能在主线程中使用,子线程调用这些函数会触发不可预测的行为,其中就包括看似阻塞但实际后台忙等待的情况,直接导致CPU拉满。
  • 另外你的主线程在启动子线程后没有任何阻塞或循环逻辑,会直接退出,这也会让Pygame的窗口管理陷入异常状态,进一步加剧资源占用问题。

修复后的代码

把事件处理逻辑移回主线程,同时优化资源创建(比如提前初始化字体),就能解决CPU占用问题:

import pygame
from pygame.locals import *

def handle_player_input(input_str):
    # 这里可以扩展处理输入后的业务逻辑
    if input_str == 'hello':
        print("收到输入:hello")

# 初始化Pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
# 提前初始化字体,避免每次事件循环重复创建浪费资源
font = pygame.font.Font(None, 50)

# 主线程中运行事件循环(Pygame要求的标准做法)
while True:
    # 这里的wait()会真正阻塞,直到有事件触发,CPU使用率会降到极低
    event = pygame.event.wait()
    
    if event.type == KEYDOWN:
        if event.unicode == 'h':
            handle_player_input('hello')
    elif event.type == QUIT:
        # 退出前清理Pygame资源
        pygame.quit()
        break

关键修复点说明

  1. 主线程处理事件:严格遵循Pygame的设计规范,事件循环必须放在主线程中,pygame.event.wait()在这里会正常阻塞,不会占用额外CPU。
  2. 提前初始化资源:把字体创建移到循环外,避免重复创建对象带来的性能损耗。
  3. 正确退出流程:退出时调用pygame.quit()清理所有Pygame资源,避免残留进程。

内容的提问来源于stack exchange,提问作者dmytro.poliarush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:00:39