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版本.
以上是内存溢出为你收集整理的python – 涉及pyqt时文件复制太慢全部内容,希望文章能够帮你解决python – 涉及pyqt时文件复制太慢所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)