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() 

나는 ID 카드 판독기에 연결하기 위해 Pyserial을 사용하고 있으며 연속 폴링을하고 싶습니다. 모든 것을 인쇄하면 각 타임 아웃이 readline에 빈 문자열을 저장하게됩니다. 위의 코드는 추악한/무한한 출력 문제를 개선하지만 메모리 사용에 대해 걱정하고 있습니다. 내가 "라인"을 재사용하고 있기 때문에 거기에는 아무런 문제가 없다고 추측되지만 무제한 폴링에 문제가 있습니까? Pyserial polling memory

그것은 잘 보이는 당신

답변

1

감사 - 그것은 과거의 라인에 대한 참조를 유지하지 않는 한 당신은, 그 루프에서 메모리를 낭비해서는 안된다.

메모리 소비량이 하루나 이틀에 걸쳐 늘어나고 있는지를보기 위해 시계를 설정하면 마음이 아플 수도 있지만 걱정하지 않아도됩니다.

메모리가 512MB이고 파이썬 프로세스를 위해 200MB 밖에 남지 않은 구형 기계에서 이것을 실행한다고 가정 해보십시오. 그리고 readline에 대한 시간 초과는 1 초가 걸리고 각 빈 문자열 객체는 메모리에서 약 64 바이트를 차지합니다 - 약 37 일 동안 RAM에서 벗어날 수 있습니다.