2012-03-13 31 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() 

私はIDカードリーダーに接続するためにPyserialを使用しており、ポーリングを継続したいと考えています。私がすべてを印刷すると、タイムアウトごとにreadlineが空文字列を格納することに気付きます。上記のコードは、醜い/無限の出力の問題を改善しますが、メモリの使用が心配です。私は "ライン"を再利用しているので、そこには問題はないと推測しますが、無制限のポーリングには問題がありますか? Pyserialポーリングメモリ

は、それが正常に見えるあなた

答えて

1

をありがとう - それは過去の行への参照を保持していないとして、あなたは、そのループでメモリを無駄にしてはいけません。

メモリ消費量が1日か2日かかっているかどうかを見るために時計を設定しても、あなたを傷つけることはありませんが、私は心配しません。

512MBのRAMを搭載した古いマシンで、Pythonプロセスのために200MBしか残されておらず、readlineへのタイムアウトが1秒かかり、各空の文字列オブジェクトが64バイトのメモリを占めているとしましょうあなたは約37日でRAMを使い果たします。

関連する問題