EB.*_*EB. 32 python windows performance pyinstaller
我有一个用Python编写的应用程序,并使用PyInstaller进行"编译".它还使用PyQt作为GUI框架.
在主窗口加载并显示之前,运行此应用程序会有大约10秒的延迟.据我所知,这不是因为我的代码缓慢.相反,我怀疑这是由于Python运行时初始化.
问题是该应用程序是使用自定义的laucncher /任务栏应用程序启动的.用户将单击按钮以启动应用程序,看不到任何内容,并单击其他应用程序上的其他位置.当我的应用程序显示它的窗口时,由于SetForegroundWindow的规则,它无法到达前台.
我可以访问PyInstaller win32加载器,Python代码甚至启动器代码的源代码.
我的问题是:
如何让这个应用程序更快启动?
如何衡量流程生命周期的前几秒花费的时间?
在第一个窗口显示之前减少时间的普遍接受的技术是什么?
我想避免添加启动画面有两个原因 - 一个,我希望它不会有帮助(开销是在Python代码运行之前)和两个,我只是不喜欢启动画面:)
如果我需要,我可能编辑PyInstaller加载器存根来创建一个窗口,但这是另一条我不想采取的路径.
Gio*_*ajo 23
告诉PyInstaller创建一个控制台模式的可执行文件.这为您提供了一个可用于调试的工作控制台.
在主脚本的顶部,甚至在第一次导入之前,添加一个打印"Python Code starting".然后从命令行运行打包的可执行文件.通过这种方式,您可以清楚地了解PyInstaller的引导加载程序或应用程序中的时间.
PyInstaller的引导加载程序在单目录模式下通常非常快,但在单文件模式下它可能会慢很多,因为它将所有内容都卸载到一个临时目录中.在Windows上,I/O非常慢,然后你有防病毒软件需要仔细检查所有这些DLL文件.
PyQt本身不是问题.PyQt由SIP生成,它生成非常快速的延迟绑定; 导入整个PyQt比任何其他GUI库都要快,因为它基本上什么也不做:所有对类/函数的绑定都是在你访问它们时(以及如果!)动态创建的,也节省了大量内存.
如果您的应用程序出现缓慢,那么没有PyInstaller也是如此.在这种情况下,您唯一的解决方案是启动屏幕(只导入PyQt,创建QApplication,创建显示启动画面,然后导入程序的其余部分并运行它),或者重新编写代码.没有细节,我帮不了你.
Shi*_*ish 18
我怀疑你正在使用pyinstaller的"一个文件"模式 - 这种模式意味着它必须在应用程序启动之前将所有库解压缩到一个临时目录.在Qt的情况下,这些库非常大并且需要几秒钟来解压缩.尝试使用"一个目录"模式,看看是否有帮助?
Rus*_*ssj 12
我同意上面的答案。使用 onefile 模式时,我的 Qt python 程序需要大约 5 秒才能在体面的 PC 上启动。改成--onedir后,启动只用了一秒左右;用户双击 exe 文件后几乎立即。但缺点是那个目录下有很多文件,不是那么整齐。
我使用 py2exe 和 cx_Freeze“编译”了一些 wxPython 应用程序,它们的启动时间都不超过 4 秒。
我没用过pyQT,但是用wxPython启动速度还可以,第一次初始化后如果关闭再打开,比第一次要快。
| 归档时间: |
|
| 查看次数: |
17570 次 |
| 最近记录: |