Python Gui 编程和 CPU 使用。如何创建“空闲”或“节流”,以便一段代码不会消耗 100 个可用 CPU?

2024-02-14

当一个朋友正在测试我制作的 GUI 时,我收到了关于运行缓慢的投诉。果然,查看 Xp 的性能监视器,它完全开放地运行,消耗了尽可能多的 cpu。经过对 stackoverflow 的一些挖掘,这似乎是正常的预期行为。

我的问题是:有没有办法限制或限制程序允许使用的资源量?当我打开一堆程序时,我保持性能监视器可见,并且在大多数情况下,所有“专业”程序(例如 Photoshop、Sublime Text 等)似乎都处于“空闲”状态。也就是说,一旦启动,在初始峰值之后,它们的 CPU 使用率就会下降到处理器的一小部分。

如何限制 python 程序的使用,或使其仅在需要时才获取电源(就像其他程序似乎所做的那样)?

我的主循环的稍微截断的版本:

while True:
            events = pygame.event.get()
            for event in events:
                if event.type == QUIT:
                    if not flags['confirm']:
                        flags['alert'] = 1
                    else:
                        pygame.quit()

                elif event.type == MOUSEBUTTONDOWN:
                    text_box.set_focus(event.button, event.pos)
                    m_numbar.set_focus(event.button, event.pos)
                    # print event.pos 




            if not flags['window_open']:
                screen.blit(combined_bg, (0,0))
                t_button.update(events, screen)

            else:
                screen.blit(combined_blur, (0,0))

            if flags['config']:
                screen.blit(config_window_img, (0,0))
                text_box.update(events)
                text_box.draw(screen)
                m_numbar.update(events)
                m_numbar.draw(screen)
                submit.update(events, screen)
                cancel.update(events, screen)
                check_box.update(events, screen)
            else: 
                text_box.draw(screen)
                m_numbar.draw(screen)

            if flags['alert']:
                flags['window_open'] = True
                screen.blit(alert_dialog, (0,0))
                alert_cancel.update(events, screen)
                alert_confirm.update(events, screen)


            if flags['saving'][0]: 
                if time.time() - flags['saving'][1] < .75:
                    screen.blit(sav_img, (170,170))
                else:
                    flags['window_open'] = False
                    flags['saving'][0] = False


            if flags['currently_doing_thing']:
                if not flags['alert']: 
                    screen.blit(r_tag, (40,10))
                    if check_for_prog():
                        if not flags['prog_open']:
                            makeDir()
                            flags['prog_open'] = True
                            os.startfile("lla_.exe")
                    else:
                        flags['prog_open'] = False
                        if check_for_grab_process():
                            try:
                                os.system("TASKKILL /F /IM lla_.exe")
                            except:
                                pass




            config_button.update(events, screen)
            pygame.display.update()

除了 Gui 编程之外,是否可以限制“正常”任务的 CPU 使用率?例如,while 1将以 100% cpu 运行。有没有办法限制像这样的简单情况?


