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

python – 涉及pyqt时文件复制太慢,第1张

概述我正在使用此代码(非常简化的原始版本但问题仍然存在)来复制文件: def copyfileobj_example(source, dest, buffer_size=1024*1024): while 1: copy_buffer = source.read(buffer_size) if not copy_buffer: break 我正在使用此代码(非常简化的原始版本但问题仍然存在)来复制文件

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时文件复制太慢所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存