加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:45:44 所属栏目:Python 来源:网络整理
导读:我正在使用此代码(非常简化的原始版本但问题仍然存在)来复制文件: 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的
我正在使用此代码(非常简化的原始版本但问题仍然存在)来复制文件:

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.这意味着您的循环每次都会停止.当你在另一个线程中运行时也会发生这种情况;锁是全球性的.

解决方法:

>使用更大的缓冲区. Python的C层不受GIL的影响,因此如果复制大量数据,循环中的命令执行频率会降低.
>执行外部命令进行复制(可能是另一个Python进程).
>使用Qt的IO类来复制文件,因为它不受GIL的影响(Kudos到ekhumoro的想法).>在C中写一段代码来传输数据.>使用没有像IronPython或Jython这样的GIL的Python版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读