2014-07-04 86 views
3

我用python搜索了很多關於VMware的問題,但是我沒有找到任何有關我的問題的信息。 我的問題是,python程序凍結,進程仍在運行,但它不使用CPU和內存使用情況不會改變。 程序不會返回任何異常或任何東西......它只是凍結,它永遠不會執行。 它看起來是隨機發生的,它不是我的機器沒有可用內存的問題,因爲在同一時間我可以在另一個會話中執行它。python程序在命令行中停止

我的機器是虛擬機:在Windows Server 2008 64位的VMware Tools 9.4.5

我試圖蟒蛇:2.7,3.3和3.4

我的示例腳本:(但不僅限於此腳本凍結)

print("START") 
for i in range(0, 1000): 
    print("step: " + str(i)) 
    file = open("./test_file.csv", "r") #file size is 1.2GB but I have 10GB RAM 
    for line in file.readlines(): 
    pass  
    file.close() #close the file 
print("END") 

例如輸出爲:

START 
step 0 
step 1 
step 2 
step 3 
step 4 

和它凍結,它隨機在哪一步(有時4,15,34 ...)我所能做的就是殺死進程並再次運行。 在執行過程中,我可以看到程序可重複使用1,2GB內存,並釋放...使用和釋放。 Freeze始終在釋放內存之後,從此時間開始內存使用情況穩定並且此過程的CPU使用率爲0%。

我在IDLE中使用調試器和堆棧查看器來運行腳本,但是當程序凍結時,整個空閒都沒有響應。 另外我在別人的虛擬機上試過它,沒有問題。

我將不勝感激任何建議,如何解決或調試那種類型的問題。

+0

你提到你有10GB的內存,但是......你的意思是主機有10GB的物理內存,或者你已經爲你的虛擬機分配了10GB的RAM?這聽起來像你的虛擬機內存不足。 – evadeflow

回答

5

我解決了它,問題不在於python或VMware ....只有我對Microsoft產品的瞭解。

我沒有提到我使用Windows命令行執行python腳本,並且「凍結」的原因是cmd。 我不知道釐米掛起執行任務,如果你在命令行中標記某事。

只有在這個虛擬機上我設置了「QuickEdit模式」。您可以按照以下步驟更改它:右鍵單擊cmd面板 - >屬性 - >選項卡:「選項」 - >部分:「快速編輯模式」)

在此模式下,如果您單擊命令行, ...暫停執行任務... 我關閉了「QuickEdit模式」,程序完美運行。 如果沒有QuickEdit模式,您不能通過單擊在命令行中標記任何內容。

我知道......我應該羞愧自己......而我確實。

+2

哦上帝,謝謝!我花了很多時間試圖在腳本或口譯員中找到問題。應該早些時候使用Google ...問題是完全一樣的。如果我在cmd中按任意鍵,Python會在沒有任何跡象的情況下凍結。 –

0

顯然你應該使用readline()而不是readlines()來讀取整個文件。

+0

我使用readlines(),因爲它將整個文件加載到內存中,我可以看到內存中發生了什麼;-)當我將其更改爲readline()和迭代範圍時,它也會在1 100步之後凍結;-) – Alex