【问题标题】:pyGame full core usage in simple looppyGame在简单循环中的完整核心使用
【发布时间】:2020-11-07 18:58:48
【问题描述】:

编辑

这是一个open issue,似乎与 alsa 音频有关。

解决方法是关闭音频混音器,或从源代码安装 pyGame。

pygame.init()
pygame.mixer.quit()

我刚刚开始使用 pyGame 进行开发,发现我应该使用以下方法来控制 CPU 时间:

fps = 30
clock = pygame.time.Clock()

while True:
    # Logic...
    clock.tick(fps)

我似乎遇到的问题是,以 1 FPS 运行的最基本的绘制正方形程序会消耗完整的 CPU 内核。

import pygame

pygame.init()

size = ( 16, 16 )
screen = pygame.display.set_mode(size)
pygame.display.set_caption("High CPU")

clock = pygame.time.Clock()

run=True
while run:

    print("Rendering...")

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
             run=False

    screen.fill((255,255,255))

    # Render
    pygame.display.flip()
    clock.tick(1)

# When done
pygame.quit()

只要我调用此脚本,我的机器的单核就会飙升至 100%,尽管消息仅以预期的 1 FPS 更新速率打印到控制台。

$ ps aux | grep python
mclark   25867 97.4  0.1 652232 29088 pts/0    Sl+  13:10   0:06 python highCPU.py

并运行最新的 pyGame

$ pip show pygame
Name: pygame
Version: 1.9.3
Summary: Python Game Development
Home-page: http://www.pygame.org
Author: Pete Shinners, Rene Dudfield, Marcus von Appen, Bob Pendleton, others...
Author-email: pygame@seul.org
License: LGPL
Location: /home/mclark/.local/lib/python2.7/site-packages
Requires: 

这是 pyGame 最新版本中可能存在的错误吗?还是我的时间管理不正确?

【问题讨论】:

  • 您是否使用简单的 while 循环运行了一些测试?在没有 pygame 显示的情况下,我得到了完全相同的结果,而且,我没有 quantic 计算机,基准很差。
  • 我确实意识到根本问题出在时钟上,所以你是对的,屏幕真的无关紧要。我在 i7 上运行它,功能足够强大,我可以以 60+ fps 的速度渲染完整的游戏画布,而 CPU 使用率根本不会发生变化;一个核心固定在 1fps 或 99fps。
  • 您的示例程序在我的电脑上运行良好。最近有人在这里发布了关于一个简单的 Pong 游戏的性能问题,这对我来说也很好用。也许这确实是 pygame 中的一个错误,您应该尝试联系开发人员。
  • @skrx,你能确认你正在运行的pygame版本吗?我只有found this,这似乎也相关。
  • 在 pygame 1.9.3 和旧 1.9.2(64 位版本)、Python 3.5 和 3.6、Windows 7 中都能正常工作。

标签: python pygame


【解决方案1】:

我们在 pygame 2 中修复了这个问题。在某些 linux 系统上,它不再占用 100% 的 CPU 内核。

python3 -m pip install pygame --upgrade

从 pygame 2.0.0 开始,在某些 linux 系统上从源代码安装 pygame 可能会更好。

干杯,

【讨论】:

  • 这就是我所说的好时机。我正在调查此问题,并在您发布后不到 10 小时找到了您的答案。当我安装 PyGame 2 时,可以确认它按预期工作。
  • 很遗憾,pygame2 不能再播放 mp3。
  • @fuenfundachtzig 你有关于这个问题的链接吗?我们有测试证明它确实有效。它还使用了一个实际上可以正常工作的新 mp3 库,而 pygame 1 使用 smpeg,它不适用于大多数 mp3 文件。
  • 不,我不知道。我所做的是升级到pygame==2.0.0.dev6 并从示例中运行music_drop_fade.py,并使用在1.9.6 中播放良好的mp3,然后我得到Unrecognized audio format。 (对于“播放良好”的定义,在现代 CPU 上播放 mp3 的 100 % CPU 负载是可以接受的。)
  • 我在pygame==2.0.0.dev6上仍然遇到这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多