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

问题描述:

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

我曾尝试:

  • 复制它使用Shutil模块
  • 使用懒人操作通过复制字节
  • 通过LINE
  • 复制文件数据线的大块使用的FileInput模块
  • 调整缓冲百万次
  • 用C写入复制文件部分,然后用python扩展它。

...但没有一个工作。

这里是链接到我的File Script和我GUI Script

我使用Windows 7的RAM 2 GB。

任何人都可以帮忙吗?

+2

欢迎StackOverflow上。鼓励您使用少量的代码来重现您遇到的确切问题。没有这个,社区最不可能帮助回答你的问题。另请注意,张贴链接到非现场代码是非常不鼓励。您可以点击上方的“修改”链接来修改您的问题以纠正这些问题。 – razlebe 2012-08-15 07:47:21

+1

@Maulwurfn你可以链接吗? OP的当前配置文件不显示任何其他问题。 – razlebe 2012-08-15 07:51:25

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

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

由于这可能需要很长的时间,你应该把这个变成一个单独的线程从您的GUI或GUI会出现挂起。下面是关于该主题的几个链接对wxPython的:

+0

感谢您的帮助..它工作! – 2012-08-15 17:43:09

的好方法对于这个问题是:

  • 使用多处理或多线程
  • 分割文件分成块用于存储
  • 使用Python DBM该块属于哪个文件名,文件路径和组块的偏移量(用于file.seek功能)
  • 读创建队列和写入的块
+0

大部分这是可怜的意见。 'multiprocessing'(或线程)不会使拷贝速度更快(实际上,它可能会减慢速度),而'dbm'完全没有必要。只需读取和写入固定大小的块即可。 – duskwuff 2012-08-15 08:08:44

+0

@duskwuff巢穴我不明白为什么我的系统挂起时,我复制2 GB以上的文件...我使用固定大小的块与缓冲区在我的脚本...但不幸的是没有工作.. – 2012-08-15 08:11:39

+0

PLZ有人帮助我...出.... – 2012-08-15 08:13:04