Pygame 简单循环在 Mac 上运行速度非常慢

2024-04-29

E:在 OS X 和 Linux 上进行相同的测试后,我可以确认以下情况仅发生在 OS X 上。在 Linux 上,它实际上以 1000 fps 的速度运行,正如我碰巧想知道的那样。有什么解释吗?感谢 TextMate,我更喜欢在 Mac 上进行开发。


Here's a simple loop that does almost nothing, and still runs very slowly. Can anyone explain why? FPS averages at little over 30, it takes a little over 30ms for each pass over the loop. Window size does not seem to affect this at all, as even setting a tiny window size like (50,50) has the same fps.

我觉得这很奇怪,我希望任何现代硬件都可以为这样一个简单的循环执行一千帧每秒,即使我们每次都更新每个像素。从个人资料中我可以看到{built-in method get} and {built-in method update}合并起来每次调用似乎需要大约 30 毫秒的时间,这真的是我们在不使用脏矩形的情况下可以得到的最好结果吗?

pygame.init()
clock = pygame.time.Clock()
fps = 1000
#milliseconds from last frame
new_time, old_time = None, None    

done = False

while not done:

    clock.tick(fps)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

    # show fps and milliseconds
    if new_time:
        old_time = new_time
    new_time = pygame.time.get_ticks()
    if new_time and old_time:
        pygame.display.set_caption("fps: " + str(int(clock.get_fps())) + " ms: " + str(new_time-old_time))

    pygame.display.update()

这是 main 函数的 cProfile 的开头。

         94503 function calls (92211 primitive calls) in 21.011 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.026    0.026   21.011   21.011 new_main.py:34(main)
      652   14.048    0.022   14.048    0.022 {built-in method get}
      652    5.864    0.009    5.864    0.009 {built-in method update}
        1    0.444    0.444    0.634    0.634 {built-in method init}
      651    0.278    0.000    0.278    0.000 {built-in method set_caption}
     72/1    0.000    0.000    0.151    0.151 <frozen importlib._bootstrap>:2234(_find_and_load)
     72/1    0.000    0.000    0.151    0.151 <frozen importlib._bootstrap>:2207(_find_and_load_unlocked)
     71/1    0.000    0.000    0.151    0.151 <frozen importlib._bootstrap>:1186(_load_unlocked)
     46/1    0.000    0.000    0.151    0.151 <frozen importlib._bootstrap>:1122(_exec)
     46/1    0.000    0.000    0.151    0.151 <frozen importlib._bootstrap>:1465(exec_module)
     74/1    0.000    0.000    0.151    0.151 <frozen importlib._bootstrap>:313(_call_with_frames_removed)
     54/1    0.004    0.000    0.151    0.151 {built-in method exec}
        1    0.000    0.000    0.151    0.151 macosx.py:1(<module>)
        1    0.000    0.000    0.150    0.150 pkgdata.py:18(<module>)
     25/3    0.000    0.000    0.122    0.041 <frozen importlib._bootstrap>:1156(_load_backward_compatible)
      8/1    0.026    0.003    0.121    0.121 {method 'load_module' of 'zipimport.zipimporter' objects}
        1    0.000    0.000    0.101    0.101 __init__.py:15(<module>)
        1    0.000    0.000    0.079    0.079 config_reader.py:115(build_from_config)
        2    0.000    0.000    0.056    0.028 common.py:43(reset_screen)
        2    0.055    0.027    0.055    0.027 {built-in method set_mode}
    72/71    0.001    0.000    0.045    0.001 <frozen importlib._bootstrap>:2147(_find_spec)
    70/69    0.000    0.000    0.043    0.001 <frozen importlib._bootstrap>:1934(find_spec)
    70/69    0.001    0.000    0.043    0.001 <frozen importlib._bootstrap>:1902(_get_spec)
       92    0.041    0.000    0.041    0.000 {built-in method load_extended}
        6    0.000    0.000    0.041    0.007 new_map.py:74(add_character)
        6    0.000    0.000    0.041    0.007 new_character.py:32(added_to_map)
        6    0.001    0.000    0.041    0.007 new_character.py:265(__init__)
        1    0.000    0.000    0.038    0.038 macosx.py:14(Video_AutoInit)
        1    0.038    0.038    0.038    0.038 {built-in method InstallNSApplication}
        1    0.036    0.036    0.036    0.036 {built-in method quit}
       65    0.001    0.000    0.036    0.001 re.py:277(_compile)
       49    0.000    0.000    0.036    0.001 re.py:221(compile)

答案最终是 OS X 下的视网膜显示屏是差异化因素。即使在同一台 Mac 的外部显示器上运行它也能正常工作。但是将窗口移动到视网膜显示屏会使其变得缓慢。连接或不连接外部显示器。

另一方面,它在 Linux 下的同一视网膜显示屏上运行得很好。目前尚不清楚显示管理器/渲染的差异是什么导致了这种情况,但我怀疑有人可以对此做些什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pygame 简单循环在 Mac 上运行速度非常慢 的相关文章

