在python中复制大型二进制文件时系统挂起

时间:2012-08-15 07:39:54

标签: python file-io python-3.x wxpython

我已经创建了一个实用程序软件,用于在python中操作文件复制过程。每件事情都很好但是当我开始复制任何大于2 Gb的文件时,整个系统都会挂起。在我看来,它可能是一个内存泄漏问题。

我试过了:

  • 使用Shutil模块复制
  • 通过复制字节块
  • 来使用延迟操作
  • 按行复制文件数据LINE
  • 使用文件输入模块
  • 调整缓冲区数百万次
  • 用C编写复制文件部分,然后用python扩展它。

......但这一切都没有奏效。

以下是我的File Script和我的GUI Script的链接:

我正在使用带有2 Gb RAM的Windows 7。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

由于复制大于内存的文件时只有2 GB的内存,因此会导致问题。不要将整个文件加载到内存中。相反,我会做类似的事情:

with open(myLargeFile) as f:
   with open(myOtherLargeFile, "w") as fo:
   for line in f:            
      fo.write(line)

由于这可能需要很长时间,因此您应该将其放入GUI的单独线程中,否则GUI将显示为挂起。以下是关于wxPython的主题的几个链接:

答案 1 :(得分:-1)

解决这个问题的好方法是:

  • 使用多处理或多线程
  • 将文件拆分为块
  • 使用python dbm存储哪个块属于哪个文件名,文件路径和块偏移量(对于file.seek函数)
  • 为读取和写入块创建队列