2013-05-02 60 views
3

我的websocket腳本有問題。隨着時間的推移,它消耗越來越多的CPU。我發現的一種補救措施是清除關聯的日誌文件。這可以解決這個問題一段時間,但CPU usuage在一天左右的時間內幾乎不會增加120%。 (使用linux服務器上的top命令)python腳本一直使用120%的CPU

執行文件寫入的腳本部分對我來說看起來有點奇怪。這裏是代碼:

f = open(file, 'a') 
f.write(line+"\n") 
os.fsync(f.fileno()) 
f.flush() 
f.close 

我不是一個Python專家,但對於初學者來說,最後三件事情在我看來是相同的。蟒蛇手動狀態http://docs.python.org/2/library/os.html#os.fsync是f.flush和os.fsync應該是相反的順序...

我可以只使用方法:

f = open(file, 'a') 
f.write(line+"\n") 
f.close 

和豈不是:f.close()?

任何想法?

+2

你永遠關閉您的文件,是的,它應該是'f.close()' – jamylak 2013-05-02 12:20:11

+0

你是對的,一個'接近()'意味着一個'flush()',並且我不知道如果你已經在處理一個文件對象而不是在原始句柄上的話,那麼fsync()會完成什麼。 – millimoose 2013-05-02 12:25:03

回答

4

使用此開(自動關閉)文件:

with open(filename, 'a') as f: 
    f.write(line+"\n") 
+0

即使進行了這種修改,腳本仍然像瘋了一樣吃CPU。這是正確的答案,所以我會接受它。 – Jeroen 2013-05-21 18:56:29