2012-08-15 48 views
-1

我已經創建了一個用於在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

回答

1

因爲只當您複製大於內存的文件時有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

-1

的好方法對於這個問題是:

  • 使用多處理或多線程
  • 分割文件分成塊用於存儲
  • 使用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