2012-03-13 2 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 для подключения к считывателю ID-карт и хотел бы иметь непрерывный опрос. Если я распечатаю все, я заметил, что каждый таймаут заставляет readline хранить пустую строку. Вышеупомянутый код улучшает проблему уродливого/бесконечного вывода, но меня беспокоит использование памяти. Поскольку я повторно использую «строку», я предполагаю, что там нет проблем, но есть ли проблема с неограниченным опросом для начала?Pyserial polling memory

Спасибо

ответ

1

Это выглядит отлично - вы не должны тратить память в этом цикле, так как он не хранит ссылки на последние строки.

Установка часов на процесс, чтобы узнать, растет ли потребление памяти за день или два, не повредит вам - но я бы не стал беспокоиться.

Предположим, что вы используете это на старой машине с 512 МБ ОЗУ, и осталось только 200 Мбайт для процесса Python - и что таймаут для readline занимает одну секунду и каждый пустой пустой объект занимает около 64 байтов в памяти - вы будете из ОЗУ примерно через 37 дней.