当使用 Pygame 时,你的主循环将看起来像这样(来自Python Pygame 简介 http://www.pygame.org/docs/tut/intro/intro.html):

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: sys.exit()

    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

请注意调用pygame.event.get()在循环的顶部。正常情况下,如果没有其他事情发生,这个函数会block当被叫时。这意味着您的脚本将等待event.get()函数返回,同时完全不使用 CPU。这event.get()函数仅在您需要处理一些有趣的事情(鼠标移动、按键等)时返回。

您问题的描述使我相信您没有使用pygame.event.get()因为它的用途。也许你可以展示你的主循环是什么样子的。

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

Python Gui 编程和 CPU 使用。如何创建“空闲”或“节流”,以便一段代码不会消耗 100 个可用 CPU? 的相关文章

随机推荐

  • Google Play Android .apk 上传“无法运行 aapt dump badging”

    自从我上次将应用程序上传到 Google Play 开发者控制台以来已经快一年了 这是我已经签名并压缩对齐的 Cordova 应用程序 按照我过去成功使用的相同流程 我现在收到以下错误 上传失败 无法使用 aapt dump badging
  • 使用 POST 在 R 中抓取动态表

    我正在努力刮这张桌子 http myfwc com wildlifehabitats managed alligator harvest data export 使用 R 到目前为止 我使用下面的代码只得到了 27 行 我想取回所有条目 并
  • 在 iOS 上通过 上传存储在云服务上的文件 0 字节

    我无法弄清楚为什么某些从 iOS 上传到我们服务器的内容会导致空文件 上传页面是一个简单的表单 使用 POST 和 enctype 作为 multipart form data 该问题似乎仅在用户执行以下操作时才会出现 正在使用 iOS 尝
  • 已分析与未分析:存储大小

    我最近开始使用 ElasticSearch 2 据我了解analyzed vs 未分析在映射中 not analyzed 在存储中应该更好 https www elastic co blog elasticsearch storage th
  • 在Android上加载依赖的共享库

    我正在移植大量本机代码和几个相互依赖的库 加载代码失败 因为 Android 链接器仅查找依赖项 system lib 并且不在应用程序安装目录中 data data com packagename nnn lib 作为第一个解决方法 我使
  • Chrome 显示 Lottie 动画模糊

    我遇到了缩放 Lottie 动画的问题 Chrome 模糊了动画 当动画缩放时 这一点尤其明显 在我的示例中 原始动画的尺寸为 842x596px 渲染效果越小 效果越差 如果您想在 Chrome 浏览器中重现它 这里是示例代码 lotti
  • 为带有条件编译的产品实现工厂模式

    我想以一种允许我在不引入类型依赖的情况下编译代码的方式实现工厂 或其他模式 enum CarType BMW PORSCHE MERC class CarFactory public static Car create CarType ty
  • 在 Google 电子表格中复制/粘贴数据验证

    我觉得自己有点傻 无法弄清楚这一点 这是我设置的数据验证 单元格范围 Journal J2 标准 从范围中列出 Journal W2 X2 细胞范围 Journal M2 标准 从范围中列出 Journal Y2 AA2 这在我的第一排很棒
  • SwiftUI Preview 不适用于 FetchRequest 和 Init

    我遇到了 SwiftUI Preview 有时无法工作的问题 但没有给我任何错误 只是一个空白的画布 我已经缩小了问题范围 当我将 fetchRequest 与 init 一起使用时它不起作用 但我不知道下一步该做什么 预览适用于以下代码
  • HTML 5 在 Firefox 上的性能?

    我在这里尝试了这个示例 http 9elements com io projects html5 canvas http 9elements com io projects html5 canvas 几分钟后 Firefox 速度变慢 我什
  • 从核心文件恢复程序状态

    在任何情况下 是否有可能将程序的状态恢复到生成核心文件期间的状态 我问的原因是 为了利用 gdb 执行函数等的能力 您需要有一个正在运行的实例 当然应该可以生成同一可执行文件的模拟进程 并将状态设置为核心的内容 如果不是 对于最初让我想要这
  • 启动没有 Activity 的 Android 应用程序

    我有一个旨在仅作为服务运行的应用程序 没有界面 仅在后台运行 我的 AndroidManifest xml 中没有提到任何活动 但放置了一个接收器以在手机启动时启动应用程序
  • 如何从 kubernetes 中的 dockerhub 拉取镜像?

    我计划在我的 kubernetes 集群基础设施中部署一个应用程序 我将图像推送到 dockerhub 存储库 如何从 dockerhub 拉取镜像 一行命令创建 Docker 注册表机密 kubectl create secret doc
  • 如何在c中调用的matlab函数中使用“全局静态”变量

    您好 我目前正在使用 MATLAB 和 C 进行编码 我已使用以下命令将 MATLAB 函数编译到 C 共享库中 MATLAB编译器 http www mathworks com help compiler shared libraries
  • 在 Matplotlib 中使用注释将文本框放置在图例下方

    我希望使用 annotate 在 Matplotlib 图中显示一些文本 并在图例框下方对齐 我已经检查了中提出的解决方案如何在 matplotlib 中将文本框直接放置在图例下方 https stackoverflow com quest
  • 让 Spring Boot 创建测试数据库

    如何让 Spring Boot 在测试类之间从头开始重新创建内存中的测试数据库 我有几个本地集成测试 注释为 SpringApplicationConfiguration and WebIntegrationTest改变数据库状态 我已将其
  • SimpleXML 解析元素列表异常

    您好 我在解析此 xml 时遇到问题
  • vuejs 中加载更多按钮

    我从 php 收到一个包含客户评论的数组 var comment list new Vue el comment list data testimonials JSON parse addslashes json encode array
  • 在服务器上运行 R 时,如何从 emacs ess 启动 x-window?

    我按照 ess 手册中的说明将 emacs snapshot 与 ssh el 包一起使用 有几种方法可以打开 R 会话 但我是这样做的 打开 emacs C x C f server dir file R 这使我进入 ESS S 模式 输
  • Python Gui 编程和 CPU 使用。如何创建“空闲”或“节流”,以便一段代码不会消耗 100 个可用 CPU?

    当一个朋友正在测试我制作的 GUI 时 我收到了关于运行缓慢的投诉 果然 查看 Xp 的性能监视器 它完全开放地运行 消耗了尽可能多的 cpu 经过对 stackoverflow 的一些挖掘 这似乎是正常的预期行为 我的问题是 有没有办法限