随机推荐

  • 如何在 Javascript 中的小数点后附加一个额外的“零”

    嘿 我是 JavaScript 新手 使用一个文本框验证十进制数字 示例格式应为 66 00 但是如果用户键入 66 0 并且不在逗号后键入两个零 则在离开文本框后 它应该自动附加到它 这样它就是正确的格式 我怎样才能得到这个 我怎样才能追
  • 为什么当设置为 TLS 选择器时,ES 和 DS 在 64 位内核上最终会归零?

    下面的 32 位程序调用set thread area 2 http linux die net man 2 set thread area在 GDT 中创建一个条目 该条目旨在用于 TLS 通常将结果选择器放入FS or GS并成功使用
  • 从 PHP 启动交互式 SSH bash 会话

    我正在使用 PHP 编写常见服务器管理任务的快捷方式 我正在使用deployer org 但这应该不重要 我想添加一个任务 用于在通过 SSH 连接到服务器后启动交互式 bash 提示符 例如 您将运行 dep ssh 其中 dep 是一个
  • 在 phpunit 中 __construct 与 setup 之间有什么区别?

    我很想知道在测试类 construct 中创建对象是一种很好的做法 或者我们应该始终使用 setup teardown 方法 或 setUpBeforeClass tearDown AfterClass 方法 我知道每个测试都会调用 set
  • 在 Web API 2 中返回字符串

    听起来很简单 我还没有找到任何关于这方面的文档 也许我的措辞是错误的 所以如果是这样 一些关于这方面的好的文档将不胜感激 我只想返回一个字符串或字符串类型的模型 return string here 我每次都会收到此错误 Severity
  • 可基于多列格式化

    我正在使用该包formattable生成格式化表格 我发现了一个不错的资源在 R 中设置表格格式 http www r bloggers com formatting table output in r 但这里的箭头格式示例仅基于特定列 我
  • Windows 从属设备上的 Jenkins Git SSH 密钥

    目前 我们在 Windows 上有一个 Jenkins 主服务器 一个 ubuntu 从服务器和一个 Windows 从服务器 我正在尝试在 Windows 从机上设置 git msysgit 已安装 并且我将该目录包含在系统路径变量中 以
  • C++ 中的全局对象

    在下面的C 代码中 s分配在哪里 它使用堆 数据 bss 还是某种组合 我使用的是 Linux x86 平台 以防产生影响 有没有办法让 g 编译器向我显示布局 include
  • 为什么使用枚举而不是静态布尔?

    为什么在模板元编程中使用 enum 而不是 static const bool 被认为是更好的做法 我在 Alexandrescu 的书中读到过这一点 但找不到它 但我真的很想知道它 关键原因是 static bool 毕竟是一个变量 而
  • 通过与 cytoscape.js 中特定节点的连接来过滤图表

    Cytoscape 的新手 我有一张图 其中包含主导主网络和一些与我要删除的主网络未连接的较小网络 浏览文档我看不到明显的解决方案 我猜测可能需要一种自定义方法来循环所有节点 检查它们与主集群中最中心节点的图形距离 如果该距离未定义 则删除
  • 在 MySQL 中向 BIGINT 列添加索引有帮助吗?

    我有一个包含数百万个条目的表 以及一个包含BIGINT 20 每行的唯一值 它们不是主键 但在某些操作过程中 有数千个SELECTs 在中使用此列WHERE条款 问 向该列添加索引是否有帮助当条目数量增长到数百万时 我知道它适用于文本值 但
  • 如何解读这些时间戳?

    我正在尝试解析一些 xml 文件中写入的时间戳 大多数时间时间戳是这样的2009 07 22 07 00但有时我发现它们就像2009 07 22Z or 2009 07 22z 请帮助我如何解释这些 Z 以及如何解析它们 我认为这些 z 或
  • 使用 Liquid 标记获取 Jekyll 中的今天日期

    我认为这 应该 很容易 但我无法使用 Liquid 标记在 Jekyll 页面中显示今天的日期 根据文档 https github com Shopify liquid wiki Liquid for Designers 我应该能够这样做来
  • PCRE 库版本太旧

    Bug Genie 3 需要 PCRE 库 8 0 或更高版本 你有 版本 7 8 2008 09 05 将您的系统更新到最新版本 你常用的来源 在我查看问题并尝试通过以下步骤更新我的 PCRE 库后 wget the latest sou
  • IE7 中列表项之间的 CSS 间隙

    我无法消除 IE7 中列表项之间的间隙 HTML ul li div row 1 1 div div row 1 2 div li ul
  • Silverlight:创建圆形按钮模板

    我决定尝试制作一个圆形按钮 因此使用表达式混合 我在 xaml 上放置了一个按钮控件 然后 我通过选择 编辑控制部件 模板 gt 编辑副本 来创建一个模板 我正在尝试设计它 使按钮的左侧和右侧始终是完美的半圆 这样无论按钮长得多高或多宽 角
  • MySQL“插入...重复键”具有多个唯一键

    我一直在阅读如何使用MySQL在重复键上插入 看看它是否允许我避免选择一行 检查它是否存在 然后插入或更新 然而 当我阅读文档时 有一个地方让我感到困惑 文档是这样说的 如果指定 ON DUPLICATE KEY UPDATE 并且插入的行
  • 在 OpenGL 中,为什么 glVertexAttribPointer 要求“指针”参数以 void* 形式传入?

    规格为glVertexAttribPointer如下 void glVertexAttribPointer GLuint index GLint size GLenum type GLboolean normalized GLsizei s
  • 操作数类型冲突:uniqueidentifier 与 int 不兼容

    当我尝试创建下面的存储过程时 出现以下错误 操作数类型冲突 uniqueidentifier 与 int 不兼容 我不清楚是什么原因导致了这个错误 UserID 实际上是我所有表中的一个 int 有人可以告诉我我做错了什么吗 create
  • Pygame 简单循环在 Mac 上运行速度非常慢

    E 在 OS X 和 Linux 上进行相同的测试后 我可以确认以下情况仅发生在 OS X 上 在 Linux 上 它实际上以 1000 fps 的速度运行 正如我碰巧想知道的那样 有什么解释吗 感谢 TextMate 我更喜欢在 Mac