2012-03-13 35 views
0
import serial 

ser = serial.Serial('COM5', baudrate=9600, parity=serial.PARITY_NONE, timeout=1) 
print "connected to: " + ser.portstr 
while ser.isOpen(): 
    line = ser.readline().strip() 
    if len(line)==16: 
     print "Id number is",line[5:-2] 

ser.close() 

我正在使用Pyserial連接到身份證閱讀器,並希望進行連續輪詢。如果我打印所有內容,我注意到每個超時都會導致readline存儲一個空字符串。上面的代碼改善了醜陋/無限輸出的問題,但我擔心內存使用情況。由於我正在重複使用「線路」,因此我認爲那裏沒有問題,但是在開始時沒有無限輪詢的問題嗎?Pyserial輪詢內存

謝謝

回答

1

它看起來很好 - 你不應該在這個循環浪費內存,因爲它不保留對過去的行引用。

在進程中設置一個手錶以查看內存消耗是否在一兩天內增長不會對您造成傷害 - 但我不擔心。

讓我們假設你在512MB RAM的舊機器上運行此操作,並且Python進程只剩下200MB - 並且readline的超時時間爲1秒,並且每個空字符串對象在內存中佔用大約64個字節 - 大約37天后您將失去內存。