【问题标题】:Ludicrous processor usage on my script. How to optimize it?我的脚本上的处理器使用荒谬。如何优化它?
【发布时间】:2019-12-03 11:37:54
【问题描述】:

我看到一些应用程序可以将视频设置为壁纸,但它们不是免费的。我没有很多钱,所以我决定用 Python 创建自己的!

创建起来比我想象的要容易得多! 不幸的是,我在这个脚本中使用了完全疯狂的处理器百分比!

其实背景的变化我确实为explorer.exe请求了很多资源

我的意思是,等等,看看: 哎呀……这是针对 25 FPS 的版本!

所以,我请求您的帮助和您的知识,希望能够在没有太多处理器的情况下实现 30 FPS。

这是我的脚本,很短:

from time import sleep
import ctypes, os

imagePath = [os.path.normpath("C:/Users/Administrateur/Pictures/bg/output ({}).jpg".format(i)) for i in range(250)]
while True :
    for i in range(250):
        ctypes.windll.user32.SystemParametersInfoW(20, 0, imagePath[i], 0)
        sleep(0.04) # only 25 fps !

谢谢!

【问题讨论】:

  • 1:您有未定义行为 (stackoverflow.com/questions/58610333/…)。在 64bit 上它可能会崩溃。 2:你没有25 fps(除非SystemParametersInfoW不需要时间来执行,这是不正确的,因为它必须访问磁盘,解码。 jpg,显示它并重新绘制桌面顶部的所有窗口)。我建议在开始时获取时间,在结束时让程序运行一段时间,然后将 while 迭代次数与 2 个时间戳之间的差异进行比较。
  • 3:查看 SPI_GETDESKWALLPAPER 文档,它提到了位图。不确定这是否会有所不同,但我会尝试将所有 jpg 转换为 .bmp 并尝试使用这些。
  • 好的,我检查一下!
  • @ChrisFati 2. 可能不会像你想象的那么糟糕;我不认为所有的 IO 等都与该 API 调用同步发生。但原则上你是正确的

标签: python python-3.x ctypes wallpaper desktop-wallpaper


【解决方案1】:

如果定期设置图像,您将无法获得该性能。脚本中的瓶颈不是 Python 代码,而是在墙纸更改时 Windows 必须执行的加载。

要获得所需的内容,您需要播放实际视频;视频是跨空间时间压缩的,并且编解码器通常具有硬件支持,因此在处理器上获取下一帧更容易。我没试过,但显然VLC should be able to do it

【讨论】:

    猜你喜欢
    • 2010-10-21
    • 1970-01-01
    • 2012-09-07
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多