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的影响,因此如果复制大量数据,循环中的命令执行频率会降低. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |