gpt4 book ai didi

python - 涉及pyqt时文件复制太慢

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:00 27 4
gpt4 key购买 nike

我正在使用此代码(非常简化的原始版本但问题仍然存在)来复制文件:

def copyfileobj_example(source, dest, buffer_size=1024*1024):
while 1:
copy_buffer = source.read(buffer_size)
if not copy_buffer:
break
dest.write(copy_buffer)

如果我在没有 pyqt 的情况下调用该函数,文件复制速度非常快,但是当我在一个简单的 pyqt 窗口中调用它时,复制速度会慢三倍。

快速复制大量文件是应用程序的重点,我认为包括 gui 会减慢速度,但不会慢三倍!!使用线程或多进程运行复制功能不会带来令人满意的改进。

这就是原样?你能给我推荐一些东西来解决这个性能问题吗?

编辑:There是我实际复制代码的要点,使用和不使用 PyQT 运行

最佳答案

这可能是 GIL 的影响.当 PyQt 在 UI 线程中运行时,它会在每次必须处理事件时“窃取”GIL。这意味着您上面的循环每次都会停止。当您在另一个线程中运行时也会发生这种情况;锁是全局的

解决方法:

  1. 使用更大的缓冲区。 Python 的 C 层不受 GIL 影响,因此如果您复制大量数据,则循环中的命令执行频率较低。
  2. 执行外部命令来进行复制(可能是另一个 Python 进程)。
  3. 使用 Qt 的 IO 类来复制文件,因为它们也不受 GIL 的影响(感谢 ekhumoro 的想法)。
  4. 用 C 编写一段代码来传输数据。
  5. 使用没有 GIL 的 Python 版本,例如 IronPython 或 Jython。

关于python - 涉及pyqt时文件复制太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32951949/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com